在使用Linux操作系統的過程中,我們需要的一些服務(例如Nginx)並沒有提供,需要用戶自行安裝相應的程序包,才能使用相應的服務。本文以CentOS6.6爲例,分三小節爲讀者朋友們儘可能詳細的講解rpm、yum以及程序包的編譯安裝三種程序包的管理方法。
rpm
rpm包管理工具是Red Hat公司貢獻的一款rpm程序包管理器,在RHEL、CentOS、Fedora、SUSE等主流發行版本中,被廣泛使用。
rpm包管理工具可用於安裝,升級,卸載,重新安裝程序;也可以用於查詢當前系統上安裝了哪些程序,安裝程序生成了哪些文件,或者查詢一個文件是由哪個程序安裝後生成的;也可以校驗包的來源完整性和合法性。
在講解rpm使用之前,先了解一下rpm包。rpm包的命名方式:rpm包名-主版本號-次版本號-發行號-rpm包自己的發行號(注:與源代碼的發行號無關)-平臺類型.rpm。如:bash的rpm包名:bash-4.1.2-29.el6.x86_64。每個rpm包當中都有一份程序的組成清單,其中包含了安裝、卸載時的腳本,公共數據庫指向路徑,以及安裝之後該程序會生成的文件的清單。讀者朋友們可以想想一下Windows下的安裝程序,例如QQ,它在自動安裝的過程中,也是運行其中的腳本文件進行安裝,在註冊表中註冊(類似於Linux下的公共數據庫)生成相應的文件在Windows系統中。rpm管理工具正是將包裏的文件抽取出來安裝,安裝過程中,會檢查安裝的程序包的是否依賴於其他包,其他包是否已安裝在系統中,反饋相應的信息給用戶,例如,若安裝的包依賴於其他包,會告訴用戶安裝該包要先安裝那些包等(其實,在Windows下安裝程序時也會出現這樣的提示信息,安裝英雄聯盟的時候,如果沒安裝Directx的話,會提示用戶安裝該軟件包)。
rpm包的安裝
要安裝rpm包,首先得先下載rpm包,巧婦難爲無米之炊嘛!通常獲取rpm的途徑有以下幾種:①優先選擇系統發行光盤或者官方鏡像站點;②程序項目的官方站點;③可靠的第三方組織:例如Fedora的EPEL社區:http://fedoraproject.org/wiki/EPEL/zh-cn;④良心rpm包專享搜索引擎:http://rpmfind.net 、http://rpm.pbone.net、http://pkgsorg。
安裝命令:rpm -ivh 程序包名(注意路徑)
例如,安裝Nginx程序包rpm -ivh nginx-1.4.7-1.el6.ngx.x86_64.rpm。
常用安裝選項:
--nodeps 忽略程序包的依賴關係。注:強烈不建議使用該選項。
--replacepkgs 替換原來的包重新安裝,即重裝該程序。例如,我們將Nginx程序重新安裝:rpm -ivh nginx-1.4.7-1.el6.ngx.x86_64.rpm --replacepkgs
--test 僅作測試性安裝而非真正安裝,常用於檢查包之間的依賴性關係
--prefix NEWPATH 將程序安裝在自定義的路徑下,前提是該包支持用戶自定義安裝路徑。
升級命令:rpm -Uvh 程序包名(注意路徑):如果有舊版本的程序包,則升級安裝,否則執行安裝操作
rpm -Fvh 程序包名(注意路徑):如果有舊版本的程序包,則升級安裝;否則不執行任何操作。
例如,將nginx從1.4.7-1升級到1.6.1-1:rpm -Uvh nginx-1.6.1-1.el6.ngx.x86_64.rpm
常用的升級選項:
--force:強制升級忽略衝突過程
--oldpackage:降級安裝,即用舊版本的程序替代現有程序。例如:我們將現在1.4.7-1版本的nginx降級爲1.0.8-2版本。從nginx官網:http://nginx.org/packages/centos/6/x86_64/RPMS/下載相應的版面,執行命令:rpm -Uvh nginx-1.0.8-2.el6.ngx.x86_64.rpm --oldpackages
--test測試升級過程
注:不要對內核包執行升級操作,Linux本身支持多版本的內核並存,因此,對新版本的內核包可以直接安裝;如果原程序包的配置文件安裝後被改動過,升級時,新版本的文件並不會直接覆蓋老版本的文件而是把新版本的文件重命名(加後綴.rpmnew)保留。
卸載命令:rpm -e 程序名(注:不是程序包名)
例如,卸載nginx:rpm -e nginx
常用選項:
--nodeps 忽略依賴關係執行卸載
--test 卸載測試
注:如果包的配置文件安裝後曾被改動過,卸載時,此配置文件不會被刪除而是被重命名(加後綴.rpmsave)保留。
查詢類命令
查詢是依賴於rpm的公共數據庫,數據庫當中包含了當前系統上安裝的所有的程序名及版本、程序包間的依賴關係、程序包的功能說明、安裝生成的各文件路徑以及校驗碼信息。數據庫是系統在不確定時間自動生成的,但千萬不要忽視了這個公共數據庫,生產環境中,rpm不能查詢和安裝大多跟這個數據庫有關,這個時候就需要我們手動初始化數據庫。有關公共數據庫的兩個常用命令:
初始化數據庫:rpm --initdb 如果事先不存在數據,則會新之;否則,不執行任何操作
重新構建數據庫:rpm --rebuilddb 無論當前是否已經存在數據庫,都會直接重建並覆蓋現有數據庫
查詢某程序是否已經安裝:rpm -qa 程序名
查詢某文件是由哪個包安裝後生成的:rpm -qf /path/to/somefile
查詢尚未安裝的程序包安裝之後會生成哪些文件:rpm -qpl PACKAGE_FILE.rpm
查詢某程序的摘要信息 rpm -qi 程序名
查詢某程序生成的文件列表:rpm -q 程序名
查詢某程序生成的配置文件列表:rpm -qc 程序名
[root@localhost ~]# rpm -qc bind /etc/logrotate.d/named /etc/named.conf /etc/named.iscdlv.key /etc/named.rfc1912.zones /etc/named.root.key /etc/rndc.conf /etc/rndc.key /etc/sysconfig/named /var/named/named.ca /var/named/named.empty /var/named/named.localhost /var/named/named.loopback
生產環境中常用的rpm命令大致就這麼多,想要了解更多rpm的命令說明,詳見man手冊。
寫在最後:使用rpm安裝程序是無法自動解決依賴關係的,而另一款rpm包管理器yum幫用戶解決了這一問題。