| rpm |
|
|
| 作者 Sonia | ||||||||
|
RPM 全名是『 RedHat Package Manager 』簡稱則為 RPM !當初這個套件管理的程式是由 Red Hat 這家公司發展出來的,但其實在很多的其他套件也有相類似的套件管理程式。不過由於 RPM 使用上很方便,是目前最熱門的套件管理程式! RPM 是以一種資料庫記錄的方式來將你所需要的套件安裝到你的 Linux 主機的一套管理程式。他最大的特點就是將您要安裝的套件先包裝好了,透過包裝好的套件裡頭預設的資料庫記錄,記錄這個套件要安裝的時候必須要的相依屬性模組(就是你的 Linux 主機需要先存在的幾個必須的套件),當安裝在你的 Linux 主機時, RPM 會先依照套件裡頭的紀錄資料查詢 Linux 主機的相依屬性套件是否滿足,若滿足則予以安裝,若不滿足則不予安裝。那麼安裝的時候就將該套件的資訊整個寫入 RPM 的資料庫中,以便未來的查詢、驗證與反安裝!這樣一來的優點是: 1.由於已經編譯完成並且打包完畢,所以安裝上很方便; 2.由於套件的資訊都已經記錄在 Linux 主機的資料庫上,很方便查詢、升級與反安裝; 但是這也造成很大的困擾,由於 RPM 程式是已經包裝好的資料,也就是說,裡面的資料已經都『編譯完成』了!所以,安裝的時候一定需要當初安裝時的主機環境才能安裝,也就是說,當初建立這個套件的安裝環境必須也要在你的主機上面出現才行!例如 rp-pppoe 這個 ADSL 撥接套件,他必須要在 ppp 這個套件存在的環境下才能進行安裝!如果你的主機並沒有 ppp 這個套件,那麼除非您先安裝 ppp 否則 rp-pppoe 就是不讓你安裝的(當然您可以強制安裝,但是通常都會有點問題發生!)。 通常不同的 distribution 所釋出的 RPM 檔案,並不能用在其他的 distribution 裡面,舉例來說, Red Hat 釋出的 RPM 檔案,通常無法直接在 Mandrake 上面進行安裝的,更有甚者,不同版本之間也無法互通,例如 Mandrake 9.0 的 RPM 檔案就無法直接套用在 8.2 上面!因此,這樣可以發現他的缺點是: 3.安裝的環境必須與打包時的環境需求一致或相當; 4.需要滿足套件的相依屬性需求; 5.反安裝時需要特別小心,最底層的套件不可先移除,否則可能造成整個系統的問題! SRPM : SRPM也是一種 RPM ,但是由於裡面連同當初編譯之前的原始碼都在裡頭,所以可以進行重新編譯的動作。通常 SRPM 的附檔名是 ****.src.rpm 這一種檔案格式。由於 SRPM 包含了原始碼及參數設定檔案,所以在安裝之前則必須重新的編譯建立起包裝的資訊檔案套件才行!如果在編譯的過程中發生了問題,也可以藉由裡頭的原始碼更動來修正問題!所以說, RPM 與 SRPM 最大的差異就是在於有沒有包含原始碼的程式! 檔名資訊
通常某個rpm的檔名會有以下這些部分: (也不一定會有) 1.套件名稱 2.版本資訊 3.釋出版本次數:也就是編譯的次數!由於同一版的套件中,可能由於有某些 bug 或者是安全上的顧慮,所以必須要重新設定當初打包時候的設定參數,設定完成之後重新編譯並打包成 RPM 檔案!因此就有不同的打包數出現! 4.操作硬體平台:由於 RPM 可以適用在不同的操作平台上,但是由於不同的平台設定的參數還是有所差異性!所以就有所謂的 i386, i586, i686 與 noarch 等的檔案名稱出現了! a.i386:幾乎適用於所有的 x86 平台,不論是舊的 pentum 或者是新的 pentum-IV 與 K7 系列的 CPU等等,都可以正常的工作!那個 i 指的是 Intel 相容的 CPU 的意思,至於 386 CPU 的等級! b.i586:包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插腳 ) 等等的 CPU 都算是這個等級; c.i686:在 pentun II 以後的 Intel 系列 CPU ,及 K7 以後等級的 CPU 都屬於這個 686 等級! d.noarch:就是沒有任何硬體等級上的限制。 需要額外說明的是, i386 的檔案可以在任何的機器上面安裝,不論是 586 或者是 686 的機器,但是 i386 則不一定可以使用於 586 或者是 686 的硬體上面,另外,在 686 的機器上使用 i686 的檔案會比使用 i386 的檔案在執行上,效能可能比較好一些!無論如何,使用 i386 應該就是比較沒有問題的啦!另外,由於不同的 distirbution 會有不同的環境與函式庫,所以在 i386 之後也有可能會額外再加上該套件的簡寫! SRPM 與 RPM 工作時候所需要的安裝目錄 SRPM 的編譯過程: SRPM 裡頭含有的是未經編譯的原始碼,所以我們需要將 SRPM 進行編譯打包的動作!那麼編譯是在哪裡進行呢?由於編譯的時候會將原始碼解壓縮出來,並且將附有的參數控制選項也同時的解開,所以就有一些資料會出現了,那麼這些資料放在哪裡呢?你可以到你的 /usr/src 這個目錄裡面去查看一下,通常每個 distribution 提供的目錄都不太相同,以 Mandrake 9.0 為例,他是以 /usr/src/RPM 為工作目錄, Red Hat 是以 /usr/src/redhat 為工作目錄, Openlinux 則是以 /usr/src/openlinux 為工作目錄!例如: /usr/src/OpenLinux/SPEC:這個目錄當中放置的是該套件的設定檔,例如這個套件的資訊參數、設定項目等等都放置在這裡; /usr/src/OpenLinux/SOURCE:這個目錄當中放置的是該套件的原始檔(*.tar.gz的檔案)以及 config 這個設定檔; /usr/src/OpenLinux/BUILD:在編譯的過程中,有些暫存的資料都會放置在這個目錄當中; /usr/src/OpenLinux/RPMS:經過編譯之後,並且順利的編譯成功之後,將打包完成的檔案放置在這個目錄當中。裡頭有包含了 i386, i586, i686, noarch.... 等等的次目錄。 此外,在編譯的過程當中,可能會發生不明的錯誤,或者是設定的錯誤,這個時候就會在 /tmp 底下產生一個相對應的錯誤檔,您可以根據該錯誤檔進行除錯的工作!等到所有的問題都解決之後,也編譯成功了,那麼剛剛解壓縮之後的檔案,就是在 /usr/src/RPM/SPEC, SOURCE, BUILD 等等的檔案都會被殺掉,而只剩下放置在 /usr/src/OpenLinux/RPMS 底下的檔案了! RPM 的安裝過程: RPM 在安裝的時候,會先去讀取 套件 內的設定參數內容,就是剛剛我們在 /usr/src/RPM/SPEC 的相關資訊!然後將該資料用來比對 Linux 系統的環境,這些環境包括了這個欲安裝的套件的前驅套件,例如目前 postfix 這個 e-mail 套件當中,大都支援了cyrus-sasl 這個套件的身份認證功能,所以,要安裝 postfix 就必需先安裝 cyrus-sasl 這個套件,否則 postfix 就不讓你安裝了!還有類似版本的資訊等等,這些都是 RPM 環境的要求,如果環境相符就予以安裝,如果不符就會顯示出不符合的內容所在!等到安裝完畢之後, rpm 就會將套件的資訊寫入:/var/lib/rpm 這個目錄中去!所以,往後您在進行查詢的時候或者是預計要升級的時候,相關的資訊就會由 /var/lib/rpm 這個目錄的內容資料來提供囉!此外,在安裝 RPM 的套件時,這些套件通常會使用到底下的目錄: 1. /etc 一些設定檔放置的目錄,例如 /etc/samba 2. /usr/bin 一些可執行檔案 3. /usr/lib 一些程式使用的動態函式庫 4. /usr/share/doc 一些基本的軟體使用手冊與說明檔 5. /usr/share/man 一些 man page 檔案 RPM 的指令使用:安裝、升級與更新、查詢、驗證、反安裝與重建資料庫 RPM 提供了『安裝』、『升級與更新』、『查詢』、『驗證』、『反安裝與重建資料庫』等功能: 安裝: 若是 RPM 則使用 -ivh !如果是 SRPM 就使用 --rebuild 或是 --recompiler
--rebuild:這個參數會將後面的 SRPM 進行『編譯』與『打包』的動作,但是並沒有安裝,當您使用 --rebuild 的時候,最後通常會發現一行字體: Wrote: /usr/src/RPM/RPMS/i386/rp-pppoe-2.6-5.i386.rpm 這個就是編譯完成的 RPM 檔案!那麼這個檔案就可以用來安裝!安裝的時候請加絕對路徑來安裝即可! --recompile:這個動作會直接的『編譯』『打包』並且『安裝』!請注意, rebuild 僅『編譯並打包』而已,而 recompile 不但進行編譯跟打包,還同時進行『安裝』了! -ivh:就是用來安裝 RPM 的參數而在這個參數之下,由於會有一些『相依屬性』的問題,或者是曾經安裝過的檔案的問題,所以您可以再加以下的參數來『強制』安裝: --nodeps:不考慮相依屬性的關係,強制安裝; --replacepkgs:如果這個套件之前安裝過,您想要覆蓋這個套件,那麼不需要反安裝後再安裝,可以直接加上 --replacepkgs 強制覆蓋; --replacefiles:那麼如果這個套件安裝完畢之後,曾經被你修改過檔案呢?就是安裝過程中會出現『confilcting files 』的話,那麼直接以 --replacefiles 覆蓋掉這種檔案! --checksig :驗證它的完整性。所有的 rpm 都已使用 MD5 校驗和□31805;名□12290; # rpm --checksig -v xsnow-1.41-1.i386.rpm xsnow-1.41-1.i386.rpm: MD5 sum OK: 8ebe63b1dbe86ccd9eaf736a7aa56fd8 gpg: Signature made Thu 10 May 2001 01:16:27 AM EDT using DSA key ID B1F6E46C gpg: Can't check signature: public key not found 問題出在我們不能獲取作者的公鑰。在我們從套裝軟體作者的網站獲得公鑰後,(如來自 rpm -qi 的輸出所示),簽名檢出如下: # gpg --import dan.asc gpg: key B1F6E46C: public key imported gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: Total number processed: 1 gpg: imported: 1 # rpm --checksig xsnow-1.41-1.i386.rpm xsnow-1.41-1.i386.rpm: md5 gpg OK
升級: 以 Uvh 來升級!但是在比較大量的升級版本中,使用 Fvh 則是比較好的作法。需要注意的是,如果您使用的是 Fvh ,偏偏您的機器上尚無這一個套件,那麼該套件並不會被安裝在您的 Linux 主機上面,所以請重新以 ivh 來安裝!
查詢: 查詢也是 RPM 的重要功能之一,因為他提供了這個套件的版本、用途等資訊!底下列出主要的查詢參數:
查詢套件:查詢安裝過的套件可以使用 -q 即可知道他的套件版本,但是如果忘記套件的全名,那麼可以使用 rpm -qa | grep pakagename 來選擇出適當的套件! 若使用 -qi 則可以瞭解這個套件的主要資訊! 尋找套件檔案:常常我們忘記一個套件內容含有的檔案時,可以使用 -ql 來查詢該套件! 由檔案尋找套件:假設您『誤砍』了某個檔案,偏偏不知道他是哪一個套件的,那麼你可以請跟你同樣系統的朋友,使用 -qf 來查詢該檔案所屬的套件,然後重新安裝該套件! 驗證: 驗證的功能主要在於提供系統管理員一個有用的管理機制!作用的方式是『使用 /var/lib/rpm 底下的資料庫內容來比對目前 Linux 系統的環境下的所有套件檔案』也就是說,當您有資料不小心遺失,或者是因為您誤殺了某個套件的檔案,或者是不小心不知道修改到某一個套件的檔案內容,就用這個簡單的方法來驗證一下原本的檔案系統!好讓您瞭解這一陣子到底是修改到哪些檔案資料了!
例如上面的範例中,我們知道了 crontabs 有五個檔案或目錄,其中,如果驗證一下的話,就會發現 /etc/crotab 已經被改過了?那麼如果該檔案的變更是『預期中的』,那麼就沒有什麼大問題,但是如果該檔案是『非預期的』,那就要懷疑是否被入侵了! 反安裝與重建資料庫: 反安裝就是將套件解除安裝啦!要注意的是,『解安裝的過程一定要由最上層往下解除』,以 rp-pppoe 為例,這一個套件主要是依據 ppp 這個套件來安裝的,所以當您要解除 ppp 的時候,就必須要先解除 rp-pppoe 才行!否則就會發生結構上的問題! 由於我們會一直在修改一些檔案內容,例如 /etc/xinetd.d 裡頭的參數檔案,加上可能自系統操作的過程中新增、移除等等的動作,導致系統的資料庫有點亂,這個時候可以使用 --rebuilddb 來重建一下 rpm 的資料庫!這兩個方法的參數如下
|
||||||||
| 下一個 > |
|---|





