漫漫运维路——基于CentOS6平台软件包管理1

    对于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并显示其安装过程和进度     

[root@test Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]
[root@test Packages]#

                --test:测试安装,即只是测试其是否能安装成功,而不真正地把软件包安装上

例2:测试安装tree-1.5.3-2.el6.x86_64.rpm

[root@test 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  

[root@test 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
#常规安装会在检查后报错,提示有依赖关系,此时就不能正常安装
[root@test 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 

[root@test 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(后面会补充) 

[root@dsl-189-172-5-105-dyn tmp]# rpm -q tree
tree-1.5.0-4.x86_64

        使用新版本包升级

[root@dsl-189-172-5-105-dyn Packages]# rpm -U tree-1.5.3-2.el6.x86_64.rpm 
[root@dsl-189-172-5-105-dyn 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  

[root@dsl-189-172-5-105-dyn Packages]# rpm -e zsh
[root@dsl-189-172-5-105-dyn Packages]#

    查询

    rpm {-q|--query} [select-options] [query-options]

        [select-options]   

            1.查询某包或某些包是否安装

rpm -a PACKAGE_NAME

例7:查询当前系统上是否已经安装了vsftpd软件包

[root@dsl-189-172-5-105-dyn 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文件是由哪个包安装生成的。

[root@dsl-189-172-5-105-dyn 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包的简要说明信息

[root@dsl-189-172-5-105-dyn 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安装所生产的文件列表

[root@dsl-189-172-5-105-dyn 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

[root@dsl-189-172-5-105-dyn 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软件包是否发生了改变

[root@dsl-189-172-5-105-dyn 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是否完整

[root@dsl-189-172-5-105-dyn 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实现软件包的基本管理已基本叙述完毕,写得十分仓促,若有不当之处请读者明示。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章