漫漫運維路——基於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實現軟件包的基本管理已基本敘述完畢,寫得十分倉促,若有不當之處請讀者明示。


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