概括:
rpm/yum redhat
dpkg/apt debian
alien 轉換
在 GNU/Linux( 以下簡稱 Linux) 作業系統中,RPM 和 DPKG 為最常見的兩類軟體包管理工具,他們分别應用于基于 RPM 軟體包的 Linux 發行版本和 DEB 軟體包的 Linux 發行版本。軟體包管理工具的作用是提供在作業系統中安裝,更新,解除安裝需要的軟體的方法,并提供對系統中所有軟體狀态資訊的查詢。
RPM 全稱為 Redhat Package Manager,最早由 Red Hat 公司制定實施,随後被 GNU 開源作業系統接受并成為很多 Linux 系統 (RHEL) 的既定軟體标準。與 RPM 進行競争的是基于 Debian 作業系統 (UBUNTU) 的 DEB 軟體包管理工具- DPKG,全稱為 Debian Package,功能方面與 RPM 相似。二者之具體比較不在本文範圍之内。
RPM 包的安裝 / 更新 / 查詢 / 解除安裝
一個 RPM 包包含了已壓縮的軟體檔案集以及該軟體的内容資訊(在頭檔案中儲存),通常表現為以 .rpm 擴充名結尾的檔案,例如 package.rpm 。對其操作,需要使用 rpm 指令。下面介紹 rpm 工具的參數和使用方法,并以 IBM Lotus Notes 在 RHEL 5.2 安裝為例做具體說明。
RPM 指令常用參數
RPM 的正常使用方法為 rpm -? package.rpm,其中 -? 為操作參數 ( 更多資訊,請查閱幫助 $man rpm):
-q 在系統中查詢軟體或查詢指定 rpm 包的内容資訊
-i 在系統中安裝軟體
-U 在系統中更新軟體
-e 在系統中解除安裝軟體
-h 用 #(hash) 符顯示 rpm 安裝過程
-v 詳述安裝過程
-p 表明對 RPM 包進行查詢,通常和其它參數同時使用,如:
-qlp 查詢某個 RPM 包中的所有檔案清單
-qip 查詢某個 RPM 包的内容資訊
RPM 指令參數使用方法
以上參數有些需要組合使用,比如說 rpm -h package.rpm 是沒有意義的,但 rpm -ih package.rpm 即表示安裝 package 并用 # 符顯示安裝進度。
安裝 RPM 包
# rpm -ivh package.rpm
更新 RPM 包指令
# rpm -Uvh package.rpm
解除安裝 RPM 包指令
# rpm -ev package
查詢 RPM 包中包含的檔案清單指令
# rpm -qlp package
查詢 RPM 包中包含的檔案清單指令
# rpm -qlp package
查詢 RPM 包中包含的内容資訊指令
# rpm -qip package
查詢系統中所有已安裝 RPM 包
# rpm -qa
RPM 包管理示例
以下步驟描述了一個普通使用者安裝 IBM Lotus Notes V85 ( 以下簡稱 Notes) 的典型操作過程。 Notes 的 RPM 包名為 ibm_lotus_notes-8.5.i586.rpm 。
首先查詢是否該軟體是否已經在系統中存在
# rpm -qa | grep ibm_lotus_notes
如果傳回資訊為空那麼說明該軟體還未被安裝。
查詢 Notes 軟體包内容:
# rpm -qip ibm_lotus_notes-8.5.i586.rpm
Name : ibm_lotus_notes Relocations: /opt/ibm/lotus/notes
Version : 8.5 Vendor: IBM
Release : 20081211.1925 Build Date: Sat 13 Dec 2008 09:38:55 AM CST
Install Date: (not installed) Build Host: dithers.notesdev.ibm.com
Group : Applications/Office
Source RPM: ibm_lotus_notes-8.5-20081211.1925.src.rpm
Size : 603779427 License: Commercial
Signature : DSA/SHA1, Sat 13 Dec 2008 09:43:02 AM CST, Key ID 314c8c6534f9ae75
Summary : IBM Lotus Notes
Description :
IBM Lotus Notes software provides a robust ...
安裝 Notes:
# rpm -ivh ibm_lotus_notes-8.5.i586.rpm
傳回資訊 :
Preparing... ########################################### [100%]
1:ibm_lotus_notes ########################################### [100%]
更新 Notes:
若今後需要基于該版本更新至更高版本的 Notes( 縫 .0 - ibm_lotus_notes-9.0.i586.rpm),則使用 -U 參數:
# rpm -Uvh ibm_lotus_notes-8.5.i586.rpm
在該步驟中如果使用 -i 則系統通常會封包件沖突錯誤,無法正常安裝。
解除安裝 Notes
注意解除安裝軟體使用軟體名稱,而不是封包件名:
# rpm -ev ibm_lotus_notes
DEB 包的安裝 / 更新 / 查詢 / 解除安裝
一個 DEB 包包含了已壓縮的軟體檔案集以及該軟體的内容資訊(在頭檔案中儲存),通常表現為以 .deb 擴充名結尾的檔案,例如 package.deb 。對其操作,需要使用 dpkg 指令。下面介紹 dpkg 工具的參數和使用方法,并以 IBM Lotus Notes 在 UBUNTU 904 安裝為例做具體說明。
DPKG 指令常用參數
DPKG 的正常使用方法為 dpkg -? Package(.rpm), 其中 -? 為安裝參數 ( 更多資訊,請查閱幫助 $man rpm):
-l 在系統中查詢軟體内容資訊
--info 在系統中查詢軟體或查詢指定 rpm 包的内容資訊
-i 在系統中安裝 / 更新軟體
-r 在系統中解除安裝軟體 , 不删除配置檔案
-P 在系統中解除安裝軟體以及其配置檔案
DPKG 指令參數使用方法
安裝 DEB 包指令
$ sudo dpkg -i package.deb
更新 DEB 包指令
$ sudo dpkg -i package.deb ( 和安裝指令相同)
解除安裝 DEB 包指令
$ sudo dpkg -r package.deb # 不解除安裝配置檔案
或
$ sudo dpkg -P package.deb # 解除安裝配置檔案
查詢 DEB 包中包含的檔案清單指令
$ sudo dpkg-deb -c package.deb
查詢 DEB 包中包含的内容資訊指令
$ dpkg --info package.deb
查詢系統中所有已安裝 DEB 包
$ dpkg -l package
DEB 包管理示例
以下步驟描述了一個普通使用者安裝 IBM Lotus Notes V85 ( 以下簡稱 Notes) 的典型操作過程。 Notes 的 DEB 包名為 ibm_lotus_notes-8.5.i586.deb.
首先查詢是否該軟體是否已經在系統中存在
$ dpkg -l ibm-lotus-*
如果系統中從未安裝過 Lotus 産品,那麼傳回資訊為 :
No pakcages found matching ibm-lotus-*
如果系統安裝過 Lotus 産品,但已被删除,那麼傳回資訊為 :
pn ibm-lotus-notes none (no description available)
查詢 Notes 軟體包内容:
$ dpkg --info ibm_lotus_notes-8.5-i586.deb
傳回資訊 :
new debian package, version 2.0.
size 335012296 bytes: control archive= 231821 bytes.
...
Package: ibm-lotus-notes
Version: 8.5-20081211.1925
Section: IBM
Priority: extra
Architecture: i386
Installed-Size: 619444
Maintainer: IBM Lotus Product
Description: IBM Lotus Notes
IBM Lotus Notes software provides a robust ... ...
安裝 Notes:
$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb
傳回資訊 :
(Reading database ... 151150 files and directories currently installed.)
Preparing to replace ibm-lotus-notes 8.5-20081211.1925
(using ibm-lotus-notes-higher-version.i586.deb) ...
Unpacking replacement ibm-lotus-notes ...
Setting up ibm-lotus-notes (higher-version) ...
更新 Notes:
$ sudo dpkg -i ibm_lotus_notes-8.5.i586.deb
傳回資訊 :
(Reading database ... 151150 files and directories currently installed.)
Preparing to replace ibm-lotus-notes 8.5-20081211.1925
(using ibm-lotus-notes-higher-version.i586.deb) ...
Unpacking replacement ibm-lotus-notes ...
Setting up ibm-lotus-notes (higher-version) ...
解除安裝 Notes
注意解除安裝軟體使用軟體名稱,而不是封包件名:
$ sudo dpkg -P ibm-lotus-notes
軟體包依賴性關系
由于開源的多态性,Linux 作業系統中的軟體之間的依賴性關系處理一直令使用者感到頭疼。如果 package_a 依賴于 package_b,那麼在一個沒有安裝 package_b 的系統中,package_a 是不被系統推薦安裝的,強制安裝很可能會導緻軟體無法正常工作。基于以上 package_a 和 package_b 的關系,在一個幹淨的系統中 ( 未安裝 package_a 或 package_b),欲安裝 package_a,錯誤通常會表現為:
RHEL 5.2
# rpm -ivh package_a.rpm
error: Failed dependencies:
pacakge_b = version info is needed by package_a
Ubuntu 904
$ sudo dpkg -i package_a.deb
dpkg: regarding package_a.deb containing package, pre-dependency problm:
package_a pre-depends on package_b (version info)
dpkg: error processing package_a.deb (--install):
pre-dependency problem - not installing package_a
Errors were encountered while processing:
package_a.deb
查詢軟體包依賴關系
查詢 RPM 包的依賴關系,使用 rpm -qRp:
# rpm -qRp package_a.rpm
package_b = version_info
或
package_b >= version_info
或
package_b <= version_info
表明 package_a.rpm 依賴于 version_info 版的 package_b,或者任何高于并包括 version_info 版的 package_b,亦或低于或包括 version_info 版的 package_b 。是以 package_b.rpm 必須在 package_a 之前安裝于系統中。
查詢 DEB 包的依賴關系,可解讀 dpkg --info 結果中的 Pre-Depends 字段:
$ dpkg --info package_a.deb
Pre-depends: package_b (= version_info)
Depends: package_b (= version_info)
或
Pre-depends: package_b (>= version_info)
Depends: package_b (>= version_info)
或
Pre-depends: package_b (<= version_info)
Depends: package_b (<= version_info)
表明 package_a.deb 依賴于 version_info 版的 package_b 或者任何高于并包括 version_info 版的 package_b 亦或低于或包括 version_info 版的 package_b. 是以 package_b.deb 必須在 package_a 之前安裝于系統中。
是以正确的安裝方法如下節所示。
安裝方法
對于 package_a,正确的安裝方法應該是:
##RPM
# rpm -ivh package_b.rpm
# rpm -ivh package_a.rpm
##DEB
$ sudo dpkg -i package_b.deb
$ sudo dpkg -i package_a.deb
嵌套的依賴關系
如上示例為最理想的依賴關系,實際應用中往往最令使用者頭疼的是 package_a 依賴于 package_b/c/d/e/f 等多個包 , 而 package_b/c/d/e/f 等包又依賴于 package_b1,b2,b3/c1,c2/d1,d2/e1,e2/f1,f2 等等 ... ... 為保證軟體的正常使用,必須找到所有依賴包以及子依賴包并且安裝。過多的依賴關系大大降低了 Linux 軟體安裝的使用者友好性。是以針對此類問題,使用了更進階的包管理政策去解決 - Yum/APT 。
更友好的包管理軟體 - YUM
YUM
YUM 基于 RPM 包管理工具,能夠從指定的源空間(伺服器,本地目錄等)自動下載下傳目标 RPM 包并且安裝,可以自動處理依賴性關系并進行下載下傳、安裝,無須繁瑣地手動下載下傳、安裝每一個需要的依賴包。此外,YUM 的另一個功能是進行系統中所有軟體的更新。如上所述,YUM 的 RPM 包來源于源空間,在 RHEL 中由 /etc/yum.repos.d/ 目錄中的 .repo 檔案配置指定,如 rhel-debuginfo.repo 的内容:
rhel-debuginfo.repo
[rhel-debuginfo]
name=Red Hat Enterprise Linux 5Client - i386 - Debug
baseurl=ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/i386/Debuginfo/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
YUM 的系統配置檔案位于 /etc/yum.conf,内容如:
[main]
cachedir=/var/cache/yum
keepcache=1
debuglevel=2
pkgpolicy=newest
logfile=/var/log/yum.log
distroverpkg=redhat-release
tolerant=1
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
exclude= firefox gftp
配置檔案用來定義使用者期望的 yum 行為,比如,gpgcheck 表明安裝時不進行 gpg 驗證,exclued=firefox gftp 表明進行系統全軟體更新時不更新 firefox 和 gftp 。
YUM 常用指令
安裝指定軟體 :
# yum -y install package-name
列出系統中已安裝軟體
# yum list
列出系統中可更新的所有軟體
# yum check-update
更新系統中可更新的所有軟體
# yum update
更新指定軟體
# yum update package-name
在更新過程中接受所有互動問答
# yum -y update
解除安裝指定軟體
# yum remove package-name
更多有關 YUM 的資訊,請查閱 http://fedoraproject.org/wiki/Tools/yum 。
更友好的包管理軟體 - APT
APT
APT 的全稱為 Advanced Packaging Tools 。與 YUM 對應,它最早被設計成 DPKG 的前端軟體,現在通過 apt-rpm 也支援 rpm 管理。而本節本節将介紹 APT 作為 DPKG 前端的使用。 APT 的主要包管理工具為 APT-GET,通過此工具可滿足和上述 YUM 相似的功能要求。
APT 的軟體源定義來自 /etc/apt/sources.list 檔案:
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://cn.archive.ubuntu.com/ubuntu/ hardy main restricted
注意每次手動修改上述檔案後,需要使用 sudo apt-get update 來更新系統的源使新的源資料被目前系統識别。
UBUNTU 中 APT 的配置檔案位于 /etc/apt/apt.conf.d,其中的多個配置檔案依功能分類。
APT 常用指令
更新源索引
$ sudo apt-get update
安裝指定軟體
$ sudo apt-get install package-name
下載下傳指定軟體的源檔案
$ sudo apt-get source package-name
将系統中所有軟體更新到最新版本
$ sudo apt-get upgrade
将作業系統連同所有軟體更新到最新版本
$ sudo apt-get dist-upgrade
解除安裝指定軟體
$ sudo apt-get remove package-name
更多有關 APT 的資訊,請查閱 http://www.debian.org/doc/manuals/apt-howto/index.en.html 。
回頁首
RPM 與 DEB 的相容 - Alien
Alien 工具可以将 RPM 軟體包轉換成 DEB 軟體包,或把 DEB 軟體包轉換成 RPM 軟體包,以此适應相容性的需要。注意首先請在系統中安裝 alien 。
在 UBUNTU 中使用 alien 将 rpm 轉換為 deb 并安裝 :
$ sudo alien -d package.rpm
$ sudo dpkg -i package.deb
在 RHEL 中使用 alien 将 deb 轉換為 rpm 并安裝 :
# alien -r package.deb
# rpm -ivh package.rpm
更多 alien 相關資訊請查閱 http://linux.die.net/man/1/alien
總結
本文以 RHEL 5.2 和 Ubuntu 904 為例,基于指令行操作,介紹了 Linux 系統中兩大常用軟體包管理工具- RPM 與 DPKG 。首先從最底端的 rpm/dpkg 指令操作開始列舉了它們的基本使用方法,随後指出了軟體的依賴關系以及由此帶來的問題,并對此問題的解決方案,也是最流行的 YUM 與 APT 前端軟體管理系統進行了操作介紹。最後本文簡要說明了目前 RPM/DEB 的相容性問題的正常解決方法。
常見問題清單
可以手動強制不進行 RPM/DEB 的依賴性關系檢查嗎?
RPM
可以。使用 --nodeps 輔助參數,則安裝過程将不理會依賴性關系限制,強制安裝目标包,如:
# rpm -i --nodeps package_a.rpm
DEB
可以。使用— force-depends 輔助參數,如:
$ sudo dpkg -i --force-depends package_a.deb
RPM 中的 --force 是幹什麼用的?
RPM 中的預設安裝規則是不允許同一個包多次安裝的,也不允許降級安裝。使用 --force 輔助參數将不考慮以上因素,強制安裝 RPM 包。但是,--force 無法強制安裝一個不滿足系統依賴性關系的包 ( 此時需要用到 --nodeps 參數 ) 。使用方法如:
# rpm -i --force package_a.rpm
RPM/DPKG 支援遠端安裝嗎?
RPM
是。 RPM 支援 HTTP 和 FTP 協定,如:
# rpm -Uvh ftp://user:[email protected]/package.rpm
DPKG
最新的基于 DEB 包的系統中,遠端安裝通常被更先進的 APT 代替。
可以從 RPM/DPKG 中抽取個别檔案嗎?
RPM
是。可以使用 rpm2cpio 工具來提取檔案:http://www.rpm.org/max-rpm/s1-rpm-miscellania-rpm2cpio.html
DPKG
是。可以使用 dpkg-deb 工具來提取檔案:
$ dpkg-deb --extract ibm_lotus_notes-8.5.i586.deb $dir( 目标目錄 )
RPM/DPKG 提供包安裝成功的驗證機制嗎?
RPM
是。可以使用 -V 參數進行驗證。
DPKG
Debian 系統通常使用 debsums 工具參數進行驗證。
RPM/DPKG 提供包安全簽名嗎?
RPM
是。可以使用 --import 導入與軟體同時釋出的 GPG KEY, 接着使用 -K 指令來驗證包的安全性,如:
# rpm --import pub_ibm_lotus_notes.gpg # rpm -K ibm_lotus_notes-8.5.i586.rpm 傳回資訊 : ibm_lotus_notes-8.5.i586.rpm: (sha1) dsa sha1 md5 gpg OK
DPKG
DPKG 不提供原生的 Key 驗證機制。可以使用 debsigs 和 debsigs-verify,詳情請見:http://man.ddvip.com/os/debiansecuring-howto/ch7.zh-cn.html
如果 RPM 的底層資料庫損壞,RPM 還能使用嗎?
RPM
如果底層資料庫損壞,RPM 将無法正常使用。此時最常用的解決方法是重構資料庫:
# rm -f /var/lib/rpm/__* ; rpm -vv --rebuilddb
RPM
DPKG 本身不提供底層資料庫恢複機制。它的資料庫以檔案形式儲存在 /var/lib/dpkg 目錄中。及時地備份這個目錄是最好的預防資料庫損壞措施。
可以查詢系統中已經安裝的某個檔案屬于哪個 RPM 包嗎?
RPM
可以。使用 -qf 參數 , 如在安裝了 Notes8.5 的系統中:
# rpm -qf /opt/ibm/lotus/notes/notes 傳回資訊 : Ibm_lotus_notes-8.5-20081211.1920
DPKG
可以。使用— search 參數 , 如在安裝了 Notes8.5 的系統中:
$ dpkg --search /opt/ibm/lotus/notes/notes 傳回資訊 : ibm-lotus-notes: /opt/ibm/lotus/notes/notes
可以查詢 RPM 包的安裝時間嗎?
RPM
可以。可使用 --last 查詢。如:
rpm -qa --last 傳回資訊 : 系統中所有軟體的安裝時間。
DPKG
DPKG 不提供直接的查詢參數,但是可以用過查詢 dpkg 的日志檔案實作這個功能。如:
cat /var/log/dpkg.log | grep "\ install\ "
轉載于:https://www.cnblogs.com/sonice-cinsy/p/6612887.html