首页 > 代码库 > linux软件包的安装之----rpm软件包管理工具

linux软件包的安装之----rpm软件包管理工具

程序语言开发的程序:系统调用:库,动态库(开发时指向的库)

 

程序:只要Windows上开的程序所指向的库遵循POSIX规范将源码拿到linux上编译时没问题的,运行应该也没有问题,能否运行还要看依赖的库文件是否存在;因为linuxWindowsABI不同,Windows上编译好的程序无法在linux上正常运行,即使程序源码遵循POSIX规范。

 

API:POSIX(可移植os规范)

ABI:应用二进制接口

 

linux发行商:32bit:i386,预先编译好以后提供给用户二进制程序

                            64bitx86_64,可兼容运行32bit程序,反之不行。

 

Debiandpt(软件包管理器)-àapt-getapt库中有成千上万个包或者库,dpt就是个打包工具,将每个包的依赖关系提取出来,放在一个文件中,自动检测当前系统已安装的包/库,并根据当前系统已安装的包/库,及apt库中包/库,以及被安装软件包的依赖关系,自动解决依赖关系,自动安装用户指定的包)

 

Redhatrpm----yum

 

*rpm是仿照dpt的,yum是仿照apt-get的,因此真正牛的osdebian!!!

 

二进制程序放置目录:/bin,/sbin,/usr/sbin,/usr/local/sbin,/usr/local/bin

库文件放置目录:可能是一个程序特有的(也可供其他程序调用),也可能是共享库;/lib[64],/usr/lib[64],/usr/local/lib[64]

 

Linux上库文件分为2种:1)静态库,以.a后缀名结尾(2)动态库,以.so(sharedobject)后缀名结尾。

 

库文件也是可执行程序,但不能独立运行,因为它没有执行入口(例如cmain函数,shellsha_bang等等),库文件在面向过程的语言中被称为函数,程序执行入口为主函数main(),库文件在程序运行时会被载入内存,可被多个程序共享使用,因此库文件也被称为共享库。

 

配置文件:一般在/etc/下,格式为纯文本或者xml

 

帮助文件:通常有2类:(1man手册:/usr/share/man,/usr/local/share/manman命令配置文件/etc/man.config中用MANPATH来定义man文件的搜索路径)(2)/usr/share/doc/程序名-版本号/下一般有README\INSTALL等帮助文件。

 

软件包管理工具(数据库)提供的主要功能如下:

  • 提供文件清单

  • 提供文件放置路径

  • 提供程序依赖关系

  • 程序功能说明,介绍

  • 它有一个数据库,其中存放了(1,已安装的每一个程序;2,每个程序展开的文件以及路径;3,每个文件在安装时的md5校验值,已确定在安装后此文件是否被修改过)

  • 软件包安装事务:防止安装冲突、卸载冲突,包升级时检测是否会有冲突(依赖关系等,如果包原来的库文件被另一个程序所依赖,升级后库文件更新后,那个程序可能无法正常运行)

 

软件包管理器提供的功能:打包(***对于我们来说:定制编译rpm包,完成上千台server软件的自动部署、管理是必备的能力,要能够写脚本完成rpm包自动安装,指定可以运行rpm安装的用户)、安装、查询、升级、卸载、校验、数据库管理(重建)。

 

软件包依赖关系:x-àyàz,

 

YellowDog(是红帽的2次发行版,YUMYellowdogUpdate Manager,后来红帽将yum机制引入红帽)

 

Rpm(软件包管理器)--àyumrpm的前端工具,是基于rpm***前不久YUM的作者挂了,车祸

 

