【linux基础】16、软件包管理

一、软件包概述

1、相关概念

源码安装操作系统方式:通过宿主机安装

GPL:公布源码(c,c++)

POSIX规范:Portable Operatin System (原代码)移植性

API:应用编程接口,兼容,意味开发库兼容,因此源代码可夸平台

ABI:应用二进制接口,兼容,编译后的程序可夸平台

库:就是函数\功能,可执行程序,本身不能作为程序执行的入口,但可以被调用

编译好的二进制格式

glibc:linux标准的C库

程序开发完成后要使用得经过的步骤:

预编译,编译,汇编,链接(把库文件链接到软件可以找到的路径)

编译分为两种:

静态编译:程序包含依赖库,程序体积变大

动态编译:dll(windows),so(shared object) 调用系统共享库

注意:应用程序(编译好的)的可移植要求

1)OS平台:应用程序必须为特定平台所支持的版本,库

2)硬件平台:应用程序必须为特定的cpu所支持,指令集不一样,内核也不一样

2、程序包组成部分

二进制程序:

  系统二进制程序默认存放路径:

/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin

程序包提供的二进制程序路径:

/usr/local/apache/bin,/usr/local/apache/sbin

库文件:程序自身提供自身各组件依赖的共享库,和对该程序进行二次开发就要调用程序的共享库

(对程序库的使用格式头文件的包含,库的头文件,linux上头文件都保存在/usr/include目录下)

系统二进制程序默认存放路径:

/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64

系统头文件(文本格式)存放路径:

/usr/include

