一、什麼是RPM RPM:RedHat Package Manager //紅帽包管理 如果 Linux 發行版本是 redhat 、 redflag 、 centos 、 fedora 、 suse 等或者衍生的版本, 那麼使用 rpm 進行軟體管理最適合了.通過 rpm 可以來對軟體進行安裝、升級、查詢、 驗證及卸載等.被 rpm 管理的軟體包稱之為「 rpm 包」,對於該軟體包的文件名包含了 很多有用信息,通常包含了軟體包的名稱、版本信息、操作系統信息、適應的硬體架構 等等,比如:httpd-2.2.3-22.el5.i386.rpm 2.2.3 是軟體的版本號,22是發行號,i386表示用於 英特爾 x86 平台 二、安裝 RPM 包 安裝 RPM 軟體包 rpm 命令使用 -i (表示安裝) -v (顯示安裝過程) -h (使用 # 顯示進度條)組合一起使用 比如說安裝httpd-2.2.3-22.el5.i386.rpm該文件包: [root@51cto Server]# rpm -ivh httpd-2.2.3-22.el5.i386.rpm warning: httpd-2.2.3-22.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 Preparing... ########################################### [100%] 1:httpd ########################################### [100%] // 可以看到該軟體包安裝成功,並且使用 # 顯示安裝過程 --force 選項與強制安裝 當安裝軟體包的時候,系統提示軟體包已經安裝,無法安裝同版本軟體的時候,有 2 種 解決辦法:一是先卸載軟體包,然後重新安裝;而是使用 --force 選項強制安裝.如果 某個已經安裝的軟體出現文件丟失或者損壞的情況,使用 --force 安裝最好不過了. 現在依舊採用上面的方法重新安裝一遍httpd-2.2.3-22.el5.i386.rpm [root@51cto Server]# rpm -ivh httpd-2.2.3-22.el5.i386.rpm warning: httpd-2.2.3-22.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 Preparing... ########################################### [100%] package httpd-2.2.3-22.el5.i386 is already installed // 系統提示說該軟體包已經安裝了 下面採用 --force 選項的方法強制安裝: [root@51cto Server]# rpm -ivh httpd-2.2.3-22.el5.i386.rpm --force warning: httpd-2.2.3-22.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 Preparing... ########################################### [100%] 1:httpd ########################################### [100%] --nodeps 選項與依賴性 上面的方法使用 --force 可以強制覆蓋安裝,但是當軟體包出現依賴關係的時候, --force 也解決不 了問題. rpm 最大的不足就是包之間的依賴關係,比如要安裝 A 包,提示說要先安裝 B 包,找到 B 包安裝又提示要先安裝其他包.所以當實在無法解決依賴性的問題又必須安裝軟體包的時候, 可以使用 --nodeps 加以解決,比如安裝devhelp-devel-0.12-20.el5.i386.rpm [root@51cto Server]# rpm -ivh devhelp-devel-0.12-20.el5.i386.rpm warning: devhelp-devel-0.12-20.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 error: Failed dependencies: devhelp = 0.12 is needed by devhelp-devel-0.12-20.el5.i386 gnome-vfs2-devel >= 2.2.0 is needed by devhelp-devel-0.12-20.el5.i386 gtk2-devel >= 2.2.0 is needed by devhelp-devel-0.12-20.el5.i386 libdevhelp-1.so.0 is needed by devhelp-devel-0.12-20.el5.i386 libgnomeui-devel >= 2.2.0 is needed by devhelp-devel-0.12-20.el5.i386 libwnck-devel >= 2.10.0 is needed by devhelp-devel-0.12-20.el5.i386 // 發現依賴包這麼多,使用 --nodeps 忽略依賴包直接安裝 [root@51cto Server]# rpm -ivh devhelp-devel-0.12-20.el5.i386.rpm --nodeps warning: devhelp-devel-0.12-20.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 Preparing... ########################################### [100%] 1:devhelp-devel ########################################### [100%] // 安裝好了,當實際上該軟體包的依賴沒解決是無法正常使用的,所以最好把依賴關係解決 批量安裝或升級軟體包 使用通配符 * 就可以進行批量的安裝軟體包,如安裝telnet開頭的軟體包 [root@51cto Server]# rpm -ivh telnet-* --force warning: telnet-0.17-39.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186 Preparing... ########################################### [100%] 1:telnet-server ########################################### [ 50%] 2:telnet ########################################### [100%] 對於升級軟體包則使用 -U 選項,表示有比已安裝的軟體包更高版本就升級安裝,如果系統本 沒有這些軟體包則安裝之,若版本相同則不做處理 三、查詢 rpm 軟體包 rpm -qa 命令用於查詢系統中已安裝的軟體包 [root@51cto Server]# rpm -qa //這麼查詢列出的軟體包很多 如果要具體查詢某個軟體包可以使用 grep ,比如查詢是否安裝了 LinuxQQ : [root@51cto Server]# rpm -qa |grep linuxqq linuxqq-v1.0.2-beta1 //可以看到已經安裝了測試版 QQ 查詢軟體的相關信息,使用 -i 選項 [root@51cto Server]# rpm -qi linuxqq Name : linuxqq Relocations: (not relocatable) Version : v1.0.2 Vendor: Tencent Inc. Release : beta1 Build Date: 2009年01月05日 星期一 01時31分44秒 Install Date: 2010年09月29日 星期三 05時16分12秒 Build Host: localhost.localdomain Group : Internet Source RPM: linuxqq-v1.0.2-beta1.src.rpm Size : 6346491 License: Commercial Signature : (none) Packager : @Home Summary : QQ for Linux v1.0.2 Beta1 Description : QQ - The most popular free instant messaging program in China. * Chat with more than 590,000,000 people all over the world. * Free to download or distribute absolutely. 查詢軟體文件的安裝位置,使用 -l 選項 [root@51cto Server]# rpm -ql linuxqq /usr /usr/bin /usr/bin/qq /usr/share /usr/share/applications /usr/share/applications/qq.desktop /usr/share/tencent /usr/share/tencent/qq /usr/share/tencent/qq/qq /usr/share/tencent/qq/qq.png /usr/share/tencent/qq/res.db 查詢文件歸屬,使用 -f 選項 在 rpm -qf 後面跟要查詢的文件名,可以查詢該文件屬於哪個軟體包.所以當某個文件丟失 或者損壞的時候.就可以查詢所屬軟體包,然後重新安裝,即可恢復. [root@51cto Server]# rpm -qf /usr/share/tencent //假如此文件損壞了 linuxqq-v1.0.2-beta1 //可以查詢出所屬的軟體包是 Linuxqq 四、驗證 rpm 軟體包的完整性 rpm 命令可以使用 -V 選項對系統中已經安裝的軟體包進行驗證,比如系統發生安全故障,對 軟體包進行驗證是必不可少的事情,比如: [root@51cto ~]# mv /usr/share/tencent/qq/qq /usr/share/tencent/qq/qq.backup //把/usr/share/tencent/qq/qq重命名成備份文件 [root@51cto ~]# rpm -V linuxqq //查詢該文件包完整性 missing /usr/share/tencent/qq/qq //顯示丟失了/usr/share/tencent/qq/qq [root@51cto ~]# mv /usr/share/tencent/qq/qq.backup /usr/share/tencent/qq/qq // 恢復 [root@51cto ~]# rpm -V linuxqq //查詢該文件包完整性,無顯示丟失文件 五、卸載軟體包 使用 -e 選項來卸載軟體包, rpm -e 軟體名 (軟體名可以包含版本信息,但不可以有 rpm 後綴) [root@51cto ~]# rpm -e linuxqq [root@51cto ~]# rpm -ql linuxqq package linuxqq is not installed //卸載 Linuxqq 成功 如果卸載軟體包的時候遇到依賴關係的時候也可以使用 --nodeps 忽略依賴關係卸載 (如果使用 GNOME/KDE 環境,這就不做介紹了) 六、管理 rpm 源碼包 對於一些軟體包是以 .src.rpm 為擴展名的,這類軟體包就是包含了源代碼的 rpm 包,在安裝 的時候需要進行編譯,步驟如下: 執行 rpm -i 51cto.src.rpm (假設軟體包名為 51cto ) cd /usr/src/redhat/SPECS/ //切換到該目錄 rpmbuild -bb 51cto.specs 或者 rpmbuild -bp 51cto.specs 如果是如上的第一條命令,在 /usr/src/redhat/RPMS/noarch/ 目錄下生成一個新的 rpm 包, 直接使用 rpm -ivh xx.rpm 進行安裝搞定;(推薦這種) 如果是如上的第二條命令,在 /usr/src/redhat/BUILD/software/ 目錄下生成此軟體包 的源碼包,可能通過腳本安裝或編譯源代碼安裝,具體不做說明 備註:對於 yum 安裝軟體包和通過源代碼安裝軟體包的內容放在進階二說明 本文出自 「twenty_four」 博客,請務必保留此出處http://twentyfour.blog.51cto.com/945260/400263
[火星人
]
RHCE033--RPM包及其管理 已經有480 次圍觀
本文地址: http://coctec.com/docs/linux/show-post-49490.html