编译安装的特点:可以自定义安装软件的哪些功能,但只能手动安装卸载,为了卸载方便,将其安装在特定的路径下(卸载的时候一并删除即可),为了使用方便,修改(1)命令搜索路径PATH 2)库文件搜索路径,(除标准库文件以外其他库文件的搜索路径定义在:如下位置)修改配置文件/etc/ld.so.conf/etc/ld.so.conf.d/*.conf(可以自己新建一个配置文件,填入搜索路径3)帮助手册搜索路径:修改配置文件 /etc/man.config加入程序帮助文件所在的路径 man  -M  /path/to/manfile/  程序名(指定程序的man页所在的目录)

4)头文件:linux下默认路径为/usr/include/,自己编译的话,头文件不一定放在/usr/include下,可以通过导出、链接的方式来引用头文件。--à头文件功能:定义库函数的调用方式,以及接受的参数格式等等。

 

 

Linux下软件安装方式总结:

1)  通用二进制格式:直接打开即可使用。

2)  软件包管理器,例如rpmdpt

3)  软件包管理器前端工具,例如yumapt-get

4)  源代码编译:在x86_64上编译,不能在PowerPC上运行,x86_64可以运行32位程序,反之不行;一样的:64bitOS上可以运行32bit程序,反之不行。要点:1)底层cpu架构(2OS版本(3os32位或64位的(4)选择与之匹配的程序包来运行。

概念:例如javapython程序在多平台上都可以编译运行,因为java程序通过jvm来运行,而jvm是有对应cpu架构、os版本的特定版本的,python也有自己的虚拟机,这种情况下运行的程序,运行速度比较慢(中间隔了一个解释器来解释自己的语言,不像2进制程序直接就可以通过cpu芯片的汇编语言来运行)。

 

源代码程序包(tarball)的命名方式(name-version.tar.{gz|bz2|xz}

版本号一般为格式(major.minor.release(版本的主要改动看changelog)

 

Rpm包命名:name-version-release.arch.rpm

Release号:rpm包作者第几次制作的编号;arch为适合安装的cpu平台架构;可能还包含所适用的操作系统例如:el6_2

Arch:主机平台,i386,i686,x86_64,amd64;***注:在红帽系统上显示为x86_64,debian上可能显示为amd64*noarch包:不依赖于平台的rpm

 

 

Rpm分包:将某些功能独立封装成包,需要则安装,否则就不装(例:有时只需装服务器或客户端2者之一)。例如:主包为:核心包     bind  ;;;;分包:支包bind-devel;bind-chroot

Rpm分包特点:分支包一般会依赖于主包(核心包)。

 

Epel:为rhel平台提供的扩展rpm包,此项目目前有fedora来维护,GoogleFedora epel

http://mirrors.163.com/,可以找一下国内镜像站,比较快

因此我们以后如果要安装除安装盘中包含的其他rpm包时找GoogleFedora epel,centos也是一样。要找与我们os平台,硬件平台所匹配的,不要使用来路不明的包(1)首先光盘上的包(2EPEL

 

搜索rpm包的网站(如果光盘以及epel中都没有这个rpm包):http://rpmfind.net

                                                                                                                                   http://rpm.pbone.net

或者直接google

 

 

 

Rpm包的验证机制:验证rpm包来源的合法性,软件包的完整性。

验证机制原理讲解如下:

GPG非对称加密算法实现,GPGPGP技术规范的一种实现。

非对称加密:用加密算法生出一对公钥和私钥;使用公钥加密的数据只能用与之配对的私钥解密,反之亦然。由于其加密速度太慢,一般用于做数字签名,我们要了解的是,这个rpm包的确是我们认为的作者制作的。

 

*加密过程--à数字签名:用单向加密算法计算出rpm包特性码,然后用rpm包作者的私钥加密这个特性码,并将得到的加密数据附加到此rpm包后面。

 

*验证过程---à用公钥解密rpm包附带的加密数据,如果可以就说明的确是作者本人加密的,因为只有作者有私钥(完成验证rpm包合法性)。  这样就得到了解密后的特性码,然后,使用同样的加密算法单向计算出rpm包的特性码,然后比较2个特性码是否相同,如果相同,就说明rpm包的完整性没有问题。(验证rpm包完整性完成)

 

原理部分:记忆起来太麻烦了,运维工程师没必要知道的这么详细,这次记住了这些原理,以后也会忘记,主要学习怎么验证软件包就可以了。个人看法

验证过程:

1)  从网上下载软件包

2)  通过ssl访问软件包项目官网找到公钥,解密数据(rpm附带的),解密成功后得到特性码。

3)  用同样的算法单向加密自己下载的rpm包,得出特性码,对比两个特性码是否为一致。

Redhat系列OS官方公钥:/etc/pki/rpm-gpg/R….

验证光盘上的包(1)#rpm  --import  /etc/pki/rpm-gpg/R…

                                     (2)#rpm  –K zsh..rpm

验证选项语法#rpm -K--checksig)另外(--nodigest不检测完整性—nosignature不检测合法性,马哥建议:最好都检查,用-K来查)  rpm包名

**官方公钥一般安装光盘上也有。

 

 

Rpm包的安装(语法格式如下)

Rpm -I  /path/to/rpmfile

-i|--install          (安装)

-v|-vv|-vvv (详细模式,v越多,显示的信息越详细)

-h                        (#显示安装进度,一个#代表2%的进度)

常用的安装组合选项  -ivh

 

*)如果安装时遇到报错:“error:Faileddependencies”可以几个包一起安装,

--nodeps            忽略依赖关系

--test                  测试安装

--replacepkgs   重新安装

 

Rpm包的卸载

Rpm -e  rpm包名(如果因为依赖关系无法卸载,可以几个包一起卸载)

--nodeps            忽略依赖关系

--test                  测试卸载

*)warning:/…/…/XXX  saved as  /…./…./xxx.rpmsave  (保存相关配置文件为xxx.rpmsave,安装卸载时都有可能出现这种警告)

 

Rpm包的查询

Rpm -q  rpm包名(这个包名不包含这些内容-version-release.arch.rpm)

查询所有已安装的包:rpm  -qa  包名 或者 rpm  -qa |grep  包名

查询rpm包的摘要信息:rpm –qi  包名(这些信息由rpm包的制作者提供)

查询rpm包生成的文件:rpm –ql  包名

查询rpm包生成的配置文件:rpm –qc  包名

查询rpm包生成的帮助文件:rpm –qd  包名

查看软件包安装卸载时执行的脚本:rpm  -q --scripts  包名(*脚本格式有4段:preinstall:安装前脚本;Postinstall:安装后脚本;preuninstall:卸载前脚本;postuninstall:卸载后脚本)

查询尚未安装的软件包的信息:

Rpm -qpi  /path/to/rpmfile(查询摘要信息)

Rpm -qpl  /path/to/rpmfile(查询安装后生成的文件列表)

Rpm  -qpd /path/to/rpmfile(查询安装后生成的帮助文件列表)

Rpm  -qpc /path/to/rpmfile(查询安装后生成的配置文件列表)

rpm   --scripts 包名(查看软件包安装卸载时会执行的脚本)

 

查询某文件是由哪个rpm包生成的:

Rpm  -qf  /path/to/somefile  扩展选项 –qfi |-qfl

例如:Rpm  -qf  /etc/passwd; Rpm  -qf  /etc/inittab

 

 

 

Rpm包的升级:

-U:升级或安装(已安装则升级,未安装则安装)

-Uvh

-F:只升级,如果未安装老版本的包则不会升级。

-Fvh

--force:如果有依赖性冲突(例如X程序需要老版软件的库文件),则强行升级。

--nodeps:不关心依赖关系,升级。

***内核不应该被升级,应尽可能安装,内核应该允许多版本并存,如果升级后与现有环境不兼容无法退回老内核版本!!!

 

 

 

Rpm包校验(检验是否rpm包安装时生成的文件在安装后有没有被改动):

Rpm -V  包名(没有任何输出说明没有被改动过,尝试修改一下软件包生成的文件再校验一下,S表示大小变了,T表示时间戳变了,5表示md5校验和变了,U属组变了,G属主变了,有需要的话可以man  rpm查一下具体的显示值对应的具体的含义)

 

 

 

Rpm包的数据库(redhat下的大多数程序的数据库都在/var/lib/下)文件,如果数据库损坏,rpm查询将无法进行,需要重建rpm数据库。   #ls  -lh  /var/lib/rpm

*)重建rpm数据库(2中方式,其中第一种方式用的比较多): 1 #rpm  --rebuilddb   (会覆盖原有数据库内容,遍历当前系统安装的每个rpm包,抽出其信息,生成数据库,时间较长)

2#rpm  --initdb (不会覆盖原有数据库内容)

 

***1)rpm可依次安装多个包(2)在生产环境安装需要校验rpm包的来源合法性以及完整性,导入公钥后,在安装时可自动完成校验。

 

 

源码格式的rpm包介绍(后缀名.src.rpm

打包:rpm包的制作过程是根据spec文件来完成的,在镜像站上这种包所放置的的目录一般是/SRPMS/

目的:可以在用户自己的特定平台上编译安装,可以提高安装后程序的执行性能,以及可以跨平台安装。

 


本文出自 “就让我更饿一点” 博客,请务必保留此出处http://ufirst.blog.51cto.com/7628670/1432600