指定系统查找库文件的路径的配置文件:/etc/ld.so.conf和/etc/ld.so.conf.d/*.conf

也可以使用ldd命令查看程序所依赖的共享库:

ldd [options] FILE...

[[email protected] ~]# ldd /bin/cat
	linux-vdso.so.1 =>  (0x00007fff357ff000)               #调用动态库的入口
	libc.so.6 => /lib64/libc.so.6 (0x00007fdebbd52000)     #库名=>库文件地址
	/lib64/ld-linux-x86-64.so.2 (0x00007fdebc0f6000)       #直接写了库文件地址

配置文件:/etc

帮助文档:/usr/share/man/,/usr/share/info

man COMMAND 是到某路径下查找与命令同名的通常以.gz结尾的压缩文件

man命令查找路径可以在/etc/man.conf中配置,也可以用选项直接指定:

man -M /usr/local/nginx/man.nginx

二、包管理器

1、程序包管理器

功能:

维护数据库

包含软件名和版本

安装生成的各文件路径、名称、效验码

软件之间依赖关系

提供功能性说明

提供程序组成格式

文件清单

安装卸载时运行的脚本

Debian:.deb,dpkg

Redhat:.rpm,rpm(RedHat Package Manage,RPM is Package Manager)  #包管理器的标准

包管理器的基本功能:

制作程序包,安装,查询,升级,卸载,效验,数据库管理

依赖关系:循环依赖,版本依赖

3、前端管理器     

能自动解决依赖关系

apt-get:Debian系

yum: redhat系

4、应用程序的安装方式

源代码编译:

简单打包的二进制格式,就是通用二进制包,

使用包管理器:便捷,易用

包管理器的前端工具

.src.rpm  源码格式的rpm包,可以在不同平台上自行在开发环境下自行编译,安装

三、rpm包的使用

1、包命名格式

源程序:

name-version.tar.gz

version:major.minor.release

name-major.minor.release.tar.gz  #这里release是指原程序的发行号

rpm包:

name-version-release.ARCH.rpm

#这里的release:是用过程序源码制作成rpm包的发行号,还包含使用的OS

#ARCH:x86_64,x86,i386,i586,i686,noarch

例: bash-4.2.4-1.el6.x86.rpm   #el6:redhat enterprise linux 6

nginx-1.4.16-5.rpm      #没指明硬件平台,就是平台通用

分包:把一个大的程序打包制作成多个rpm包

主包:bash-4.2.4-1.el7.x86.rpm

支包:bash-devel-4.2.4-1.el7.x86.rpm

2、如何获取程序包

1)发行商提供的程序包

2)Fedora-EPEL

3)项目的官方站点

4)搜索引擎

http://rpmfind.net

http://rpm.phome.net

http://pkgs.org

程序包合法性验证:

验证包完整性:

通过md5或sha1效验码验证

验证来源合法

公钥

四、基于rpm命令实现程序包管理

1、安装

使用包全名

格式:

rpm -i /PATH/TO/RPM_PACKAGE ... 

-i,--install:安装

-v:显示详细信息;-vv:更详细

-h,--hash: 以#的个数显示安装进度

--test:仅测试,不真正安装,可以看到该包的依赖关系

--nodeps:忽略依赖关系

重装:rpm -ivh --replacepkgs RPM_PACKAGE

降级:rpm -ivh --oldpackage RPM_PACKAGE

如果存在依赖关系:

解决依赖关系

忽略依赖关系:--nodeps    #虽然能安装上这个包,但觉大多数不能用

注意:

重装或升级时,原来的配置文件不会被覆盖,新安装的配置文件将会重命名为以.rpmnew为后缀的文件

2、升级

格式:

rpm -Uvh package_name  如果有旧版程序包,则升级,如果没有,则安装

-Fvh:如果有旧版程序包,则升级,如果没有,则无操作

--force:强制升级

--nodeps:忽略依赖关系

注意:不要对内核执行升级操作,多版本内核可并存,因此,建议执行安装操作

3、卸载

指定包名即可

格式:

rpm -e package_name

    -evh

如果卸载被其它程序所依赖的包:

1、把依赖者一同卸载

2、忽略依赖关系

3、不再卸载

4、查询

格式:

rpm -q package_name(包名)  查询该rpm包是否安装

-qa    查询系统所有已经安装的rpm包

-qi    查询rpm包的描述信息

-ql    查询rpm包安装之后在当前系统生成的文件列表

-qc    查询rpm包安装之后在当前系统中生成的配置文件

-qd    查询rpm包安装之后在当前系统中生成的帮助文件

-qf    查询文件是所有哪个rpm包安装生成的

-q --scripts    查询rpm包相关的脚本

脚本有四类:

preinstall:安装前脚本

postinstall:安装后脚本

preuninstall:卸载前脚本

postuninstall:卸载后脚本

rpm  -qp  包全名  查询当前系统中尚未安装的rpm包文件的相关信息

-qpl   查询安装后生成的文件列表

-qpi,-qpc,-qpd   #上面-q可以使用选项这里都可以使用

注意这里说的尚未安装是需要有安装包存在才可以查询

[[email protected] ~]# rpm -qpl zsh-4.3.10.-7.el6.x86_64.rpm
error: open of zsh-4.3.10.-7.el6.x86_64.rpm failed: 没有那个文件或目录


5、效验

检查包安装后生成的文件是否被修改过

rpm -V 包名

S file Size differs  大小发生改变

M Mode differs (includes permissions and file type)  权限

5 digest (formerly MD5 sum) differs   MD5效验码

D Device major/minor number mismatch  主设备号,次设备号

L readLink(2) path mismatch   路径不匹配

U User ownership differs     属主

G Group ownership differs    属组

T mTime differs           修改时间

P caPabilities differ       能力

[[email protected] ~]# rpm -V bash      #没有信息返回,说明没有被改变
[[email protected] ~]# 
[[email protected] Packages]# rpm -V wget #改变了的显示对应信息,没改变的是.
S.5....T.    /usr/share/locale/zh_TW/LC_MESSAGES/wget.mo

6、rpm包校验

检验来源合法性和软件包完整性

验证包完整性:通过单向加密(md5|sha1)效验码

验证来源合法:通过公钥加密(RSA)

验证命令:gpg   #是pgp(加密规范)的实现

但不手动使用gpg命令,使用的是:rpm -K 包全名

导入制作者的公钥:CentOS发行商的公钥在ISO文件 “RPM-GPG-KEY-CentOS-6”

rpm --import 公钥           #导入公钥

rpm -K /PATH/TO/PACKAGE_FILE   #验证包完整来源合法性 

rpm --checksig /PATH/TO/PACK_FILE  #--checksig相当于-K

--nosignature:不检查来源合法性

--nodigest:不检查完整性

[[email protected] Packages]# rpm -K zsh-4.3.11-4.el6.centos.x86_64.rpm  
zsh-4.3.11-4.el6.centos.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

7、rpm包数据库重建

rpm包数据库路径: /var/lib/rpm

重建:

rpm --initdb     初始化

如果事先不存在一个数据库,则新建之

rpm --rebuilddb   重建

直接重建数据库,会覆盖原有的库

五、YUM管理

1、yum简介

YUM: Yellowdog Updater Modified

yum repositories

文件服务器(共享rpm包):通过yum所支持的文件共享机制将各rpm包通过文件服务器共享

repository:仓库

1、各rpm包

2、依赖关系、程序包安装后所能生成的文件列表等元数据文件

ftp,http,nfs,file

yum客户端工作机制:

1、配置文件:指定各可用的yum仓库

2、缓存元数据:yum会到各可用yum仓库获取元数据,并缓存至本地

3、分析元数据:根据具体操作请求完成元数据分析:可能包括检查依赖关系,文件列表等信息

4、执行具体操作

2、yum配置

要使用yum管理应用程序,首先得配置其可用的yum仓库,保存在配置文件中

yum的配置文件:

/etc/yum.conf              全局配置,一般默认即可不用更改

/etc/yum.repos.d/*.repo

配置文件格式:由两段组成,类似windows的ini配置文件

[main]:主配置段

[repo]:仓库配置段

配置repo:

[repo_ID]

name=NAME

baseurl=仓库的访问路径

enabled=[1|0]   1表示启用,0表示不启用,如果不存在该配置,则默认启用

gpgcheck=[1|0]   是否检查包来源合法性和完整性

gpgkey=公钥文件  (可以在本地,也可以是服务器端路径)

cost=定义此仓库的开销,默认为1000    数值小的优先使用

yum程序的配置文件指定对应服务器访问方式:

ftp    ftp://server/path/to/repo

http   http://server/path/to/repo

nfs    nfs://server/nfs_path

file   file:///path/to/repo

3、yum的使用

yum repolist [all|enabled|disabled]  默认列出所有可用repo   启用,禁用

yum clean [all|package|metadata|expire-cache|rpmdb|plugins]  清除所有缓存

yum 缓存路径/var/cache/yum

yum makecache 生成缓存

yum list [all|installed|available]  默认列出所有仓库的rpm包  已安装,可安装

yum grouplist

yum info (包名) 可以是当前系统中未安装的程序

yum groupinfo

三个跟开发相关的包组:

Desktop Platform Development:有图形程序时需要安装此组

Server Platform Development

Development Tools

安装:yum install,yum groupinstal

重装:yum reinstall

卸载:yum [remove|erase],yum greoupremove

检查可升级的包:yum check-update

要升级到指定版本:yum update x-4.4.12-1el7.x86_64.rpm

升级:yum update

降级:downgrade pack_name

查询某文件由哪个rpm包安装后生成的:provides /path/to/somefile

查看yum的命名历史:yum history

yum配置文件中可用的宏

$releasever:程序的版本,对Yum而言指的是redhat-relrase版本。只替换为主版本号,如Redhat6.5 则替换为6

$arch:系统架构

$basharch:系统基本架构,如i686,i586等的基本架构为i386

$YUM0-9:在系统定义的环境变量,可以在yum中使用

使用yum下载rpm包而不执行安装

1. 安装yum-downloadonly或 yum-plugin-downloadonly 软件包。

yum install yum-plugin-downloadonly  #其实是升级yum,升级到3.2.29-69就包括了这个插件

yum install xxx --downloadonly --downloaddir=/xxx -y

[[email protected] puppet-3.7]# rpm -qa|grep yum

yum-plugin-fastestmirror-1.1.30-14.el6.noarch

yum-3.2.29-40.el6.centos.noarch

yum-metadata-parser-1.1.2-16.el6.x86_64

[[email protected] puppet-3.7]# yum install yum

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

* base: mirrors.pubyun.com

* epel: mirrors.yun-idc.com

* extras: centos.ustc.edu.cn

* rpmforge: ftp.kddilabs.jp

* updates: centos.ustc.edu.cn

Setting up Install Process

Resolving Dependencies

--> Running transaction check

---> Package yum.noarch 0:3.2.29-40.el6.centos will be updated

---> Package yum.noarch 0:3.2.29-69.el6.centos will be an update

--> Finished Dependency Resolution

Dependencies Resolved

===================================================================================

Package      Arch            Version                          Repository     Size

===================================================================================

Updating:

yum          noarch          3.2.29-69.el6.centos             base          1.0 M

4、自己设置本地repo源

1、准备文件服务器ftp,http,nfs;使用httpd为例,请事先确保以安装httpd程序包

2、在/var/www/html目录。使用一个目录来保存准备制作称为yum仓库的所有rpm包

3、创建yum仓库

createrepo /var/www/html/openstack  事先安装好createrepo程序,创建好的repo源因为没有生成comps.xl文件,不能使用groupinstall,待后续学习

4.启动http服务

5.配置实用自建的yum仓库

7.测试使用

五、编译安装

源码:c,c++

perl

python

编译安装的步骤:

1、拿到源代码并解压

2、进入源码目录中

3、执行configure脚本 # ./configure

4、编译  # make

5、安装  # make install

这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤:

./configure:是用来

make:是用来编译的,它从Makefile中读取指令,然后编译。

make install:是用来安装的,它也从Makefile中读取指令,安装到指定的位置。

1、configure,这一步一般用来生成 Makefile,为下一步的编译做准备,会检测你的安装平台的目标特征,自动设定源程序以符合各种不同平台上系统的特性,并且根据系统叁数及环境产生合适的Makefile文件或是C的头文件(header file),让源程序可以很方便地在这些不同的平台上被编译连接。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本。

你可以通过在 configure 后加上参数来对安装进行控制,

比如代码:./configure –prefix=/usr 意思是将该软件安装在 /usr 下面,执行文件就会安装在 /usr/bin (而不是默认的 /usr/local/bin),资源文件就会安装在 /usr/share(而不是默认的/usr/local/share)。同时一些软件的配置文件你可以通过指定 –sys-config= 参数进行设定。有一些软件还可以加上 –with、–enable、–without、–disable 等等参数对编译加以控制,你可以通过允许 ./configure –help 察看详细的说明帮助。

2、make,这一步就是编译,大多数的源代码包都经过这一步进行编译(当然有些perl或python编写的软件需要调用perl或python来进行编译)。如果 在 make 过程中出现 error ,你就要记下错误代码(注意不仅仅是最后一行),然后你可以向开发者提交 bugreport(一般在 INSTALL 里有提交地址),或者你的系统少了一些依赖库等,这些需要自己仔细研究错误代码。

3、make insatll,这条命令来进行安装(当然有些软件需要先运行 make check 或 make test 来进行一些测试),这一步一般需要你有 root 权限(因为要向系统写入文件)。

到此时,就可以运行make进行编译,在运行make install进行安装了,最后运行make clean删除临时文件。

$ make

$ make install           (注:运行这个要有足够的权限)

$ make clean

利用configure所产生的Makefile文件有几个预设的目标可供使用,其中几个重要的简述如下:

make all:产生我们设定的目标,即此范例中的可执行文件。只打make也可以,此时会开始编译原始码,然后连结,并且产生可执行文件。

make clean:清除编译产生的可执行文件及目标文件(object file,*.o)。

make distclean:除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。

make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。如果用bin_PROGRAMS宏的话,程序会被安装至/usr/local/bin这个目录。

make dist:将程序和相关的档案包装成一个压缩文件以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz为名称的文件。 PACKAGE和VERSION这两个变数是根据configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定义。在此范例中会产生test-1.0.tar.gz的档案。

make distcheck:和make dist类似,但是加入检查包装后的压缩文件是否正常。这个目标除了把程序和相关文件包装成tar.gz文件外,还会自动把这个压缩文件解开,执行 configure,并且进行make all 的动作,确认编译无误后,会显示这个tar.gz文件可供发布了。这个检查非常有用,检查过关的包,基本上可以给任何一个具备GNU开发环境-的人去重新编译。

configure脚本的通用功能:

我们需要定义的配置:

1、指定安装路径

--prefix=/usr/local/package_name

--sysconfigdir=/etc/package_name

2、指定启用或禁用的特性

--enable-FEATURE 例如:--enable-fpm

--disable-FEATURE

3、指定所依赖功能,程序或文件

启用某功能:   --with-FUNCTION=该程序的安装路径

--without-FUNCTION

不同的程序,其configure脚本功能不同,要获取帮助

./configure --help

二进制程序的访问方法

/etc/profile.d/apache.sh

PATH=/usr/local/apache/bin:/usr/local/apache/sbin:$PATH

expore PATH

source /etc/profile.d/apache.sh

头文件输出给系统

ln -sv /usr/local/apache/include /usr/include/httpd

让系统重新生成库文件路径缓存

vim /etc/ld.so.conf.d/httpd.conf

/usr/local/apache/lib

ldconfig

导出man文件

/etc/man.conf

添加 MANPATH /usr/local/apache/man

或者直接使用命令:man -M /usr/local/apache/man apache

总结:源码编译安装

前提:准备好开发环境

编译过程:

./configure

make

make install

输出

头文件

库文件

二进制程序

man文档

时间: 2024-10-10 11:06:28

【linux基础】16、软件包管理的相关文章

Linux基础_软件包管理

一,软件包管理 # 使用rpm安装及移除软件RPM 1:rpm:Red-Hat Package Manager 2:rpm文件形式 yum-metadata-parser-1.1.2-16.el6.x86_64.rpm 第1部分是name,表示这个rpm软件包的名称: # yum-metadata-parser 第2部分是version,表示这个rpm软件包的版本编号: # 1.1.2 第3部分是release,表示这个rpm软件包的版本发布次数(修正号码): # 16 第4部分是archite

linux基础(11)--软件包管理--RHEL6.5

1. rpm软件包管理 rpm全称是redhat package manager, 只能用于redhat系列系统的软件包管理,如RHEL.Centos.fedora 本文中光盘镜像挂载到/mnt下. 系统自带rpm包存放在./mnt/Packages下, ls | wc -l   可以查出系统自带rpm包的数目. (1)安装rpm包 rpm -ivh /mnt/Packages/XXX.rpm 如果出现以来关系,可以强制忽略: rpm -ivh /mnt/Packages/XXX.rpm (2)

Linux基础-yum软件包管理

任务目标:自定义yum仓库:createrepo,自定义repo文件,使用yum命令安装httpd软件包,卸载httpd软件包:yum –y remove 软件名 ,使用yum安装组件'KDE 桌面':yum –y groupinstall 组件名,掌握使用yum删除组件'KDE 桌面':yum –y groupremove 组件名,掌握清除yum缓存:yum clean all,使用yum查找软件包:yum search 软件包名 So Easy , o Easy , Easy , asy ,

Linux基础-rpm软件包管理

任务:挂载光盘文件到/media目录,进去/media目录下的Packages目录,查看系统已安装的所有rpm包,查看系统是否安装dhcp软件包,安装dhcp软件包,查看dhcp软件包的信息,查看dhcp软件包中所包含的所有文件,查看/bin/ls文件是由哪个软件包产生,卸载dhcp软件包 时间短任务重,没毛病老铁666直入正题: 1) 使用 mount 挂载光盘文件 /dev/sr0 到/media目录 OMG以上提示似乎告诉我,你挂载失败了,好吧那小爷我把你们统统卸载掉 使用 umount

【one day one linux】linux下的软件包管理工具

Linux 下的软件包管理工具 linux下的软件安装可以通过两种方式,一种是直接使用自带的软件包管理工具安装,另外一种通过编译源码安装. 1.软件包的种类 Red Hat和Fedora:redhat最早发行的个人版本的Linux,自从Red Hat 9.0版本发布后,RedHat 公司就不再开发桌面版的 Linux发行套件,Red Hat Linux停止了开发,而将全部力量集中在服务器版的开发上,也就是 Red Hat Enterprise Linux 版.2004年4月30日,Red Hat

Linux基础之磁盘管理

 Linux基础之磁盘管理         关于Linux中磁盘管理我们应该从以下四个方面入手,去了解和学习磁盘管理的知识. 第一点 磁盘的结构--硬盘         硬盘的参数 结构:磁盘的盘片,磁头,马达(机械键盘) 类型:固态硬盘(SSB)和机械硬盘 接口:早期的IDE接口,现在的SATA,SCSI,SAS 还有容量,转速,传输速度,缓存等. 硬盘存储术语 head: 磁头 track: 磁道 cylinder: 柱面 secotr: 扇区  512bytes(字节) 第二点 磁盘的分区

Linux系统管理之——软件包管理

安装.升级和卸载应用软件是影响用户对操作系统评价的决定性因素之一. 本文从基本的rpm/dpkg命令行出发,以CentOS和UBUNTU为例,介绍典型Linux系统中应用软件的管理和使用: 软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询: RPM全称为:Redhat PacesgeManager,最早由RedHat公司制定实施,随后被GNU开源操作系统接收并成为很多Linux系统(RHEL)的既定软件标准: DEB软件包管理工具--D

linux下rpm软件包管理命令详解

1.linux下软件的基本概念 程序需要用到的重要文件:配置文件,指令,库文件,帮助信息 /etc, /bin, /sbin, /lib,/usr/share/man 1.1.系统启动需用到的程序路径,必须在根文件系统的分区上 /etc, /bin, /sbin, /lib,/usr/share/man 1.2.系统启动后需用到的操作作系统核心功能或必要功能程序路径 /etc,/usr/bin,/usr/sbin/,/usr/lib,/usr/share/man 1.3.用户安装的第三方程序所需

linux基础入门之管理linux软件

Linux软件包 软件包分类 源码包 修改源代码 编译 安装 运行效率更高更 加稳定 二进制包 优点 管理简单 缺点 不能修改源代码,依赖性问题 Redhat  centOS    rpm Debain  Ubuntu    deb RPM包命名 name-version-release.arch.rpm                src.rpm 源码包 名称-版本-发行版.平台.rpm version 主版本号 软件有了重大改进 次版本号 某个子功能发生重大变化 修订号   修复了软件的一

Linux系统红帽软件包管理器(RPM)

1.源代码管理 绝大多数开源软件都是直接以源代码形式发布的,一般会被打包为tar.gz 的归档压缩文件.程序源代码需要编译为二进制可执行文件后才能够运行使用.源代码的基本编译流程为 ./configure:解压缩后运行该命令,它主要检查编译环境.相关库文件以及配置参数并生成 makefile make:对源代码进行编译,生成可执行文件 make install:将生成的可执行文件安装到计算机中 源代码形式的软件使用起来较为麻烦,但是兼容性和可控性较好.并且开源软件一般会大量使用其他开源软件的功能