為何需要升級套件 這真是一個很有趣的課題,為何需要升級套件?如果我的機器運作的好好的,那麼我干嘛需要升級?通常我們升級的原因主要有三個: ·需要新的功能,但舊有主機並沒有,所以需要安裝新的套件; ·舊版本的套件上面可能有安全上的顧慮,所以需要更新到新版的套件; ·舊版的套件執行效能不彰,或者執行的能力不能讓管理者滿足。 在上面的需求當中,尤其需要注意的是第二點,當一個套件有安全上的顧慮時,千萬不要懷疑,趕緊更新套件吧!否則造成網路危機,那可不是鬧著玩的?那麼更新的方法有哪些呢?其實,目前在 Linux 裡面有相當多的不同的更新套件的方式,包括了 Red Hat 發展的 RPM 與 up2date 的線上更新模式; Debian 這個 distribution 裡頭使用的 dpkg 方法;Sun Unix 上面使用的 pkg 升級方式;目前越來越流行的 apt 線上更新模式;還有原始碼裡頭最常使用的 Tarball 編譯方法等等,如果要一個一個說明的話那也太累人了?所以,這裡我們以目前在 Mandrake, Red Hat, OpenLinux 等 Linux distributions 內常見的 RPM 與 Tarball 的套件升級方式來進行說明: ·RPM 目前使用最廣泛的套件管理程式之一,利用資料庫管理的方式來進行套件的安裝,具有相當容易的操作介面,而且套件查詢驗證的功能相當強大,不過麻煩的地方在於他的屬性相依的問題;·Tarball 直接以原始碼( source code )經過編譯後,進行安裝。在安裝上面具有較大的靈活度,可以隨時更改使用者喜好的參數。但是需要其他的套件協助,例如 gcc compiler, kernel-header, make 套件等等,並且在反安裝上面具有一定程度的困難度;這兩種方法是各有優缺點啦,我們這裡想要來談一談 RPM 與 Tarball 的安裝方式了!
RPM套件管理員: 接下來我們先談論一下廣為流傳與使用的 RPM 套件管理員的相關使用方法喔! ·什麼是 RPM 、 SRPM ? RPM 全名是『 RedHat Package Manager 』簡稱則為 RPM 啦!顧名思義,當初這個套件管理的程式是由 Red Hat 這家公司發展出來的,但其實在很多的其他套件也有相類似的套件管理程式。不過由於 RPM 使用上很方便,所以就成了目前最熱門的套件管理程式啦!那麼什麼是 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 最大的差異就是在於有沒有包含原始碼的程式啦! ·什麼是 i386, i586, i686, noarch 好啦!現在我們已經知道 RPM 與 SRPM 的格式了,分別為: xxxxxxxxx.rpm <==RPM 的格式,已經包裝完成的 rpm 檔案; xxxxx.src.rpm <==SRPM的格式,包含為編譯的原始碼資訊。· OK!那麼 rpm 檔案有沒有什麼版本或者是套件名稱的稱呼呢?有的,你可以這樣來看待一個 rpm 的檔案,例如 rp-pppoe-2.6-5.i386.rpm rp-pppoe - 2.6 - 5 . i386 .rpm 第一個部分是套件名稱這是套件的版本資訊 這是釋出版本的次數 這是適合的硬體平台附檔名而已 這樣子可以很清楚的發現該套件的名稱、版本資訊、打包次數與操作的硬體平台!好了,來談一談每個不同的地方吧: o套件名稱:當然就是每一個套件的名稱了! o版本資訊:每一次更新版本就需要有一個版本的資訊,否則如何知道這一版是新是舊?這裡通常又分為主版本跟次版本,反正版本很多啦! o釋出版本次數:也就是編譯的次數啦!那麼為何需要重復的編譯呢?這是由於同一版的套件中,可能由於有某些 bug 或者是安全上的顧慮,所以必須要重新設定當初打包時候的設定參數,設定完成之後重新編譯並打包成 RPM 檔案!因此就有不同的打包數出現了! o操作硬體平台:這是個很好玩的地方,由於 RPM 可以適用在不同的操作平台上,但是由於不同的平台設定的參數還是有所差異性!所以就有所謂的 i386, i586, i686 與 noarch 等的檔案名稱出現了! §i386:幾乎適用於所有的 x86 平台,不論是舊的 pentum 或者是新的 pentum-IV 與 K7 系列的 CPU等等,都可以正常的工作!那個 i 指的是 Intel 相容的 CPU 的意思,至於 386 不用說,就是 CPU 的等級啦! §i586:就是 586 等級的電腦,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插腳 ) 等等的 CPU 都算是這個等級; §i686:在 pentun II 以後的 Intel 系列 CPU ,及 K7 以後等級的 CPU 都屬於這個 686 等級! §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 這個目錄下就對了!好了,既然我們是在 Mandrake 9.0 ,所以就到 /usr/src/RPM 裡頭去看一看呦: o/usr/src/RPM/SPEC:這個目錄當中放置的是該套件的設定檔,例如這個套件的資訊參數、設定項目等等都放置在這裡; o/usr/src/RPM/SOURCE:這個目錄當中放置的是該套件的原始檔(*.tar.gz的檔案)以及 config 這個設定檔; o/usr/src/RPM/BUILD:在編譯的過程中,有些暫存的資料都會放置在這個目錄當中; o/usr/src/RPM/RPMS:經過編譯之後,並且順利的編譯成功之後,將打包完成的檔案放置在這個目錄當中。裡頭有包含了 i386, i586, i686, noarch.... 等等的次目錄。 此外,在編譯的過程當中,可能會發生不明的錯誤,或者是設定的錯誤,這個時候就會在 /tmp 底下產生一個相對應的錯誤檔,您可以根據該錯誤檔進行除錯的工作呢!等到所有的問題都解決之後,也編譯成功了,那麼剛剛解壓縮之後的檔案,就是在 /usr/src/RPM/SPEC, SOURCE, BUILD 等等的檔案都會被殺掉,而只剩下放置在 /usr/src/RPM/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 的套件時,這些套件通常會使用到底下的目錄: o /etc 一些設定檔放置的目錄,例如 /etc/samba o /usr/bin 一些可執行檔案 o /usr/lib 一些程式使用的動態函式庫 o /usr/share/doc 一些基本的軟體使用手冊與說明檔 o /usr/share/man 一些 man page 檔案 底下我們先針對 RPM 的相關指令來進行說明啰! ·RPM 的指令使用:安裝、升級與更新、查詢、驗證、反安裝與重建資料庫 RPM 提供了『安裝』、『升級與更新』、『查詢』、『驗證』、『反安裝與重建資料庫』等功能,底下我們一個一個來說明吧!o安裝: 從無到有就是安裝啦!那麼安裝的方式為何呢?若是 RPM 則使用 ivh 啦!如果是 SRPM 就使用 rebuild 或是 recompiler 啰! [root @test /root]# rpm --rebuild rp-pppoe-2.6-5.src.rpm <==SRPM [root @test /root]# rpm --recompile rp-pppoe-2.6-5.src.rpm <==SRPM [root @test /root]# rpm -ivh rp-pppoe-2.6-5.i386.rpm <==RPM§--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 覆蓋掉這種檔案吧! [root @test /root]# rpm -ivh rp-pppoe-2.6-5.i386.rpm [root @test /root]# rpm -ivh --nodeps rp-pppoe-2.6-5.i386.rpm <==不考慮相依模組 [root @test /root]# rpm -ivh --replacepkgs rp-pppoe-2.6-5.i386.rpm <==直接覆蓋掉曾安裝過的套件 [root @test /root]# rpm -ivh --replacefiles rp-pppoe-2.6-5.i386.rpm <==直接覆蓋掉被修改過的問題檔案o升級: 使用 RPM 來升級真是太簡單了!就以 Uvh 來升級即可!但是在比較大量的升級版本中,使用 Fvh 則是比較好的作法。但是需要注意的是,如果您使用的是 Fvh ,偏偏您的機器上尚無這一個套件,那麼很抱歉,該套件並不會被安裝在您的 Linux 主機上面,所以請重新以 ivh 來安裝吧! [root @test /root]# rpm -Uvh rp-pppoe-2.6-5.i386.rpm [root @test /root]# rpm -Fvh *.rpm <==所有在你 Linux 主機上面安裝過的套件才升級注意的是, Uvh 是升級您所寫入的套件,至於 Fvh 則是『僅升級在您的系統裡面存在的套件』,所以有的朋友在大量的進行套件版本修補的時候,他們都是這樣做的: 1.先到各發展商的 errata 網站上捉下來最新的 i386 檔案; 2.使用 -Fvh 來將您的系統內曾安裝過的套件進行修補與升級!(真是方便呀!) o 查詢: 查詢也是 RPM 的重要功能之一,因為他提供了這個套件的版本、用途等資訊,是相當有用的!那麼如何查詢呢?底下列出只要的查詢參數: 1. 從系統查詢(由 /var/lib/rpm 資料庫取得的資料) [root @test /root]# rpm -q rp-pppoe <==僅列出 rp-pppoe 這個套件的版本; [root @test /root]# rpm -qa <==列出所有安裝過的套件與版本; [root @test /root]# rpm -qi rp-pppoe <==列出 rp-pppoe 這個套件的詳細資訊 [root @test /root]# rpm -ql rp-pppoe <==列出 rp-pppoe 這個套件安裝的檔案與路徑; [root @test /root]# rpm -qf /etc/rc.d/init.d/pppoe <==查詢 pppoe 這個檔案屬於哪一個套件? 2. 由檔案查詢檔案的內容 [root @test /root]# rpm -qpi rp-pppoe-2.6-5.src.rpm <==查詢這個套件的詳細資訊; [root @test /root]# rpm -qpl rp-pppoe-2.6-5.src.rpm <== 查詢這個套件裡面有多少的檔案內容存在o § 查詢套件:查詢安裝過的套件可以使用 -q 即可知道他的套件版本,但是如果忘記套件的全名,那麼可以使用 rpm -qa grep pakagename 來選擇出適當的套件! 若使用 -qi 則可以了解這個套件的主要資訊! § 尋找套件檔案:常常我們忘記一個套件內容含有的檔案時,可以使用 -ql 來查詢該套件,會列出相當多的檔案呦! § 由檔案尋找套件:這是最長發生的問題,就是您『誤砍』了某個檔案,偏偏不知道他是哪一個套件的,呵呵!那麼你可以請跟你同樣系統的朋友,使用 -qf 來查詢該檔案所屬的套件,然後重新安裝該套件就可以就回來啦! o 驗證: 驗證的功能主要在於提供系統管理員一個有用的管理機制!作用的方式是『使用 /var/lib/rpm 底下的資料庫內容來比對目前 Linux 系統的環境下的所有套件檔案』也就是說,當您有資料不小心遺失,或者是因為您誤殺了某個套件的檔案,或者是不小心不知道修改到某一個套件的檔案內容,就用這個簡單的方法來驗證一下原本的檔案系統吧!好讓您了解這一陣子到底是修改到哪些檔案資料了! [root @test /root]# rpm -V rp-pppoe <==單純檢查 rp-pppoe 這個已安裝套件的檔案內容與原先是否相同 [root @test /root]# rpm -Va <==檢查所有的 /var/lib/rpm 底下的資料庫與 Linux 系統下是否相同的檔案! 范例: [root @test /root]# rpm -V xinet S.5....T c /etc/xinetd.d/echo S.5....T c /etc/xinetd.d/echo-udp S.5....T c /etc/xinetd.d/time S.5....T c /etc/xinetd.d/time-udp 在檔案名稱前面的參數說明 S :file Size differs(檔案的容量大小已被改變) M :Mode differs (includes permissions and file type)(檔案的類型或檔案的屬性,如是否可執行等參數已被改變) 5 :MD5 sum differs(MD5 這一種加密防駭的屬性已被改變) D :Device major/minor number mis-match(裝置名稱已被改變) L :readLink(2) path mis-match(Link 屬性已被改變) U :User ownership differs(檔案的所屬人已被改變) G :Group ownership differs(檔案的所屬群組已被改變) T :mTime differs(檔案的建立時間已被改變) [root@test RPM]# rpm -ql crontabs <==查詢 crontabs 有哪些檔案? /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly /etc/crontab [root@test RPM]# rpm -V crontabs <==這些檔案有哪些已經被修改了? S.5....T c /etc/crontab例如上面的范例中,我們知道了 crontabs 有五個檔案或目錄,其中,如果驗證一下的話,就會發現 /etc/crotab 已經被改過了?那麼如果該檔案的變更是『預期中的』,那麼就沒有什麼大問題,但是如果該檔案是『非預期的』,那麼是否被入侵了呢?呵呵!得注意注意啰! o 反安裝與重建資料庫: 反安裝就是將套件解除安裝啦!要注意的是,『解安裝的過程一定要由最上層往下解除』,以 rp-pppoe 為例,這一個套件主要是依據 ppp 這個套件來安裝的,所以當您要解除 ppp 的時候,就必須要先解除 rp-pppoe 才行!否則就會發生結構上的問題啦!這個可以由建築物來說明,如果你要拆除五、六樓,那麼當然要由六樓拆起,否則拆了第五樓,那麼上面的樓層難道會懸空? 那麼重建資料庫呢?由於我們會一直在修改一些檔案內容,例如 /etc/xinetd.d 裡頭的參數檔案,加上可能自系統操作的過程中新增、移除等等的動作,導致系統的資料庫有點亂,這個時候可以使用 --rebuilddb 來重建一下 rpm 的資料庫!這兩個方法的參數如下啰 [root @test /root]# rpm -e re-pppoe <==解安裝 rp-pppoe [root @test /root]# rpm --rebuilddb <==重建資料庫
為何需要升級套件 這真是一個很有趣的課題,為何需要升級套件?如果我的機器運作的好好的,那麼我干嘛需要升級?通常我們升級的原因主要有三個: ·需要新的功能,但舊有主機並沒有,所以需要安裝新的套件; ·舊版本的套件上面可能有安全上的顧慮,所以需要更新到新版的套件; ·舊版的套件執行效能不彰,或者執行的能力不能讓管理者滿足。 在上面的需求當中,尤其需要注意的是第二點,當一個套件有安全上的顧慮時,千萬不要懷疑,趕緊更新套件吧!否則造成網路危機,那可不是鬧著玩的?那麼更新的方法有哪些呢?其實,目前在 Linux 裡面有相當多的不同的更新套件的方式,包括了 Red Hat 發展的 RPM 與 up2date 的線上更新模式; Debian 這個 distribution 裡頭使用的 dpkg 方法;Sun Unix 上面使用的 pkg 升級方式;目前越來越流行的 apt 線上更新模式;還有原始碼裡頭最常使用的 Tarball 編譯方法等等,如果要一個一個說明的話那也太累人了?所以,這裡我們以目前在 Mandrake, Red Hat, OpenLinux 等 Linux distributions 內常見的 RPM 與 Tarball 的套件升級方式來進行說明: ·RPM 目前使用最廣泛的套件管理程式之一,利用資料庫管理的方式來進行套件的安裝,具有相當容易的操作介面,而且套件查詢驗證的功能相當強大,不過麻煩的地方在於他的屬性相依的問題;·Tarball 直接以原始碼( source code )經過編譯後,進行安裝。在安裝上面具有較大的靈活度,可以隨時更改使用者喜好的參數。但是需要其他的套件協助,例如 gcc compiler, kernel-header, make 套件等等,並且在反安裝上面具有一定程度的困難度;這兩種方法是各有優缺點啦,我們這裡想要來談一談 RPM 與 Tarball 的安裝方式了!RPM套件管理員: 接下來我們先談論一下廣為流傳與使用的 RPM 套件管理員的相關使用方法喔! ·什麼是 RPM 、 SRPM ? RPM 全名是『 RedHat Package Manager 』簡稱則為 RPM 啦!顧名思義,當初這個套件管理的程式是由 Red Hat 這家公司發展出來的,但其實在很多的其他套件也有相類似的套件管理程式。不過由於 RPM 使用上很方便,所以就成了目前最熱門的套件管理程式啦!那麼什麼是 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 最大的差異就是在於有沒有包含原始碼的程式啦! ·什麼是 i386, i586, i686, noarch 好啦!現在我們已經知道 RPM 與 SRPM 的格式了,分別為: xxxxxxxxx.rpm <==RPM 的格式,已經包裝完成的 rpm 檔案; xxxxx.src.rpm <==SRPM的格式,包含為編譯的原始碼資訊。· OK!那麼 rpm 檔案有沒有什麼版本或者是套件名稱的稱呼呢?有的,你可以這樣來看待一個 rpm 的檔案,例如 rp-pppoe-2.6-5.i386.rpm rp-pppoe - 2.6 - 5 . i386 .rpm 第一個部分是套件名稱這是套件的版本資訊 這是釋出版本的次數 這是適合的硬體平台附檔名而已 這樣子可以很清楚的發現該套件的名稱、版本資訊、打包次數與操作的硬體平台!好了,來談一談每個不同的地方吧: o套件名稱:當然就是每一個套件的名稱了! o版本資訊:每一次更新版本就需要有一個版本的資訊,否則如何知道這一版是新是舊?這裡通常又分為主版本跟次版本,反正版本很多啦! o釋出版本次數:也就是編譯的次數啦!那麼為何需要重復的編譯呢?這是由於同一版的套件中,可能由於有某些 bug 或者是安全上的顧慮,所以必須要重新設定當初打包時候的設定參數,設定完成之後重新編譯並打包成 RPM 檔案!因此就有不同的打包數出現了! o操作硬體平台:這是個很好玩的地方,由於 RPM 可以適用在不同的操作平台上,但是由於不同的平台設定的參數還是有所差異性!所以就有所謂的 i386, i586, i686 與 noarch 等的檔案名稱出現了! §i386:幾乎適用於所有的 x86 平台,不論是舊的 pentum 或者是新的 pentum-IV 與 K7 系列的 CPU等等,都可以正常的工作!那個 i 指的是 Intel 相容的 CPU 的意思,至於 386 不用說,就是 CPU 的等級啦! §i586:就是 586 等級的電腦,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插腳 ) 等等的 CPU 都算是這個等級; §i686:在 pentun II 以後的 Intel 系列 CPU ,及 K7 以後等級的 CPU 都屬於這個 686 等級! §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 這個目錄下就對了!好了,既然我們是在 Mandrake 9.0 ,所以就到 /usr/src/RPM 裡頭去看一看呦: o/usr/src/RPM/SPEC:這個目錄當中放置的是該套件的設定檔,例如這個套件的資訊參數、設定項目等等都放置在這裡; o/usr/src/RPM/SOURCE:這個目錄當中放置的是該套件的原始檔(*.tar.gz的檔案)以及 config 這個設定檔; o/usr/src/RPM/BUILD:在編譯的過程中,有些暫存的資料都會放置在這個目錄當中; o/usr/src/RPM/RPMS:經過編譯之後,並且順利的編譯成功之後,將打包完成的檔案放置在這個目錄當中。裡頭有包含了 i386, i586, i686, noarch.... 等等的次目錄。 此外,在編譯的過程當中,可能會發生不明的錯誤,或者是設定的錯誤,這個時候就會在 /tmp 底下產生一個相對應的錯誤檔,您可以根據該錯誤檔進行除錯的工作呢!等到所有的問題都解決之後,也編譯成功了,那麼剛剛解壓縮之後的檔案,就是在 /usr/src/RPM/SPEC, SOURCE, BUILD 等等的檔案都會被殺掉,而只剩下放置在 /usr/src/RPM/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 的套件時,這些套件通常會使用到底下的目錄: o /etc 一些設定檔放置的目錄,例如 /etc/samba o /usr/bin 一些可執行檔案 o /usr/lib 一些程式使用的動態函式庫 o /usr/share/doc 一些基本的軟體使用手冊與說明檔 o /usr/share/man 一些 man page 檔案 底下我們先針對 RPM 的相關指令來進行說明啰! ·RPM 的指令使用:安裝、升級與更新、查詢、驗證、反安裝與重建資料庫 RPM 提供了『安裝』、『升級與更新』、『查詢』、『驗證』、『反安裝與重建資料庫』等功能,底下我們一個一個來說明吧!o安裝: 從無到有就是安裝啦!那麼安裝的方式為何呢?若是 RPM 則使用 ivh 啦!如果是 SRPM 就使用 rebuild 或是 recompiler 啰! [root @test /root]# rpm --rebuild rp-pppoe-2.6-5.src.rpm <==SRPM [root @test /root]# rpm --recompile rp-pppoe-2.6-5.src.rpm <==SRPM [root @test /root]# rpm -ivh rp-pppoe-2.6-5.i386.rpm <==RPM§--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 覆蓋掉這種檔案吧! [root @test /root]# rpm -ivh rp-pppoe-2.6-5.i386.rpm [root @test /root]# rpm -ivh --nodeps rp-pppoe-2.6-5.i386.rpm <==不考慮相依模組 [root @test /root]# rpm -ivh --replacepkgs rp-pppoe-2.6-5.i386.rpm <==直接覆蓋掉曾安裝過的套件 [root @test /root]# rpm -ivh --replacefiles rp-pppoe-2.6-5.i386.rpm <==直接覆蓋掉被修改過的問題檔案o升級: 使用 RPM 來升級真是太簡單了!就以 Uvh 來升級即可!但是在比較大量的升級版本中,使用 Fvh 則是比較好的作法。但是需要注意的是,如果您使用的是 Fvh ,偏偏您的機器上尚無這一個套件,那麼很抱歉,該套件並不會被安裝在您的 Linux 主機上面,所以請重新以 ivh 來安裝吧! [root @test /root]# rpm -Uvh rp-pppoe-2.6-5.i386.rpm [root @test /root]# rpm -Fvh *.rpm <==所有在你 Linux 主機上面安裝過的套件才升級注意的是, Uvh 是升級您所寫入的套件,至於 Fvh 則是『僅升級在您的系統裡面存在的套件』,所以有的朋友在大量的進行套件版本修補的時候,他們都是這樣做的: 1.先到各發展商的 errata 網站上捉下來最新的 i386 檔案; 2.使用 -Fvh 來將您的系統內曾安裝過的套件進行修補與升級!(真是方便呀!) o 查詢: 查詢也是 RPM 的重要功能之一,因為他提供了這個套件的版本、用途等資訊,是相當有用的!那麼如何查詢呢?底下列出只要的查詢參數: 1. 從系統查詢(由 /var/lib/rpm 資料庫取得的資料) [root @test /root]# rpm -q rp-pppoe <==僅列出 rp-pppoe 這個套件的版本; [root @test /root]# rpm -qa <==列出所有安裝過的套件與版本; [root @test /root]# rpm -qi rp-pppoe <==列出 rp-pppoe 這個套件的詳細資訊 [root @test /root]# rpm -ql rp-pppoe <==列出 rp-pppoe 這個套件安裝的檔案與路徑; [root @test /root]# rpm -qf /etc/rc.d/init.d/pppoe <==查詢 pppoe 這個檔案屬於哪一個套件? 2. 由檔案查詢檔案的內容 [root @test /root]# rpm -qpi rp-pppoe-2.6-5.src.rpm <==查詢這個套件的詳細資訊; [root @test /root]# rpm -qpl rp-pppoe-2.6-5.src.rpm <== 查詢這個套件裡面有多少的檔案內容存在o § 查詢套件:查詢安裝過的套件可以使用 -q 即可知道他的套件版本,但是如果忘記套件的全名,那麼可以使用 rpm -qa grep pakagename 來選擇出適當的套件! 若使用 -qi 則可以了解這個套件的主要資訊! § 尋找套件檔案:常常我們忘記一個套件內容含有的檔案時,可以使用 -ql 來查詢該套件,會列出相當多的檔案呦! § 由檔案尋找套件:這是最長發生的問題,就是您『誤砍』了某個檔案,偏偏不知道他是哪一個套件的,呵呵!那麼你可以請跟你同樣系統的朋友,使用 -qf 來查詢該檔案所屬的套件,然後重新安裝該套件就可以就回來啦! o 驗證: 驗證的功能主要在於提供系統管理員一個有用的管理機制!作用的方式是『使用 /var/lib/rpm 底下的資料庫內容來比對目前 Linux 系統的環境下的所有套件檔案』也就是說,當您有資料不小心遺失,或者是因為您誤殺了某個套件的檔案,或者是不小心不知道修改到某一個套件的檔案內容,就用這個簡單的方法來驗證一下原本的檔案系統吧!好讓您了解這一陣子到底是修改到哪些檔案資料了! [root @test /root]# rpm -V rp-pppoe <==單純檢查 rp-pppoe 這個已安裝套件的檔案內容與原先是否相同 [root @test /root]# rpm -Va <==檢查所有的 /var/lib/rpm 底下的資料庫與 Linux 系統下是否相同的檔案! 范例: [root @test /root]# rpm -V xinet S.5....T c /etc/xinetd.d/echo S.5....T c /etc/xinetd.d/echo-udp S.5....T c /etc/xinetd.d/time S.5....T c /etc/xinetd.d/time-udp 在檔案名稱前面的參數說明 S :file Size differs(檔案的容量大小已被改變) M :Mode differs (includes permissions and file type)(檔案的類型或檔案的屬性,如是否可執行等參數已被改變) 5 :MD5 sum differs(MD5 這一種加密防駭的屬性已被改變) D :Device major/minor number mis-match(裝置名稱已被改變) L :readLink(2) path mis-match(Link 屬性已被改變) U :User ownership differs(檔案的所屬人已被改變) G :Group ownership differs(檔案的所屬群組已被改變) T :mTime differs(檔案的建立時間已被改變) [root@test RPM]# rpm -ql crontabs <==查詢 crontabs 有哪些檔案? /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly /etc/crontab [root@test RPM]# rpm -V crontabs <==這些檔案有哪些已經被修改了? S.5....T c /etc/crontab例如上面的范例中,我們知道了 crontabs 有五個檔案或目錄,其中,如果驗證一下的話,就會發現 /etc/crotab 已經被改過了?那麼如果該檔案的變更是『預期中的』,那麼就沒有什麼大問題,但是如果該檔案是『非預期的』,那麼是否被入侵了呢?呵呵!得注意注意啰! o 反安裝與重建資料庫: 反安裝就是將套件解除安裝啦!要注意的是,『解安裝的過程一定要由最上層往下解除』,以 rp-pppoe 為例,這一個套件主要是依據 ppp 這個套件來安裝的,所以當您要解除 ppp 的時候,就必須要先解除 rp-pppoe 才行!否則就會發生結構上的問題啦!這個可以由建築物來說明,如果你要拆除五、六樓,那麼當然要由六樓拆起,否則拆了第五樓,那麼上面的樓層難道會懸空? 那麼重建資料庫呢?由於我們會一直在修改一些檔案內容,例如 /etc/xinetd.d 裡頭的參數檔案,加上可能自系統操作的過程中新增、移除等等的動作,導致系統的資料庫有點亂,這個時候可以使用 --rebuilddb 來重建一下 rpm 的資料庫!這兩個方法的參數如下啰 [root @test /root]# rpm -e re-pppoe <==解安裝 rp-pppoe [root @test /root]# rpm --rebuilddb <==重建資料庫
為何需要升級套件 這真是一個很有趣的課題,為何需要升級套件?如果我的機器運作的好好的,那麼我干嘛需要升級?通常我們升級的原因主要有三個: ·需要新的功能,但舊有主機並沒有,所以需要安裝新的套件; ·舊版本的套件上面可能有安全上的顧慮,所以需要更新到新版的套件; ·舊版的套件執行效能不彰,或者執行的能力不能讓管理者滿足。 在上面的需求當中,尤其需要注意的是第二點,當一個套件有安全上的顧慮時,千萬不要懷疑,趕緊更新套件吧!否則造成網路危機,那可不是鬧著玩的?那麼更新的方法有哪些呢?其實,目前在 Linux 裡面有相當多的不同的更新套件的方式,包括了 Red Hat 發展的 RPM 與 up2date 的線上更新模式; Debian 這個 distribution 裡頭使用的 dpkg 方法;Sun Unix 上面使用的 pkg 升級方式;目前越來越流行的 apt 線上更新模式;還有原始碼裡頭最常使用的 Tarball 編譯方法等等,如果要一個一個說明的話那也太累人了?所以,這裡我們以目前在 Mandrake, Red Hat, OpenLinux 等 Linux distributions 內常見的 RPM 與 Tarball 的套件升級方式來進行說明: ·RPM 目前使用最廣泛的套件管理程式之一,利用資料庫管理的方式來進行套件的安裝,具有相當容易的操作介面,而且套件查詢驗證的功能相當強大,不過麻煩的地方在於他的屬性相依的問題;·Tarball 直接以原始碼( source code )經過編譯後,進行安裝。在安裝上面具有較大的靈活度,可以隨時更改使用者喜好的參數。但是需要其他的套件協助,例如 gcc compiler, kernel-header, make 套件等等,並且在反安裝上面具有一定程度的困難度;這兩種方法是各有優缺點啦,我們這裡想要來談一談 RPM 與 Tarball 的安裝方式了!RPM套件管理員: 接下來我們先談論一下廣為流傳與使用的 RPM 套件管理員的相關使用方法喔! ·什麼是 RPM 、 SRPM ? RPM 全名是『 RedHat Package Manager 』簡稱則為 RPM 啦!顧名思義,當初這個套件管理的程式是由 Red Hat 這家公司發展出來的,但其實在很多的其他套件也有相類似的套件管理程式。不過由於 RPM 使用上很方便,所以就成了目前最熱門的套件管理程式啦!那麼什麼是 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 最大的差異就是在於有沒有包含原始碼的程式啦! ·什麼是 i386, i586, i686, noarch 好啦!現在我們已經知道 RPM 與 SRPM 的格式了,分別為: xxxxxxxxx.rpm <==RPM 的格式,已經包裝完成的 rpm 檔案; xxxxx.src.rpm <==SRPM的格式,包含為編譯的原始碼資訊。· OK!那麼 rpm 檔案有沒有什麼版本或者是套件名稱的稱呼呢?有的,你可以這樣來看待一個 rpm 的檔案,例如 rp-pppoe-2.6-5.i386.rpm rp-pppoe - 2.6 - 5 . i386 .rpm 第一個部分是套件名稱這是套件的版本資訊 這是釋出版本的次數 這是適合的硬體平台附檔名而已 這樣子可以很清楚的發現該套件的名稱、版本資訊、打包次數與操作的硬體平台!好了,來談一談每個不同的地方吧: o套件名稱:當然就是每一個套件的名稱了! o版本資訊:每一次更新版本就需要有一個版本的資訊,否則如何知道這一版是新是舊?這裡通常又分為主版本跟次版本,反正版本很多啦! o釋出版本次數:也就是編譯的次數啦!那麼為何需要重復的編譯呢?這是由於同一版的套件中,可能由於有某些 bug 或者是安全上的顧慮,所以必須要重新設定當初打包時候的設定參數,設定完成之後重新編譯並打包成 RPM 檔案!因此就有不同的打包數出現了! o操作硬體平台:這是個很好玩的地方,由於 RPM 可以適用在不同的操作平台上,但是由於不同的平台設定的參數還是有所差異性!所以就有所謂的 i386, i586, i686 與 noarch 等的檔案名稱出現了! §i386:幾乎適用於所有的 x86 平台,不論是舊的 pentum 或者是新的 pentum-IV 與 K7 系列的 CPU等等,都可以正常的工作!那個 i 指的是 Intel 相容的 CPU 的意思,至於 386 不用說,就是 CPU 的等級啦! §i586:就是 586 等級的電腦,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插腳 ) 等等的 CPU 都算是這個等級; §i686:在 pentun II 以後的 Intel 系列 CPU ,及 K7 以後等級的 CPU 都屬於這個 686 等級! §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 這個目錄下就對了!好了,既然我們是在 Mandrake 9.0 ,所以就到 /usr/src/RPM 裡頭去看一看呦: o/usr/src/RPM/SPEC:這個目錄當中放置的是該套件的設定檔,例如這個套件的資訊參數、設定項目等等都放置在這裡; o/usr/src/RPM/SOURCE:這個目錄當中放置的是該套件的原始檔(*.tar.gz的檔案)以及 config 這個設定檔; o/usr/src/RPM/BUILD:在編譯的過程中,有些暫存的資料都會放置在這個目錄當中; o/usr/src/RPM/RPMS:經過編譯之後,並且順利的編譯成功之後,將打包完成的檔案放置在這個目錄當中。裡頭有包含了 i386, i586, i686, noarch.... 等等的次目錄。 此外,在編譯的過程當中,可能會發生不明的錯誤,或者是設定的錯誤,這個時候就會在 /tmp 底下產生一個相對應的錯誤檔,您可以根據該錯誤檔進行除錯的工作呢!等到所有的問題都解決之後,也編譯成功了,那麼剛剛解壓縮之後的檔案,就是在 /usr/src/RPM/SPEC, SOURCE, BUILD 等等的檔案都會被殺掉,而只剩下放置在 /usr/src/RPM/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 的套件時,這些套件通常會使用到底下的目錄: o /etc 一些設定檔放置的目錄,例如 /etc/samba o /usr/bin 一些可執行檔案 o /usr/lib 一些程式使用的動態函式庫 o /usr/share/doc 一些基本的軟體使用手冊與說明檔 o /usr/share/man 一些 man page 檔案 底下我們先針對 RPM 的相關指令來進行說明啰! ·RPM 的指令使用:安裝、升級與更新、查詢、驗證、反安裝與重建資料庫 RPM 提供了『安裝』、『升級與更新』、『查詢』、『驗證』、『反安裝與重建資料庫』等功能,底下我們一個一個來說明吧!o安裝: 從無到有就是安裝啦!那麼安裝的方式為何呢?若是 RPM 則使用 ivh 啦!如果是 SRPM 就使用 rebuild 或是 recompiler 啰! [root @test /root]# rpm --rebuild rp-pppoe-2.6-5.src.rpm <==SRPM [root @test /root]# rpm --recompile rp-pppoe-2.6-5.src.rpm <==SRPM [root @test /root]# rpm -ivh rp-pppoe-2.6-5.i386.rpm <==RPM§--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 覆蓋掉這種檔案吧! [root @test /root]# rpm -ivh rp-pppoe-2.6-5.i386.rpm [root @test /root]# rpm -ivh --nodeps rp-pppoe-2.6-5.i386.rpm <==不考慮相依模組 [root @test /root]# rpm -ivh --replacepkgs rp-pppoe-2.6-5.i386.rpm <==直接覆蓋掉曾安裝過的套件 [root @test /root]# rpm -ivh --replacefiles rp-pppoe-2.6-5.i386.rpm <==直接覆蓋掉被修改過的問題檔案o升級: 使用 RPM 來升級真是太簡單了!就以 Uvh 來升級即可!但是在比較大量的升級版本中,使用 Fvh 則是比較好的作法。但是需要注意的是,如果您使用的是 Fvh ,偏偏您的機器上尚無這一個套件,那麼很抱歉,該套件並不會被安裝在您的 Linux 主機上面,所以請重新以 ivh 來安裝吧! [root @test /root]# rpm -Uvh rp-pppoe-2.6-5.i386.rpm [root @test /root]# rpm -Fvh *.rpm <==所有在你 Linux 主機上面安裝過的套件才升級注意的是, Uvh 是升級您所寫入的套件,至於 Fvh 則是『僅升級在您的系統裡面存在的套件』,所以有的朋友在大量的進行套件版本修補的時候,他們都是這樣做的: 1.先到各發展商的 errata 網站上捉下來最新的 i386 檔案; 2.使用 -Fvh 來將您的系統內曾安裝過的套件進行修補與升級!(真是方便呀!) o 查詢: 查詢也是 RPM 的重要功能之一,因為他提供了這個套件的版本、用途等資訊,是相當有用的!那麼如何查詢呢?底下列出只要的查詢參數: 1. 從系統查詢(由 /var/lib/rpm 資料庫取得的資料) [root @test /root]# rpm -q rp-pppoe <==僅列出 rp-pppoe 這個套件的版本; [root @test /root]# rpm -qa <==列出所有安裝過的套件與版本; [root @test /root]# rpm -qi rp-pppoe <==列出 rp-pppoe 這個套件的詳細資訊 [root @test /root]# rpm -ql rp-pppoe <==列出 rp-pppoe 這個套件安裝的檔案與路徑; [root @test /root]# rpm -qf /etc/rc.d/init.d/pppoe <==查詢 pppoe 這個檔案屬於哪一個套件? 2. 由檔案查詢檔案的內容 [root @test /root]# rpm -qpi rp-pppoe-2.6-5.src.rpm <==查詢這個套件的詳細資訊; [root @test /root]# rpm -qpl rp-pppoe-2.6-5.src.rpm <== 查詢這個套件裡面有多少的檔案內容存在o § 查詢套件:查詢安裝過的套件可以使用 -q 即可知道他的套件版本,但是如果忘記套件的全名,那麼可以使用 rpm -qa grep pakagename 來選擇出適當的套件! 若使用 -qi 則可以了解這個套件的主要資訊! § 尋找套件檔案:常常我們忘記一個套件內容含有的檔案時,可以使用 -ql 來查詢該套件,會列出相當多的檔案呦! § 由檔案尋找套件:這是最長發生的問題,就是您『誤砍』了某個檔案,偏偏不知道他是哪一個套件的,呵呵!那麼你可以請跟你同樣系統的朋友,使用 -qf 來查詢該檔案所屬的套件,然後重新安裝該套件就可以就回來啦! o 驗證: 驗證的功能主要在於提供系統管理員一個有用的管理機制!作用的方式是『使用 /var/lib/rpm 底下的資料庫內容來比對目前 Linux 系統的環境下的所有套件檔案』也就是說,當您有資料不小心遺失,或者是因為您誤殺了某個套件的檔案,或者是不小心不知道修改到某一個套件的檔案內容,就用這個簡單的方法來驗證一下原本的檔案系統吧!好讓您了解這一陣子到底是修改到哪些檔案資料了! [root @test /root]# rpm -V rp-pppoe <==單純檢查 rp-pppoe 這個已安裝套件的檔案內容與原先是否相同 [root @test /root]# rpm -Va <==檢查所有的 /var/lib/rpm 底下的資料庫與 Linux 系統下是否相同的檔案! 范例: [root @test /root]# rpm -V xinet S.5....T c /etc/xinetd.d/echo S.5....T c /etc/xinetd.d/echo-udp S.5....T c /etc/xinetd.d/time S.5....T c /etc/xinetd.d/time-udp 在檔案名稱前面的參數說明 S :file Size differs(檔案的容量大小已被改變) M :Mode differs (includes permissions and file type)(檔案的類型或檔案的屬性,如是否可執行等參數已被改變) 5 :MD5 sum differs(MD5 這一種加密防駭的屬性已被改變) D :Device major/minor number mis-match(裝置名稱已被改變) L :readLink(2) path mis-match(Link 屬性已被改變) U :User ownership differs(檔案的所屬人已被改變) G :Group ownership differs(檔案的所屬群組已被改變) T :mTime differs(檔案的建立時間已被改變) [root@test RPM]# rpm -ql crontabs <==查詢 crontabs 有哪些檔案? /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly /etc/crontab [root@test RPM]# rpm -V crontabs <==這些檔案有哪些已經被修改了? S.5....T c /etc/crontab例如上面的范例中,我們知道了 crontabs 有五個檔案或目錄,其中,如果驗證一下的話,就會發現 /etc/crotab 已經被改過了?那麼如果該檔案的變更是『預期中的』,那麼就沒有什麼大問題,但是如果該檔案是『非預期的』,那麼是否被入侵了呢?呵呵!得注意注意啰! o 反安裝與重建資料庫: 反安裝就是將套件解除安裝啦!要注意的是,『解安裝的過程一定要由最上層往下解除』,以 rp-pppoe 為例,這一個套件主要是依據 ppp 這個套件來安裝的,所以當您要解除 ppp 的時候,就必須要先解除 rp-pppoe 才行!否則就會發生結構上的問題啦!這個可以由建築物來說明,如果你要拆除五、六樓,那麼當然要由六樓拆起,否則拆了第五樓,那麼上面的樓層難道會懸空? 那麼重建資料庫呢?由於我們會一直在修改一些檔案內容,例如 /etc/xinetd.d 裡頭的參數檔案,加上可能自系統操作的過程中新增、移除等等的動作,導致系統的資料庫有點亂,這個時候可以使用 --rebuilddb 來重建一下 rpm 的資料庫!這兩個方法的參數如下啰 [root @test /root]# rpm -e re-pppoe <==解安裝 rp-pppoe [root @test /root]# rpm --rebuilddb <==重建資料庫