標籤:yum rpm
linux系統管理員在管理作業系統時,管理作業系統上的軟體幾乎是系統管理員必備的功能。在早期debain發行版中,debain的開發人員為開發了一款名叫dpkg的軟體包管理器。後來redhat的開發人員仿照dpkg開發了一個和dpkg功能類似,但功能比其更強大的一款名叫rpm(RPM is Package Manager)的軟體包管理器。目前rpm軟體包管理器已經是linux界軟體包管理器的工業標準。由於linux中的大多數功能複雜的軟體都是由眾多功能單一軟體組合起來實現的。因此,當我們用rpm管理器給linux安裝軟體包時。往往會產生依賴關係。例如:我們在安裝A時,A依賴B,B依賴C,C又依賴D,據此你在安裝A的時候,就不得不把B、C、D都自己一個個的手動裝上。更有趣的是我們在安裝A時,A依賴B,B依賴C,C依賴D,D又依賴A,從而形成了循環相依性導致A軟體包安裝不上去。很顯然我們需要一種方式來解決linux安裝軟體包時產生的依賴關係,centos上的yum和debain上的apt-get工具就能解決軟體安裝時產生的依賴關係。下面我們詳細介紹一下centos上的rpm和yum工具。
rpm(RPM is Package Manager):是redhat和centos等linux作業系統上的軟體包管理工具,現已成為linux界軟體包管理器的工業標準。主要提供了安裝、卸載、升級、查詢、校正、資料庫管理等功能。rpm的使用情境及其具體用法如下如下:
rpm軟體包命名格式:
name-[subname]-major-minor-src_release.rpm_release.arch.rpm
name:軟體包的名稱
subname:軟體包的子包名稱
major:用於編譯此rpm包的源碼包的主要版本號
minor:用於編譯此rpm包的源碼包的次版本號碼
src_release:用於編譯此rpm包的源碼包的修訂編號
rpm_release:編譯此rpm的修訂編號(表示第幾次用同一個源碼編譯成軟體包,其中還包括此軟體包使用的os)
arch:表示此軟體包編譯時間用到的CPU架構(常見的有i386、x86_64)
樣本:httpd-2.2.3-91.el5.centos.i386.rpm
安裝軟體包
rpm [option] /path/to/package_file
-i:安裝
-v:顯示安裝詳細資料
-h:以#號顯示安裝進度,每個#號代表2%的安裝進度
組合用法:rpm -ivh /path/to/package_file
--nodeps:安裝時忽略依賴關係。(此方式安裝的軟體可能運行不了)
--test:測試安裝,不是真正的安裝。
--replacepkgs:重新安裝(如果原有設定檔作了修改,很有可能不執行替換,而是將應該安裝產生的設定檔重新命名為 .rpmnew)
卸載軟體包
rpm [option] package_name
-e:卸載(如果包的設定檔安裝後曾被改動過,卸載時,此檔案將不會卸載,而是被重新命名並保留,例如warning: /etc/zprofile saved as /etc/zprofile.rpmsave.)
--nodeps:卸載時忽略依賴關係(卸載後,依賴次軟體包的程式可能無法正常運行)
升級軟體包
rpm [option] /path/to/package_file
-Uvh:升級或安裝,如果舊版本的軟體包不存在,則安裝此軟體包;如果舊的軟體包存在,則升級舊軟體包。
-Fvh:純升級,如果舊版本的軟體包不存在,則不安裝此軟體包;如果舊的軟體包存在,則升級舊軟體包。
注意:不應該對核心執行升級操作,而是安裝。系統允許多核心並存
查詢軟體包相關資訊
rpm [option] package_name
-q 查詢某包是否安裝
-qa 查詢所有已經安裝的包
-qi 查詢包的描述資訊
-ql 查詢某包安裝產生了哪些檔案
-qc 查詢某包安裝產生了哪些設定檔
-qd 查詢某包安裝產生了哪些協助檔案
rpm -q --scripts package_name 查詢程式包的相關指令碼
指令碼有四類:
preinstall:安裝前指令碼
postinstall: 安裝後指令碼
preuninstall: 卸載前指令碼
postuninstall: 年前後指令碼
rpm [option] /path/to/package_file
-qf 查詢某檔案是由哪個包安裝產生的
-qpi:查詢未安裝包的描述資訊
-qpl:查詢未安裝包的安裝檔案清單
-qpc:查詢未安裝包的設定檔及其路徑
-qpd:查詢未安裝包的協助檔案及其路徑
校正:用於檢查包安裝產生的檔案屬性是否發生變化
rpm -V package_name
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ
某屬性無變化,顯示為.
rpm包來源合法性及完整性檢驗:
前提:在當前系統上匯入包的製作者的公開金鑰
匯入:
rpm --import /path/to/key_file
rpm -qa gpg-pubkey*:顯示所有已經匯入的gpg格式的公開金鑰 rpm -qi gpg-pubkey-NAME:顯示密鑰的詳細資料
檢查包:安裝過程中會自動執行
手動檢查:
rpm -K /path/to/package_file
rpm --checksig /path/to/package_file
rpm -K --nodigest:不檢查包完整性:
rpm -K --nosignature:不檢查來源合法性
rpm資料庫重建:
資料庫目錄:/var/lib/rpm
rpm --initdb:初始化
如果事先沒有庫,會建立一個;如果有,則不建立; rpm --rebuilddb: 重建
直接重建,覆蓋原有的資料庫
yum(yellowdog update manager):yum是centos或redhat系統上軟體包安裝時自動解決依賴關係的工具。其工作原理如
650) this.width=650;" title="yum.png" alt="wKiom1WBUvuC6qgoAAB0F1P1vM4669.jpg" src="http://s3.51cto.com/wyfs02/M01/6E/A6/wKiom1WBUvuC6qgoAAB0F1P1vM4669.jpg" />
首先yum用戶端在命令列中執行yum命令安裝程式時,然後用戶端會根據其本地定義的yum設定檔中的baseurl找到yum倉庫,並將其的repodata中繼資料下載下來緩衝到本地,在本地對其進行解壓分析並解決將要安裝的軟體的依賴關係,從而決定安裝此程式需要安裝哪些依賴包。最後根據分析結果到指定的yum倉庫下載需要安裝的包及其依賴包到本地,並調用rpm軟體包管理器進行安裝。
yum用戶端命令的用法:
yum list:列出yum倉庫及倉庫中的軟體包
yum repolist:列出本地可用的yum倉庫但不列出yum倉庫的軟體包
yum install package_name:安裝軟體包(centos 6以上的版本,在安裝倉庫中的包時,自動解決依賴關係。centos 5中對應的選項為 localinstall)
yum reinstall package_name:重新安裝軟體包
yum grouplist package_name:安裝軟體包組
yum remove package_name:卸載軟體包
yum update package_name:升級軟體包
yum downgrade package_name:給軟體包降級
yum info package_name:查看軟體包的描述資訊
yum clean {metadata|packages|all}:清除yum緩衝
註:用戶端的yum緩衝在/var/cache/yum/$basearch/$releasever目錄中
$basearh:表示當前系統的CPU基本平台,常見的有(i386、x86_64)。
$releasever:表示當前系統發行版的主要版本號。
這兩個變數也可以在yum用戶端的設定檔中使用
yum用戶端設定檔的基本格式
[repo-id]
baseurl=http://mirrors.163.com/centos/5/os/i386/ #yum倉庫的url路徑(要指到repodata目錄的父目錄)
enabled={1|0} #配置此yum倉庫是否啟用。啟用為1,不啟用為0
gpgcheck={1|0} #配置是否啟用gpg來驗證軟體包的來源合法性和完整性。啟用為1,不啟用為0(與gpgkey一同使用)
gpgkey=http://mirrors.163.com/centos/5/os/i386/RPM-GPG-KEY-CentOS-5 #指定當前倉庫中軟體包製作者的公開金鑰的url路徑
cost=1000 #訪問此倉庫的花銷,預設為1000,值越小,優先順序越高
如何配置yum源
首先要把完成同一功能的軟體包放到指定目錄,然後使用createrepo /rpm/dir/命令給目錄中的軟體包建立中繼資料,中繼資料儲存在軟體包存放的目錄中的repodata目錄中,其中儲存了當前倉庫中的各個軟體包的名稱、描述資訊、其是否已被安裝、包組及其描述資訊和各個軟體包之間的依賴關係等資訊。然後安裝http或ftp或nfs服務將軟體包所在的目錄對外發布即可。
本文出自 “木屋科技” 部落格,請務必保留此出處http://starli.blog.51cto.com/8813574/1662902
centos系統上的二進位格式軟體包的安裝及管理(rpm和yum)