对于Linux运维人员来说,软件包管理无疑是一份非常重要的日常工作,只有轻车熟路的管理好软件包,日常运维工作才能得以进行。在基于CentOS6或者红帽6的平台上,熟练运用RPM和yum来进行服务器软件包管理,有着重要的意义。
利用rpm包管理器管理软件
什么是rpm?
rpm是红帽自主研发的一款软件包管理器,早起的rpm被称为Red hat package Manager,而后成为了Linux界软件包管理器的标准,所以现在的rpm是由RPM Package Manager的递归缩写,现在不止是在红帽系列系统上使用,还可以在其他发行版的Linux系统上使用,如Open SUSE。
rpm使用方式
软件包管理就是对软件包进行安装、卸载、升级、查询等,这些都可以使用rpm来完成,以下将对使用rpm进行软件包安装的常用方式做说明。
安装
rpm -i|--install [install-options] PACKAGES_FILE1...
[install-options]
-v|-vv|-vvv:详细显示安装过程,v越多其越详细
-h:以#方式显示安装进度,一个#代表安装已完成2%
例1:安装zsh-4.3.10-7.el6.x86_64.rpm并显示其安装过程和进度
[[email protected] Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm Preparing... ########################################### [100%] 1:zsh ########################################### [100%] [[email protected] Packages]#
--test:测试安装,即只是测试其是否能安装成功,而不真正地把软件包安装上
例2:测试安装tree-1.5.3-2.el6.x86_64.rpm
[[email protected] Packages]# rpm --test -ivh tree-1.5.3-2.el6.x86_64.rpm Preparing... ########################################### [100%] #只执行完Preparing,而不真正执行安装过程
--nodeps:安装时忽略依赖关系
例3:安装tomcat6-6.0.24-80.el6.x86_64.rpm
[[email protected] Packages]# rpm -ivh tomcat6-6.0.24-80.el6.x86_64.rpm error: Failed dependencies: /lib/lsb/init-functions is needed by tomcat6-0:6.0.24-80.el6.x86_64 jakarta-commons-collections is needed by tomcat6-0:6.0.24-80.el6.x86_64 jakarta-commons-daemon is needed by tomcat6-0:6.0.24-80.el6.x86_64 jakarta-commons-dbcp is needed by tomcat6-0:6.0.24-80.el6.x86_64 jakarta-commons-logging is needed by tomcat6-0:6.0.24-80.el6.x86_64 jakarta-commons-pool is needed by tomcat6-0:6.0.24-80.el6.x86_64 java is needed by tomcat6-0:6.0.24-80.el6.x86_64 jpackage-utils is needed by tomcat6-0:6.0.24-80.el6.x86_64 log4j is needed by tomcat6-0:6.0.24-80.el6.x86_64 mx4j is needed by tomcat6-0:6.0.24-80.el6.x86_64 tomcat6-lib = 0:6.0.24-80.el6 is needed by tomcat6-0:6.0.24-80.el6.x86_64 #常规安装会在检查后报错,提示有依赖关系,此时就不能正常安装
[[email protected] Packages]# rpm -ivh --nodeps tomcat6-6.0.24-80.el6.x86_64.rpm Preparing... ########################################### [100%] 1:tomcat6 ########################################### [100%] #使用--nodeps忽略其依赖关系
--replacepkgs:重新安装(覆盖原有文件安装)
例4:覆盖安装当前已经安装过的tree-1.5.3-2.el6.x86_64.rpm
[[email protected] Packages]# rpm -ivh --replacepkgs tree-1.5.3-2.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:tree ########################################### [100%]
以下选项不是经常用,不举例介绍
--force:强制安装(升级程序包时包之间有冲突,可强制使用此选项安装,)
--oldpackage:降级安装,即所要安装的包比当前系统上已安装的版本古老
--relocate:重新把包安装的路径
--replacefiles:安装时替换部分文件
--feplacepkgs:安装时替换相关的包
升级
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
升级或安装
rpm {-F|--freshen} [install-options] PACKAGE_FILE
只是升级,若没安装则不去安装
例5:升级或安装tree包
查看当前系统上所安装的tree(后面会补充)
[[email protected] tmp]# rpm -q tree tree-1.5.0-4.x86_64
使用新版本包升级
[[email protected] Packages]# rpm -U tree-1.5.3-2.el6.x86_64.rpm [[email protected] Packages]# rpm -q tree tree-1.5.3-2.el6.x86_64
卸载
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME
--allmatches:如果程序包同时安装多个版本,则此选项一次全部卸载之
--nodeps:卸载时如果存在依赖关系,则忽略依赖关系
--noscripts:卸载时不执行脚本
例6:卸载当前系统上所安zsh
[[email protected] Packages]# rpm -e zsh [[email protected] Packages]#
查询
rpm {-q|--query} [select-options] [query-options]
[select-options]
1.查询某包或某些包是否安装
rpm -a PACKAGE_NAME
例7:查询当前系统上是否已经安装了vsftpd软件包
[[email protected] Packages]# rpm -q vsftpd vsftpd-2.2.2-13.el6_6.1.x86_64
2.查询已经安装的所有包
rpm -qa
3.查询某文件是由哪个包安装生成
rpm -qf /PATH/TO/SOMEFILE
例8:查询/etc/smaba/smb.conf文件是由哪个包安装生成的。
[[email protected] Packages]# rpm -qf /etc/samba/smb.conf samba-common-3.6.23-12.el6.x86_64
4.查询尚未安装的包文件的相关信息
rpm -qp+[query-options] PACKAGE_FILE
[query-options]:
1.查询某包的简要说明信息
rpm -qi PACKAGE_NAME
例9:查询iptables包的简要说明信息
[[email protected] Packages]# rpm -qi iptables Name : iptables Relocations: (not relocatable) Version : 1.4.7 Vendor: CentOS Release : 14.el6 Build Date: Wed 15 Oct 2014 07:30:07 AM PDT Install Date: Mon 23 Mar 2015 07:33:52 AM PDT Build Host: c6b8.bsys.dev.centos.org Group : System Environment/Base Source RPM: iptables-1.4.7-14.el6.src.rpm Size : 855952 License: GPLv2 Signature : RSA/SHA1, Fri 17 Oct 2014 01:03:00 PM PDT, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.netfilter.org/ Summary : Tools for managing Linux kernel packet filtering capabilities Description : The iptables utility controls the network packet filtering code in the Linux kernel. If you need to set up firewalls and/or IP masquerading, you should install this package.
2.查询某包安装生成的文件列表
rpm -ql PACKAGE_NAME
例10:查询apache安装所生产的文件列表
[[email protected] Packages]# rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/welcome.conf . . .
3.查询某包安装后生成的所有配置文件
rpm -qc PACKAGE_NAME
4.查询某包安装后生成的所有文档
rpm -qd PACKAGE_NAME
5.查看某包制作时随版本变化的changelog信息
rpm -q --changelog PACKAGE_NAME
6.查询某包提供的capabilities(即安装后可以为其他软件提供的依赖文件等)
rpm -q --provides PACKAGE_NAME
例11:查询xinetd包的capabilities
[[email protected] Packages]# rpm -q -provides xinetd inetd xinetd = 2:2.3.14-10.el5
7.查询某包所依赖的capablities
rpm -q --requires PACKAGE_NAME
8.查询某包安装或卸载时执行的脚本
rpm -q --scripts PACKAGE_NAME
校验
rpm {-V|--verify} [select-options] [verify-options]
rpm -V PACKAGENAME:查询包安装生成后是否发生了改变,在返回结果中若出现以下字符则说明相应内容被更改
c %config configuration file.(配置文件是否发生改变)
d %doc documentation file.(文档是否发生改变)
g %ghost file (站位文件,文件内容部包含在软件包有效内容里)
l %license license file.(许可证文件)
r %readme readme file.(说明文件)
内容被更改的判断依据
S size 大小不一致
M mode 权限和类型不一致
5 md5 md5校验和不一致
D device 主/次设备号不一致
L readLink 路径不匹配
U user 属主不一致
G group 属组不一致
T mtime 修改时间不一致
P 功能不一致
注:上面判断依据的英文有一部分是我方便记忆使用的,并不全是其真的如此翻译。
例12:查询vsftpd软件包是否发生了改变
[[email protected] Packages]# rpm -V vsftpd SM5....T. c /etc/vsftpd/vsftpd.conf #从以上返回文件可知vsftpd软件包在安装后配置文件(/etc/vsftpd/vsftpd.conf)发生了改变(当然我做了配置),大小、权限、md5校验和、时间戳都发生了改变
程序包的合法性验证
来源合法
由信任的制作者提供
依赖于:作者的数字签名;签名是作者使用自己的私钥加密程序包的特征性码进行的
内容合法
完整性校验成功,未被二次修改
依赖于:制作者提供的程序特征码
验证方式:安装着用同样的特征码提取算法提取程序包的特征码,并与原作者提供的相比较
验证其光盘中程序包的来源和法性
rpm --input /path/to/RPM-GPG-KEY-CentOS-6
验证:rpm {-K|--checksig} PACKAGE_FILE
--nosignature:不检查来源合法性
--nodigest: 不检查完整性
例13:校验vsftpd-2.2.2-12.e16——5.1.x86_64.rpm是否完整
[[email protected] Packages]# rpm -K --nosignature vsftpd-2.2.2-12.el6_5.1.x86_64.rpm vsftpd-2.2.2-12.el6_5.1.x86_64.rpm: sha1 md5 OK
到此,使用rpm实现软件包的基本管理已基本叙述完毕,写得十分仓促,若有不当之处请读者明示。