linux軟體包管理詳解

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

linux軟體包管理

在windows下安裝軟體很簡單,大多數軟體都只需要按照提示完成安裝操作.但是,在linux下安裝軟體稍微複雜了一點,需要用到命令行工具.下面通過在Red Hat Enterprise Linux 5下安裝RPM軟體包來了解Linux下的安裝

1.使用rpm命令.

RPM 全稱為(Redhat Package Manager),最早由 Red Hat 公司制定實施,隨後被 GNU 開源操作系統接受並成為很多 Linux 系統 (RHEL) 的既定軟體標準.由此,Red Hat Enterprise Linux5 也內置了這個命令行小工具,用它來管理RPM軟體包.可以使用rpm來查詢已經安裝的軟體包、安裝軟體、升級軟體和卸載軟體等信息.

RPM 命令常用參數

-q 在系統中查詢軟體或查詢指定 rpm 包的內容信息

-i 在系統中安裝軟體

-U 在系統中升級軟體

-e 在系統中卸載軟體

-h 用 #(hash) 符顯示 rpm 安裝過程

-v 詳述安裝過程

-p 表明對 RPM 包進行查詢,通常和其它參數同時使用,如:

-qlp 查詢某個 RPM 包中的所有文件列表

-qip 查詢某個 RPM 包的內容信息

2.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

3.RPM 包管理示例

以下步驟描述了一個普通用戶安裝 IBM Lotus Notes V85 ( 以下簡稱 Notes) 的典型操作過程. Notes 的 RPM 包名為 ibm_lotus_notes-8.5.i586.rpm .

01.首先查詢是否該軟體是否已經在系統中存在
# rpm -qa | grep ibm_lotus_notes

: 如果返回信息為空那麼說明該軟體還未被安裝.

02.查詢 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 ..

03.安裝 Notes:
# rpm -ivh ibm_lotus_notes-8.5.i586.rpm

返回信息 :

Preparing... ########################################### [100%]
1:ibm_lotus_notes ########################################### [100%]


04.升級 Notes:
若今後需要基於該版本升級至更高版本的 Notes( 縫 .0 - ibm_lotus_notes-9.0.i586.rpm),則使用 -U 參數:

# rpm -Uvh ibm_lotus_notes-8.5.i586.rpm
註:在該步驟中如果使用 -i 則系統通常會報文件衝突錯誤,無法正常安裝.

05.卸載 Notes
注意:卸載軟體使用軟體名稱,而不是包文件名:

# rpm -ev ibm_lotus_notes

4.軟體包依賴性關係

開源的多態性,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

查詢 RPM 包的依賴關係, 使用 rpm -qRp:

# rpm -qRp package_a.rpm

package_b = version_info

package_b >= version_info

package_b <= version_info

對於 package_a,正確的安裝方法應該是:
##RPM
# rpm -ivh package_b.rpm
# rpm -ivh package_a.rpm

5.嵌套的依賴關係

如上示例為最理想的依賴關係,實際應用中往往最令用戶頭疼的是 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 基於 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

6.常見問題列表

01.可以手動強制不進行 RPM的依賴性關係檢查嗎?

RPM 可以.使用 --nodeps 輔助參數,則安裝過程將不理會依賴性關係限制,強制安裝目標包,

如:# rpm -i --nodeps package_a.rpm

02.RPM 中的 --force 是幹什麼用的?

RPM 中的默認安裝規則是不允許同一個包多次安裝的,也不允許降級安裝.使用 --force 輔助參數將不考慮以上

因素,強制安裝 RPM 包.但是,--force 無法強制安裝一個不滿足系統依賴性關係的包 ( 此時需要用到 --nodeps

參數 ) .使用方法如:
# rpm -i --force package_a.rpm

03.RPM支持遠程安裝嗎?

RPM 是. RPM 支持 HTTP 和 FTP 協議,如:# rpm -Uvh ftp://user:pass@ftpserver/package.rpm
04.RPM提供包安裝成功的驗證機制嗎?

RPM 是. 可以使用 -V 參數進行驗證.
05.RPM提供包安全簽名嗎?

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

06.如果 RPM 的底層資料庫損壞,RPM 還能使用嗎?

RPM 如果底層資料庫損壞,RPM 將無法正常使用.此時最常用的解決方法是重構資料庫:
# rm -f /var/lib/rpm/__* ; rpm -vv --rebuilddb

07.可以查詢系統中已經安裝的某個文件屬於哪個 RPM 包嗎?

RPM 可以.使用 -qf 參數 , 如在安裝了 Notes8.5 的系統中:
# rpm -qf /opt/ibm/lotus/notes/notes 返回信息 : Ibm_lotus_notes-8.5-20081211.1920

08.可以查詢 RPM 包的安裝時間嗎?

RPM 可以.可使用 --last 查詢.如:
# rpm -qa --last 返回信息 : 系統中所有軟體的安裝時間.

結束

......


表明 package_a.rpm 依賴於 version_info 版的 package_b,或者任何高於並包括 version_info 版的 package_b,亦或低於或包括 version_info 版的 package_b . package_b.rpm 在 package_a 之前安裝於系統中.

本文出自 「楊冬的博客」 博客,請務必保留此出處http://yangdong.blog.51cto.com/2959198/540891





[火星人 ] linux軟體包管理詳解已經有334次圍觀

http://coctec.com/docs/linux/show-post-48892.html