欧美日韩精品在线,国内精品久久久久久久久,一级毛片恃级毛片直播,清纯唯美亚洲综合欧美色

Linux的RPM與Tarball套件管理工具_(dá)Linux教程

編輯Tag賺U幣
教程Tag:暫無Tag,歡迎添加,賺取U幣!
為何需要升級套件

  這真是一個很有趣的課題,為何需要升級套件?如果我的機(jī)器運(yùn)作的好好的,那么我干嘛需要升級?通常我們升級的原因主要有三個:

  ·需要新的功能,但舊有主機(jī)并沒有,所以需要安裝新的套件;

  ·舊版本的套件上面可能有安全上的顧慮,所以需要更新到新版的套件;

  ·舊版的套件執(zhí)行效能不彰,或者執(zhí)行的能力不能讓管理者滿足。

  在上面的需求當(dāng)中,尤其需要注意的是第二點(diǎn),當(dāng)一個套件有安全上的顧慮時,千萬不要懷疑,趕緊更新套件吧!否則造成網(wǎng)路危機(jī),那可不是鬧著玩的?那么更新的方法有哪些呢?其實(shí),目前在 Linux 里面有相當(dāng)多的不同的更新套件的方式,包括了 Red Hat 發(fā)展的 RPM 與 up2date 的線上更新模式; Debian 這個 distribution 里頭使用的 dpkg 方法;Sun Unix 上面使用的 pkg 升級方式;目前越來越流行的 apt 線上更新模式;還有原始碼里頭最常使用的 Tarball 編譯方法等等,如果要一個一個說明的話那也太累人了?所以,這里我們以目前在 Mandrake, Red Hat, OpenLinux 等 Linux distributions 內(nèi)常見的 RPM 與 Tarball 的套件升級方式來進(jìn)行說明:

  ·RPM

  目前使用最廣泛的套件管理程式之一,利用資料庫管理的方式來進(jìn)行套件的安裝,具有相當(dāng)容易的操作介面,而且套件查詢驗(yàn)證的功能相當(dāng)強(qiáng)大,不過麻煩的地方在于他的屬性相依的問題;

  ·Tarball

  直接以原始碼( source code )經(jīng)過編譯后,進(jìn)行安裝。在安裝上面具有較大的靈活度,可以隨時更改使用者喜好的參數(shù)。但是需要其他的套件協(xié)助,例如 gcc compiler, kernel-header, make 套件等等,并且在反安裝上面具有一定程度的困難度;

  這兩種方法是各有優(yōu)缺點(diǎn)啦,我們這里想要來談一談 RPM 與 Tarball 的安裝方式了!

  RPM套件管理員:

  接下來我們先談?wù)撘幌聫V為流傳與使用的 RPM 套件管理員的相關(guān)使用方法喔!

  ·什么是 RPM 、 SRPM ?

  RPM 全名是『 RedHat Package Manager 』簡稱則為 RPM 啦!顧名思義,當(dāng)初這個套件管理的程式是由 Red Hat 這家公司發(fā)展出來的,但其實(shí)在很多的其他套件也有相類似的套件管理程式。不過由于 RPM 使用上很方便,所以就成了目前最熱門的套件管理程式啦!那么什么是 RPM 呢?說的簡單一點(diǎn), RPM 是以一種資料庫記錄的方式來將你所需要的套件安裝到你的 Linux 主機(jī)的一套管理程式。他最大的特點(diǎn)就是將您要安裝的套件先包裝好了,透過包裝好的套件里頭預(yù)設(shè)的資料庫記錄,記錄這個套件要安裝的時候必須要的相依屬性模組(就是你的 Linux 主機(jī)需要先存在的幾個必須的套件),當(dāng)安裝在你的 Linux 主機(jī)時, RPM 會先依照套件里頭的紀(jì)錄資料查詢 Linux 主機(jī)的相依屬性套件是否滿足,若滿足則予以安裝,若不滿足則不予安裝。那么安裝的時候就將該套件的資訊整個寫入 RPM 的資料庫中,以便未來的查詢、驗(yàn)證與反安裝!這樣一來的優(yōu)點(diǎn)是:

  1.由于已經(jīng)編譯完成并且打包完畢,所以安裝上很方便;

  2.由于套件的資訊都已經(jīng)記錄在 Linux 主機(jī)的資料庫上,很方便查詢、升級與反安裝;

  但是這也造成很大的困擾,由于 RPM 程式是已經(jīng)包裝好的資料,也就是說,里面的資料已經(jīng)都『編譯完成』了!所以,安裝的時候一定需要當(dāng)初安裝時的主機(jī)環(huán)境才能安裝,也就是說,當(dāng)初建立這個套件的安裝環(huán)境必須也要在你的主機(jī)上面出現(xiàn)才行!例如 rp-pppoe 這個 ADSL 撥接套件,他必須要在 ppp 這個套件存在的環(huán)境下才能進(jìn)行安裝!如果你的主機(jī)并沒有 ppp 這個套件,那么很抱歉,除非您先安裝 ppp 否則 rp-pppoe 就是不讓你安裝的(當(dāng)然您可以強(qiáng)制安裝,但是通常都會有點(diǎn)問題發(fā)生就是了!)。所以,通常不同的 distribution 所釋出的 RPM 檔案,并不能用在其他的 distribution 里面,舉例來說, Red Hat 釋出的 RPM 檔案,通常無法直接在 Mandrake 上面進(jìn)行安裝的,更有甚者,不同版本之間也無法互通,例如 Mandrake 9.0 的 RPM 檔案就無法直接套用在 8.2 上面!因此,這樣可以發(fā)現(xiàn)他的缺點(diǎn)是:

  3.安裝的環(huán)境必須與打包時的環(huán)境需求一致或相當(dāng);

  4.需要滿足套件的相依屬性需求;

  5.反安裝時需要特別小心,最底層的套件不可先移除,否則可能造成整個系統(tǒng)的問題!

  那怎么辦?呵呵!還好,還有 SRPM 這個東西! SRPM 是什么呢?他也是一種 RPM 啦!但是由于里面連同當(dāng)初編譯之前的原始碼都在里頭,所以可以進(jìn)行重新編譯的動作。通常 SRPM 的附檔名是 ****.src.rpm 這一種檔案格式。由于 SRPM 包含了原始碼及參數(shù)設(shè)定檔案,所以在安裝之前則必須重新的編譯建立起包裝的資訊檔案套件才行!當(dāng)然啰,如果在編譯的過程中發(fā)生了問題,也可以藉由里頭的原始碼更動來修正問題的所在呢!所以說, RPM 與 SRPM 最大的差異就是在于有沒有包含原始碼的程式啦!

  ·什么是 i386, i586, i686, noarch

  好啦!現(xiàn)在我們已經(jīng)知道 RPM 與 SRPM 的格式了,分別為:

  xxxxxxxxx.rpm  <==RPM 的格式,已經(jīng)包裝完成的 rpm 檔案; xxxxx.src.rpm  <==SRPM的格式,包含為編譯的原始碼資訊。

  ·

  OK!那么 rpm 檔案有沒有什么版本或者是套件名稱的稱呼呢?有的,你可以這樣來看待一個 rpm 的檔案,例如 rp-pppoe-2.6-5.i386.rpm

  rp-pppoe - 2.6 - 5 . i386 .rpm 第一個部分是套件名稱這是套件的版本資訊 這是釋出版本的次數(shù) 這是適合的硬體平臺附檔名而已

  這樣子可以很清楚的發(fā)現(xiàn)該套件的名稱、版本資訊、打包次數(shù)與操作的硬體平臺!好了,來談一談每個不同的地方吧:

  o套件名稱:當(dāng)然就是每一個套件的名稱了!

  o版本資訊:每一次更新版本就需要有一個版本的資訊,否則如何知道這一版是新是舊?這里通常又分為主版本跟次版本,反正版本很多啦!

  o釋出版本次數(shù):也就是編譯的次數(shù)啦!那么為何需要重復(fù)的編譯呢?這是由于同一版的套件中,可能由于有某些 bug 或者是安全上的顧慮,所以必須要重新設(shè)定當(dāng)初打包時候的設(shè)定參數(shù),設(shè)定完成之后重新編譯并打包成 RPM 檔案!因此就有不同的打包數(shù)出現(xiàn)了!

  o操作硬體平臺:這是個很好玩的地方,由于 RPM 可以適用在不同的操作平臺上,但是由于不同的平臺設(shè)定的參數(shù)還是有所差異性!所以就有所謂的 i386, i586, i686 與 noarch 等的檔案名稱出現(xiàn)了!

  §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 的檔案可以在任何的機(jī)器上面安裝,不論是 586 或者是 686 的機(jī)器,但是 i386 則不一定可以使用于 586 或者是 686 的硬體上面,另外,在 686 的機(jī)器上使用 i686 的檔案會比使用 i386 的檔案在執(zhí)行上,效能可能比較好一些!無論如何,使用 i386 應(yīng)該就是比較沒有問題的啦!另外,由于不同的 distirbution 會有不同的環(huán)境與函式庫,所以在 i386 之后也有可能會額外再加上該套件的簡寫!

  好了!接下來我們來談一談安裝的時候所需要使用到的目錄!

  ·SRPM 與 RPM 工作時候所需要的安裝目錄

  SRPM 的編譯過程:

  剛剛提到 SRPM 里頭含有的是未經(jīng)編譯的原始碼,所以我們需要將 SRPM 進(jìn)行編譯打包的動作!那么編譯是在哪里進(jìn)行呢?由于編譯的時候會將原始碼解壓縮出來,并且將附有的參數(shù)控制選項(xiàng)也同時的解開,所以就有一些資料會出現(xiàn)了,那么這些資料放在哪里呢?你可以到你的 /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:這個目錄當(dāng)中放置的是該套件的設(shè)定檔,例如這個套件的資訊參數(shù)、設(shè)定項(xiàng)目等等都放置在這里;

  o/usr/src/RPM/SOURCE:這個目錄當(dāng)中放置的是該套件的原始檔(*.tar.gz的檔案)以及 config 這個設(shè)定檔;

  o/usr/src/RPM/BUILD:在編譯的過程中,有些暫存的資料都會放置在這個目錄當(dāng)中;

  o/usr/src/RPM/RPMS:經(jīng)過編譯之后,并且順利的編譯成功之后,將打包完成的檔案放置在這個目錄當(dāng)中。里頭有包含了 i386, i586, i686, noarch.... 等等的次目錄。

  此外,在編譯的過程當(dāng)中,可能會發(fā)生不明的錯誤,或者是設(shè)定的錯誤,這個時候就會在 /tmp 底下產(chǎn)生一個相對應(yīng)的錯誤檔,您可以根據(jù)該錯誤檔進(jìn)行除錯的工作呢!等到所有的問題都解決之后,也編譯成功了,那么剛剛解壓縮之后的檔案,就是在 /usr/src/RPM/SPEC, SOURCE, BUILD 等等的檔案都會被殺掉,而只剩下放置在 /usr/src/RPM/RPMS 底下的檔案了!

  RPM 的安裝過程:

  RPM 在安裝的時候,會先去讀取 套件 內(nèi)的設(shè)定參數(shù)內(nèi)容,就是剛剛我們在 /usr/src/RPM/SPEC 的相關(guān)資訊啦!然后將該資料用來比對 Linux 系統(tǒng)的環(huán)境,這些環(huán)境包括了這個欲安裝的套件的前驅(qū)套件,例如目前 postfix 這個 e-mail 套件當(dāng)中,大都支援了cyrus-sasl 這個套件的身份認(rèn)證功能,所以,要安裝 postfix 就必需先安裝 cyrus-sasl 這個套件,否則 postfix 就不讓你安裝了!還有類似版本的資訊等等,這些都是 RPM 環(huán)境的要求,如果環(huán)境相符就予以安裝,如果不符就會顯示出不符合的內(nèi)容所在!等到安裝完畢之后, rpm 就會將套件的資訊寫入:/var/lib/rpm 這個目錄中去!所以,往后您在進(jìn)行查詢的時候或者是預(yù)計要升級的時候,相關(guān)的資訊就會由 /var/lib/rpm 這個目錄的內(nèi)容資料來提供啰!此外,在安裝 RPM 的套件時,這些套件通常會使用到底下的目錄:

  o /etc 一些設(shè)定檔放置的目錄,例如 /etc/samba

  o /usr/bin 一些可執(zhí)行檔案

  o /usr/lib 一些程式使用的動態(tài)函式庫

  o /usr/share/doc 一些基本的軟體使用手冊與說明檔

  o /usr/share/man 一些 man page 檔案

  底下我們先針對 RPM 的相關(guān)指令來進(jìn)行說明啰!

  ·RPM 的指令使用:安裝、升級與更新、查詢、驗(yàn)證、反安裝與重建資料庫

  RPM 提供了『安裝』、『升級與更新』、『查詢』、『驗(yàn)證』、『反安裝與重建資料庫』等功能,底下我們一個一個來說明吧!

  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:這個參數(shù)會將后面的 SRPM 進(jìn)行『編譯』與『打包』的動作,但是并沒有安裝,當(dāng)您使用 --rebuild 的時候,最后通常會發(fā)現(xiàn)一行字體:

  Wrote: /usr/src/RPM/RPMS/i386/rp-pppoe-2.6-5.i386.rpm

  這個就是編譯完成的 RPM 檔案啰!那么這個檔案就可以用來安裝啦!安裝的時候請加絕對路徑來安裝即可!

  §--recompile:這個動作會直接的『編譯』『打包』并且『安裝』啰!請注意, rebuild 僅『編譯并打包』而已,而 recompile 不但進(jìn)行編譯跟打包,還同時進(jìn)行『安裝』了!

  §-ivh:就是用來安裝 RPM 的參數(shù)而在這個參數(shù)之下,由于會有一些『相依屬性』的問題,或者是曾經(jīng)安裝過的檔案的問題,所以您可以再加以下的參數(shù)來『強(qiáng)制』安裝:

  §--nodeps:不考慮相依屬性的關(guān)系,給他強(qiáng)制的安裝下去;

  §--replacepkgs:如果這個套件之前安裝過,您想要覆蓋這個套件,那么不需要反安裝后再安裝,可以直接加上 --replacepkgs 強(qiáng)制覆蓋;

  §--replacefiles:那么如果這個套件安裝完畢之后,曾經(jīng)被你修改過檔案呢?就是安裝過程中會出現(xiàn)『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 ,偏偏您的機(jī)器上尚無這一個套件,那么很抱歉,該套件并不會被安裝在您的 Linux 主機(jī)上面,所以請重新以 ivh 來安裝吧!

  [root @test /root]# rpm -Uvh rp-pppoe-2.6-5.i386.rpm [root @test /root]# rpm -Fvh *.rpm <==所有在你 Linux 主機(jī)上面安裝過的套件才升級

  注意的是, Uvh 是升級您所寫入的套件,至于 Fvh 則是『僅升級在您的系統(tǒng)里面存在的套件』,所以有的朋友在大量的進(jìn)行套件版本修補(bǔ)的時候,他們都是這樣做的:

  1.先到各發(fā)展商的 errata 網(wǎng)站上捉下來最新的 i386 檔案;

  2.使用 -Fvh 來將您的系統(tǒng)內(nèi)曾安裝過的套件進(jìn)行修補(bǔ)與升級!(真是方便呀!)

  o 查詢:

  查詢也是 RPM 的重要功能之一,因?yàn)樗峁┝诉@個套件的版本、用途等資訊,是相當(dāng)有用的!那么如何查詢呢?底下列出只要的查詢參數(shù):

  1. 從系統(tǒng)查詢(由 /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 這個套件的詳細(xì)資訊 [root @test /root]# rpm -ql rp-pppoe <==列出 rp-pppoe 這個套件安裝的檔案與路徑; [root @test /root]# rpm -qf /etc/rc.d/init.d/pppoe <==查詢 pppoe 這個檔案屬于哪一個套件? 2. 由檔案查詢檔案的內(nèi)容 [root @test /root]# rpm -qpi rp-pppoe-2.6-5.src.rpm <==查詢這個套件的詳細(xì)資訊; [root @test /root]# rpm -qpl rp-pppoe-2.6-5.src.rpm <== 查詢這個套件里面有多少的檔案內(nèi)容存在

  o

  § 查詢套件:查詢安裝過的套件可以使用 -q 即可知道他的套件版本,但是如果忘記套件的全名,那么可以使用

  rpm -qa | grep pakagename 來選擇出適當(dāng)?shù)奶准?

  若使用 -qi 則可以了解這個套件的主要資訊!

  § 尋找套件檔案:常常我們忘記一個套件內(nèi)容含有的檔案時,可以使用 -ql 來查詢該套件,會列出相當(dāng)多的檔案呦!

  § 由檔案尋找套件:這是最長發(fā)生的問題,就是您『誤砍』了某個檔案,偏偏不知道他是哪一個套件的,呵呵!那么你可以請跟你同樣系統(tǒng)的朋友,使用 -qf 來查詢該檔案所屬的套件,然后重新安裝該套件就可以就回來啦!

  o 驗(yàn)證:

  驗(yàn)證的功能主要在于提供系統(tǒng)管理員一個有用的管理機(jī)制!作用的方式是『使用 /var/lib/rpm 底下的資料庫內(nèi)容來比對目前 Linux 系統(tǒng)的環(huán)境下的所有套件檔案』也就是說,當(dāng)您有資料不小心遺失,或者是因?yàn)槟`殺了某個套件的檔案,或者是不小心不知道修改到某一個套件的檔案內(nèi)容,就用這個簡單的方法來驗(yàn)證一下原本的檔案系統(tǒng)吧!好讓您了解這一陣子到底是修改到哪些檔案資料了!

  [root @test /root]# rpm -V rp-pppoe <==單純檢查 rp-pppoe 這個已安裝套件的檔案內(nèi)容與原先是否相同 [root @test /root]# rpm -Va <==檢查所有的 /var/lib/rpm 底下的資料庫與 Linux 系統(tǒng)下是否相同的檔案! 范例: [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 在檔案名稱前面的參數(shù)說明 S :file Size differs(檔案的容量大小已被改變) M :Mode differs (includes permissions and file type)(檔案的類型或檔案的屬性,如是否可執(zhí)行等參數(shù)已被改變) 5 :MD5 sum differs(MD5 這一種加密防駭?shù)膶傩砸驯桓淖? 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 <==這些檔案有哪些已經(jīng)被修改了? S.5....T c /etc/crontab

  例如上面的范例中,我們知道了 crontabs 有五個檔案或目錄,其中,如果驗(yàn)證一下的話,就會發(fā)現(xiàn) /etc/crotab 已經(jīng)被改過了?那么如果該檔案的變更是『預(yù)期中的』,那么就沒有什么大問題,但是如果該檔案是『非預(yù)期的』,那么是否被入侵了呢?呵呵!得注意注意啰!

  o 反安裝與重建資料庫:

  反安裝就是將套件解除安裝啦!要注意的是,『解安裝的過程一定要由最上層往下解除』,以 rp-pppoe 為例,這一個套件主要是依據(jù) ppp 這個套件來安裝的,所以當(dāng)您要解除 ppp 的時候,就必須要先解除 rp-pppoe 才行!否則就會發(fā)生結(jié)構(gòu)上的問題啦!這個可以由建筑物來說明,如果你要拆除五、六樓,那么當(dāng)然要由六樓拆起,否則拆了第五樓,那么上面的樓層難道會懸空?

  那么重建資料庫呢?由于我們會一直在修改一些檔案內(nèi)容,例如 /etc/xinetd.d 里頭的參數(shù)檔案,加上可能自系統(tǒng)操作的過程中新增、移除等等的動作,導(dǎo)致系統(tǒng)的資料庫有點(diǎn)亂,這個時候可以使用 --rebuilddb 來重建一下 rpm 的資料庫!這兩個方法的參數(shù)如下啰

  [root @test /root]# rpm -e re-pppoe <==解安裝 rp-pppoe [root @test /root]# rpm --rebuilddb <==重建資料庫

Tarball 套件管理員:

  還記得我們使用過的打包指令 tar 嗎?使用 tar 并且以 gzip 進(jìn)行壓縮的檔案,就稱為 Tarball 啦!這個是最原始的原始碼檔案喔!底下談一談他啰!

  ·什么是 Tarball ( source code )

  其實(shí) tarball 就是以 *.tar.gz 壓縮之后的 binary 原始檔啦!還記得 tar 怎么使用嗎?記得回去第二篇瞧一瞧去!由于軟體開發(fā)商為了適應(yīng)各種工作平臺,所以通常他們都會將整個軟體以較龐大的原始檔案創(chuàng)建下來,里頭除了(1)最重要的原始碼之外,另外包含了(2)針對各個不同的平臺編譯與操作參數(shù)而訂定的偵測與參數(shù)設(shè)定檔,然后將這些東西以 tar 這個匯整壓縮軟體將整個軟體下的目錄壓縮成一個檔案,由于是經(jīng)過類似打包壓縮的動作,嘿嘿!那就是所謂的 tarball 啰!因此,當(dāng)您看到一個 tarball 的檔案,不要懷疑,里頭通常是包含了原始碼的!

  剛剛說 tarball 可以適應(yīng)在各個不同的平臺上面,那么他是怎么辦到的呢?因?yàn)楦鱾平臺的操作環(huán)境都不相同吶!嗯!為了要讓使用者便于安裝,所以通常軟體開發(fā)者會寫一支小 scripts 來偵測使用者的系統(tǒng),以及偵測該軟體所需要的前驅(qū)軟體是否存在你的 Linux 環(huán)境中,以便利于后續(xù)的編譯過程與安裝步驟!利用這樣的一個 script 幾乎就可以完整的建立起基本的參數(shù)設(shè)定檔了。基本上,如果前驅(qū)軟體都已經(jīng)安裝完畢,那么使用 tarball 幾乎『一定可以安裝成功』的,而且安裝上面也不麻煩,大多只要執(zhí)行三~四個步驟即可安裝完畢!而且,使用者『可以自行設(shè)定安裝的路徑』,以便于管理。

  不過, tarball 在另一方面有個相當(dāng)嚴(yán)重的困擾,那就是反安裝的部分。在 RPM 上面的反安裝是蠻簡單的一件事,只要克服了屬性相依的問題之后,要反安裝只要下達(dá) rpm –e package 即可!但是 tarball 可沒有這么簡單呢!因?yàn)樗]有紀(jì)錄當(dāng)初安裝檔案的資料庫,所以,要反安裝的時候,可能需要一個檔案一個檔案的手動去除?嗄?這么麻煩?那么有沒有什么方法可以比較容易管理呢?有呀!就是利用安裝在特定的目錄下的方式來管理,就會比較清楚一點(diǎn)!而且也會比較容易未來進(jìn)行主機(jī)的移交作業(yè)?通常我們會給您這樣的建議:

  1.最好將 tarball 的原始資料解壓縮到 /usr/local/src 當(dāng)中;

  2.安裝時,最好安裝到 /usr/local 這個預(yù)設(shè)路徑下;

  3. 考慮未來的反安裝步驟,最好可以將每個套件單獨(dú)的安裝在 /usr/local 底下,例如安裝 rp-pppoe-2.6.tar.gz 時,則可以指定該套件需要安裝于 /usr/local/rp-pppoe 當(dāng)中,如此一來,如果該套件會將所有的資料都寫入 /usr/local/rp-pppoe 當(dāng)中,因此,未來如果要移除該套件,只要將該目錄刪除即可視為成功的移除了!

  4.不過單獨(dú)安裝某個套件在某一特定路徑下的作法,會導(dǎo)致當(dāng)有 man page 的時候,使用預(yù)設(shè)的 MANPATH 會找不到相關(guān)的說明檔案內(nèi)容。這個時候就必須要將 man page 的路徑加到 /etc/man.config 檔案中了!否則使用 man 也查詢不到指令的使用方法的。以上面的例子為例,如果是安裝了 /usr/local/rp-pppoe 當(dāng)中,通常 man page 會放在 /usr/local/rp-pppoe/man 當(dāng)中,所以,您就必需要在 /etc/man.config 里面差不多 40~50 行左右的地方,加入底下這一行:

  MANPATH /usr/local/rp-pppoe/man

  這樣就可以使用 man 來查詢資料啰!

  ·

  ·

  ·Tarball 需要的基礎(chǔ)套件

  雖然 Tarball 在安裝上面可以說『相當(dāng)?shù)暮唵巍唬驗(yàn)橹灰樦忾_壓縮之后目錄里面的 README 或 INSTALL 就可以安裝成功了!但是仍然有部分的困擾,例如:如果常常上 BBS 或者是新聞群組討論區(qū)的朋友,應(yīng)該不難發(fā)現(xiàn)這個發(fā)問『我在執(zhí)行某個程式的偵測檔案時,他都會告訴我沒有 gcc 這個套件,這是怎么回事?』還有:『我沒有辦法使用 make 耶!這是什么問題?』呵呵!必須要告訴大家的是,使用 tarball 的安裝時,『一定』需要幾個物件才行!這些物件在 Mandrake 或者是其他的 distribution 時,『預(yù)設(shè)都是不選擇的』,所以在安裝 Linux 的時候,請?zhí)貏e留意選擇的類別呢!底下這些東西都是必需的:

  1.需要 Kernel sources files:常常一些 Tarball 在安裝時,會使用到 Kernel 的原始檔案,亦即在 /usr/src/linux 這個目錄底下的檔案,而該目錄是需要安裝或者編譯過核心才會存在的目錄!這個問題最常發(fā)生在『驅(qū)動程式的安裝與編譯』方面。所以當(dāng)您在安裝 Linux 的時候沒有選擇 Kernel source 或者在之后沒有編譯核心時,呵呵!那么可能就沒有辦法安裝了!

  2.需要 make 及 autoconfig 等套件:需要另外注意的就是,我們還需要 make 這個套件才行!除此之外,還有 autoconfig 等等的套件也需要安裝才行!這兩個東西可以讓參數(shù)設(shè)定檔( 通常就是 Makefile 這個檔案 )順利的被執(zhí)行。

  3.需要 gcc 或 cc 等編譯軟體 ( compiler ):如果沒有編譯的軟體,那么自然也就無法將原始程式碼編譯成可以執(zhí)行的檔案啦!所以至少要有一種編譯器才行!在 GNU 架構(gòu)的 Linux 上面,我們通常使用的是 gcc 這個加強(qiáng)功能的 C 語言編譯器啦!請注意:除了 gcc 之外,連同上面的 make 等等的套件,幾乎都在安裝 Linux 的時候的那個 Software Development 咚咚里頭!也就是說,若是您當(dāng)初 安裝的時候,選擇的是我建議的那種安裝方式的話,那么您的 tarball 安裝應(yīng)該問題不大,若是沒有安裝的話,那么肯定很多的套件是無法編譯成功的!這個時候只好拿出您的原版光碟,一個一個 RPM 套件加入您的 Linux 系統(tǒng)當(dāng)中吧! @_@

  4.特別留意安裝時候的選擇工具:由于在安裝的時候『預(yù)設(shè)選項(xiàng)并沒有將 Kernel Development 及 Software Development 加入安裝的行列』,所以您如果選擇預(yù)設(shè)選項(xiàng)的話,呵呵!那么使用 tarball 的工具就會顯的力不從心!這一點(diǎn)還請?zhí)貏e特別留意呢!

  ·一般安裝步驟:

  基本上, tarball 的安裝主要就是:

  1.將 tarball 在 /usr/local/src 解壓縮;

  2.在軟體解壓縮的路徑下建立 Makefile 這個參數(shù)設(shè)定檔案;

  3.以 make 這個程式并使用該目錄下的 Makefile 做為他的參數(shù)設(shè)定檔,來進(jìn)行 make (編譯或其他) 的動作;

  4.以 make 這個程式,并以 Makefile 這個參數(shù)設(shè)定檔,依據(jù) install 項(xiàng)目的指定來安裝到正確的路徑!

  此外,通常在每個軟體的 tarball 中,都會附上 INSTALL 或者是 README 這種檔名的說明檔,這些說明檔請『務(wù)必詳細(xì)閱讀』過一遍,通常這些檔案會記錄這個軟體的安裝要求、軟體的工作項(xiàng)目、與軟體的安裝參數(shù)設(shè)定及技巧等,只要仔細(xì)的閱讀完這些檔案,基本上,要安裝好 tarball 的檔案,都不會有什么大問題啰?那么那個 make 在干嘛?一般而言, make 會依據(jù) Makefile 這個檔案的內(nèi)容,去執(zhí)行清除目標(biāo)檔(object file)或者是編譯或者是安裝的步驟,對于安裝 source code 的人來說,這個 make 是相當(dāng)重要的!在 Makefile 這個檔案中,會有一些不同的步驟應(yīng)該要進(jìn)行的工作項(xiàng)目,例如 clean, install, compile 等等,而如果要執(zhí)行清除的步驟,就是 make clean ,安裝就下達(dá) make install ,亦即 make 后面接欲進(jìn)行的工作,那么 make 這個工具就會依據(jù) Makefile 這個檔名的檔案去讀取相關(guān)的步驟訊息,而進(jìn)行該有的動作!

  OK!我們底下約略提一下大部分的 tarball 軟體之安裝的指令下達(dá)方式:

  5../configure :這個步驟就是在建立 Makefile 這的檔案啰!通常程式開發(fā)者會寫一支 scripts 來檢查您的 Linux 系統(tǒng)、相關(guān)的套件屬性等等,這個步驟相當(dāng)?shù)闹匾驗(yàn)槲磥砟陌惭b資訊都是這一步驟內(nèi)完成的!另外,這個步驟的相關(guān)資訊應(yīng)該要參考一下該目錄下的 README 或 INSTALL 相關(guān)的檔案!!基本上,這個步驟完成之后會建立(或修改)一個 Makefile ,這就是參數(shù)檔啦!

  6.make clean:make 會讀取 Makefile 中關(guān)于 clean 的工作。這個步驟不一定會有,但是希望執(zhí)行一下!為什么呢?因?yàn)樵谶M(jìn)行編譯的時候,會產(chǎn)生一些 *.o 的檔案,例如有個 abc.c 的原始碼,經(jīng)過編譯后會變成 abc.o 的檔案!我們稱這些檔案為 object file ,這些檔案如果之前已經(jīng)編譯過并留下來的話,那么這次再編譯的時候,就不會編譯該檔案,然而由于我們可能已經(jīng)修改了部分的參數(shù),因此該檔案的編譯結(jié)果事實(shí)上應(yīng)該會有所不同!因此,為了避免前一次留下來的資料可能影響到這次編譯的結(jié)果,所以通常可以進(jìn)行一下這個步驟啰!

  7.make:make 會依據(jù) Makefile 當(dāng)中的預(yù)設(shè)工作進(jìn)行編譯的行為!編譯的工作主要是進(jìn)行 gcc 來將原始碼編譯成為可以被執(zhí)行的 object files ,但是這些 object files 通常還需要一些函式庫之類的 link 后,才能產(chǎn)生一個完整的執(zhí)行檔!使用 make 就是要將原始碼編譯成為可以被執(zhí)行的可執(zhí)行檔,而這個可執(zhí)行檔會放置在目前所在的目錄之下,尚未被安裝到預(yù)定安裝的目錄中;

  8.make install:通常這就是最后的安裝步驟了,make 會依據(jù) Makefile 這個檔案里面關(guān)于 install 的項(xiàng)目,將上一個步驟所編譯完成的資料給他安裝到預(yù)定的目錄中,就完成安裝啦!

  9. 特別留意:請注意,上面的步驟是一步一步來進(jìn)行的,而其中只要一個步驟無法成功,那么后續(xù)的步驟就完全沒有辦法進(jìn)行的!因此,要確定每一的步驟都是成功的才可以!舉個例子來說,萬一今天你在 ./configure 就不成功了,那么就表示 Makefile 無法被建立起來,要知道,后面的步驟都是根據(jù) Makefile 來進(jìn)行的,既然無法建立 Makefile ,后續(xù)的步驟當(dāng)然無法成功啰!另外,如果在 make 無法成功的話,那就表示原始檔案無法被編譯成可執(zhí)行檔,那么 make install 主要是將編譯完成的檔案給他安裝下去的,既然都沒有成功的執(zhí)行檔了,怎么進(jìn)行安裝?所以啰,要每一個步驟都正確無誤才能往下繼續(xù)做!此外,如果安裝成功,并且是安裝在獨(dú)立的一個目錄中,例如 /usr/local/packages 這個目錄中好了,那么您就必需手動的將這個套件的 man page 給他放到 /etc/man.config 里面去,設(shè)定的方法如前面提到的一般所示。

  ·Tarball 的移除與升級:

  再來就要談到惱人的 tarball 的移除跟升級了?Tarball的移除難易度跟(1)當(dāng)初設(shè)定參數(shù)檔時候的安裝目錄與(2)這個套件本身要求的檔案放置目錄有關(guān)。如果我們以 apache 這個軟體來說明的話( 您的系統(tǒng)不見得有裝 ),那么如果您以 RPM 的安裝方式來安裝時,會發(fā)現(xiàn)他的檔案放在哪里呢?大多是放在:

  o /etc/httpd

  o /usr/lib

  o /usr/bin

  o /usr/share/man

  我們會發(fā)現(xiàn)他大致上是擺在 etc, lib, man, bin 等目錄當(dāng)中,分別代表『設(shè)定、函式庫、線上說明檔、執(zhí)行檔』,一個套件通常會將他的內(nèi)容分為這四個目錄來放置,好了,那么你是以 tarball 來安裝時呢?如果是放在預(yù)設(shè)的 /usr/local 里面,由于 /usr/local 原本就預(yù)設(shè)這幾個目錄了,所以你的資料就會被放在:

  o /usr/local/etc

  o /usr/local/bin

  o /usr/local/lib

  o /usr/local/man

  但是如果你每個套件都選擇在這個預(yù)設(shè)的路徑下安裝的話,那么所有的套件的檔案都將放置在這四個目錄當(dāng)中,因此,如果你都安裝在這個目錄下的話,那么未來在想要升級或移除的時候,就會比較難以追查檔案的來源啰?而如果您在安裝的時候選擇的是單獨(dú)的目錄,例如 /usr/local/apache 的話,那么您的檔案目錄就會變成:

  /usr/local/apache/etc

  /usr/local/apache/bin

  /usr/local/apache/lib

  /usr/local/apache/man

  呵呵!自己的檔案都在同一個目錄之下,那么要移除就簡單的多了!只要將該目錄移除即可視為該套件已經(jīng)被移除啰?當(dāng)然啰,實(shí)際安裝的時候還是得視該軟體的 Makefile 里頭的 install 資訊才能知道到底他的安裝情況為何的?

  移除的方法是這樣,那么升級呢?唉?升級有的時候也是很困擾啦!怎么說呢?我們還是以 apache 來說明好了,如果您安裝的時候是使用 PHP + Apache + MySQL 的方式來安裝的,那么每個套件在安裝的時候『都有一定的順序與程序!』因?yàn)樗麄內(nèi)咧g具有相關(guān)性,所以安裝時必需要三者同時考慮到他們的函式庫與相關(guān)的編譯參數(shù)。那么如果今天我只要升級 PHP 呢?有的時候因?yàn)橹挥猩婕皠討B(tài)函式庫的升級,那么我只要升級 PHP 即可!其他的部分或許影響不大。但是如果今天 PHP 需要重新編譯的模組比較多,那么可能會連帶的,連 Apache 這個程式也需要重新編譯過才行?阿!真是有點(diǎn)給他頭痛的?沒辦法啦!使用 tarball 確實(shí)有他的優(yōu)點(diǎn)啦,但是在這方面,確實(shí)也有他一定的傷腦筋程度? @_@

要選擇 RPM 還是 Tarball?

  優(yōu)先選擇 RPM:

  這一直是個有趣的問題:『如果我要升級的話,或者是全新安裝一個新的套件,那么該選擇 RPM 還是 Tarball 來安裝呢?』!基本上,如果有 RPM 可以提供給您的 distribution 來安裝,并且沒有嚴(yán)重的相依屬性的問題時,呵呵!選擇 RPM 來安裝會是一個比較好的解決方案, Why ?這是由于剛剛上面就提到的 RPM 的好處 啦!可以具有檔案與資料均有紀(jì)錄的優(yōu)點(diǎn),這就是上面提到的 /var/lib/rpm 這個目錄里面的資料庫,個記錄可以讓你在管理上更為便利,包括上面提到的 RPM 的升級、安裝、驗(yàn)證與移除等等。尤其是在查詢上面!可以讓你在管理你的系統(tǒng)上面更為便利。但是 RPM 也不是沒有缺點(diǎn)的,包括最為大家所抱怨連連的『屬性相依』的問題,每一個不同版本之間,就必須要以不同的 RPM 檔案來安裝!此外,如果要升級『某一個套件』而已時,通常還需要連帶其他的套件也必須要一起升級才行,否則會有問題!此外,當(dāng)一個套件經(jīng)過了『大幅度的修改』之后,通常舊的 RPM 與新的 RPM 之間已經(jīng)幾乎無法『完全相容』時,呵呵!那么升級或者是移除的手續(xù)可是會累壞人的!例如最近朋友們常常問到的 Apache 1.3.xx 與 2.0.xx 的版本升級問題!由于架構(gòu)上面差異性太大,加上版本屬性相依問題很難得到一個完滿的解決方案,這個時候 RPM 就不那么合適了。(除非您要一個一個的將 Apache 移除,連同其相依的套件,然后再將 Apache 一個一個的安裝,包括新套件的相依套件! ^_^ .....我是不會這么做的啦!)

  簡易方法:

  所以這個時候 Tarball 的方式就特別適合您的安裝了!這是因?yàn)?Tarball 可以自行設(shè)定編譯時的參數(shù),此外,也可以自行設(shè)定『安裝路徑』,相當(dāng)?shù)倪m合于想要安裝『多個不同版本的同一個套件』的情況!這是怎么說呢?!由于 RPM 必須要配合系統(tǒng)里面其他的相依屬性的套件,所以基本上,他的安裝路徑(就是每個檔案的放置路徑)理論上是放死的,就是不能隨意的改變他的安裝路徑,因此,當(dāng)有兩個不同版本的相同套件想要測試的時候,大概一定就得將原先的版本移除之后,才能安裝使用先的版本啰!(此外,由于相依的套件幾乎都已經(jīng)包含在 tarball 當(dāng)中了,所以安裝上面其實(shí)并不難啦!)

  然而 tarball 可不是這樣的!你可以自行編譯并且安裝在不同的路徑,只要在啟動的時候啟動適當(dāng)?shù)陌姹荆敲床煌姹镜奶准梢酝瑫r的存在于一個系統(tǒng)當(dāng)中,而且可以透過選擇啟動的檔案來啟動不同的版本。當(dāng)然啰!你也可以讓 tarball 的安裝與 RPM 的安裝同時存在于一個系統(tǒng)當(dāng)中,但是需要特別留意的是,你在啟動該套件的時候,千萬記得你的啟動路徑!免得啟動到了錯誤的版本了!呵呵!(這也是一個系統(tǒng)存在不同多個版本的套件容易發(fā)生的錯誤!希望大家都能夠了解這個問題呢!)

  所以說,為了避免這種路徑上的錯誤困擾,基本上,我們都希望 Tarball 的安裝路徑可以設(shè)定在 Linux 原本就規(guī)劃要給大家安裝的路徑『 /usr/local 』這個路徑下!這樣可以省去相當(dāng)多尋找檔案的時間!而且在管理上面也會比較容易!呵呵!

  不過, Tarball 最麻煩的地方有幾點(diǎn):

  ·反安裝:

  Tarball 最麻煩的地方就在于他的『解安裝』了!相當(dāng)?shù)挠憛?如果是簡單的直接將所有的套件安裝在一個目錄下的話,例如 /usr/local/mrtg 時,那么解安裝還算簡單,就是將該路徑殺掉就 OK 啦!但是如果是類似 sendmail 這一種呢?他的路徑都是已經(jīng)放置死的(需要在 /etc/sendmail.cf、/etc/mail 底下)那么追蹤反安裝的路徑就很煩人;

  ·線上查詢:

  如果您的安裝路徑是在 /usr/local 底下的話,那么執(zhí)行檔會被放置到 /usr/local/bin ,或者是 /usr/local/sbin 底下,參數(shù)檔會放在 /usr/local/etc 底下,線上查詢檔案會放在 /usr/local/man 底下,所以在設(shè)定上面還有查詢上面還算簡單(路徑設(shè)定一下即可!),不過,如果你是將套件安裝在單獨(dú)的路徑下呢?例如 /usr/local/mrtg 底下,那么執(zhí)行檔變成了 /usr/local/mrtg/bin 底下,最麻煩的地方就是 man page (線上查詢)放置的地點(diǎn)會變成在 /usr/local/mrtg/man 底下了!糟糕!那么預(yù)設(shè)的 man page 路徑就找不到該說明檔啰!這個時候就必須要手動的將該路徑加入 /etc/man.conf 這個檔案中!而且執(zhí)行檔放置的路徑也沒有指定,可以經(jīng)由 (1)Link 的方式或者 (2)設(shè)定 PATH 環(huán)境變數(shù)的方式將該路徑加進(jìn)去啦!確實(shí)是比較麻煩的啦!

  所以說,RPM 與 Tarball 各有其優(yōu)缺點(diǎn),不過,如果有 RPM 的話,那么優(yōu)先權(quán)還是在于 RPM 安裝上面,畢竟管理上比較便利,但是如果套件的架構(gòu)差異性太大,或者是無法解決相依屬性的問題,那么與其花大把的時間與精力在解決屬性相依的問題上,還不如直接以 tarball 來安裝,輕松又愜意!

  函式庫資料: ldconfig, ldd,

  什么是函式庫呢?由于我們使用的 Linux 是一個相當(dāng)不算小的作業(yè)系統(tǒng),里頭的資料可是相當(dāng)多的,然而有些執(zhí)行程式所使用的系統(tǒng)資源都是相同的,例如登入的時候不論 ftp, ssh, telnet 都需要使用到 pam 模組,那么是不是所有的執(zhí)行程式都需要將 pam 的資料寫入程式當(dāng)中呢?當(dāng)然不需要了!因?yàn)橄到y(tǒng)本身就已經(jīng)有 pam 了呀!那么如何使用這些系統(tǒng)提供的資訊呢?呵呵!這個時候動態(tài)的函式庫就不可或缺了!同時,需要特別留意的是,有相當(dāng)多的函式庫都是『根據(jù) kernel 的版本來設(shè)定的』,所以不同版本的 kernel 最好不要隨意的互相更換呦!容易造成很多執(zhí)行程式無法使用其函式庫,而掛點(diǎn)的情況發(fā)生的!底下我們來談一談怎么獲得函式庫的資料!

  ·ldconfig

  [root @test /root]# ldconfig [-f conf] [-C cache] [-p] 參數(shù)說明: -f conf :使用 conf 作為 libarary 函式庫的取得,而不以 /etc/ld.so.conf 為預(yù)設(shè)值 -C cache:使用 cache 作為快取暫存的函式庫資料,而不以 /etc/ld.so.cache 為預(yù)設(shè)值 -p :列出目前有的所有函式庫資料內(nèi)容(在 /etc/ld.so.cache 內(nèi)的資料!) 范例: [root @test /root]# ldconfig -p 333 libs found in cache `/etc/ld.so.cache' libz.so.1 (libc6) => /usr/lib/libz.so.1 libz.so (libc6) => /usr/lib/libz.so libxsltbreakpoint.so.1 (libc6) => /usr/lib/libxsltbreakpoint.so.1 libxslt.so.1 (libc6) => /usr/lib/libxslt.so.1 libxrx.so.6 (libc6) => /usr/X11R6/lib/libxrx.so.6 libxrx.so (libc6) => /usr/X11R6/lib/libxrx.so ........ [root @test /root]# more /etc/ld.so.conf /usr/kerberos/lib /usr/X11R6/lib [root @test /root]# ldconfig <==以 /etc/ld.so.conf 的內(nèi)容進(jìn)行函式庫的重建( /etc/ld.so.cache )

  ·說明:

  系統(tǒng)預(yù)設(shè)的函式庫都是由 ldconfig 設(shè)定后寫入 /etc/ld.so.cache 當(dāng)中!然后供系統(tǒng)來讀取使用!那么您如何知道目前的函式庫有多少呢?呵呵!使用 ldconfig 就可以知道啦!以 ldconfig -p 可以列出 /etc/ld.so.cache 的內(nèi)容呢!那么 /etc/ld.so.conf 又是什么呢?!很簡單,那就是『目前你的系統(tǒng)中主要的函式庫放置的目錄』,以上式為例,則主要的 XFree86 函式庫放置在 /usr/X11R6/lib 當(dāng)中,另外還有常用的 kerberos 的函式庫也擺在其中!如果您的其他函式庫需要寫入系統(tǒng)中,讓系統(tǒng)可以很快的找到該函式庫而予以取用的話,那么將你所安裝的套件(通常是 tarball 的套件)所產(chǎn)生的 lib 目錄,給他寫到 /etc/ld.so.conf 這個檔案中,然后再以 ldconfig 重新建立 /etc/ld.so.cache 即可!

  ·ldd

  [root @test /root]# ldd [-vdr] [filename] 參數(shù)說明: -v :列出所有內(nèi)容資訊; -d :重新將資料有遺失的 link 點(diǎn)秀出來! -r :將 ELF 有關(guān)的錯誤內(nèi)容秀出來! 范例: [root @test /root]# cd /lib [root @test /lib]# ldd libdb.so libc.so.6 => /lib/libc.so.6 (0x400ae000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000) [root @test /lib]# ldd -v libdb.so libc.so.6 => /lib/libc.so.6 (0x400ae000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000) Version information: ./libdb.so: libc.so.6 (GLIBC_2.1.3) => /lib/libc.so.6 libc.so.6 (GLIBC_2.1) => /lib/libc.so.6 libc.so.6 (GLIBC_2.2) => /lib/libc.so.6 libc.so.6 (GLIBC_2.0) => /lib/libc.so.6 /lib/libc.so.6: ld-linux.so.2 (GLIBC_2.1.1) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_2.2.3) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_2.1) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_2.2) => /lib/ld-linux.so.2 ld-linux.so.2 (GLIBC_2.0) => /lib/ld-linux.so.2

  ·說明:

  ·如果您常常升級安裝 RPM 的套件時,應(yīng)該常常會發(fā)現(xiàn)那個『相依屬性』的問題吧!?沒錯!我們可以先以 ldd 來視察『相依函式庫』之間的相關(guān)性!以先取得了解!例如上面的例子中,我們檢查了 libc.so 這個在 /lib 當(dāng)中的函式庫,結(jié)果發(fā)現(xiàn)他其實(shí)還跟 libc.so.6 有關(guān)呢!也與 ld-linux.so.2 有關(guān)說!所以我們就需要來了解一下,那個檔案到底是什么套件的函式庫呀!?使用 -v 這個參數(shù)還可以得知該函式庫來自于哪一個套件!像上面的資料中,就可以得到該 libc.so.6 其實(shí)可以支援 GLIBC_2.1.1 等的版本!

  檢驗(yàn)軟體正確性

  在我們的 Linux 系統(tǒng)當(dāng)中,為了怕系統(tǒng)商( distribution )推出的檔案被修改過,因此都會有所謂的 MD5 的軟體指紋驗(yàn)證功能!例如在南臺灣最大的 ftp 學(xué)術(shù)網(wǎng)站

  中山大學(xué)的 ftp 網(wǎng)站里頭的 Red Hat 7.3 這個可開機(jī)光碟的完整套件,在該目錄底下,除了完整的的可開機(jī)光碟的映象檔(image)之外,還會附上一個檔名為 MD5SUM 的檔案,這個檔案的內(nèi)容有點(diǎn)像這樣:

  -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 c9a4d963a49e384e10dec9c2bd49ad73 valhalla-SRPMS-disc1.iso 41b03d068e84d2a17147aa27e704f79b valhalla-SRPMS-disc2.iso cb91810ce8173039fed24420407e4c59 valhalla-i386-disc1.iso ec1b813d32ffdc8edc2be261735d17de valhalla-i386-disc2.iso 5dc81ce523cfddf99b4d4d63e91bcaa7 valhalla-i386-disc3.iso -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: For info see http://www.gnupg.org iD8DBQE8z/oCIZGAzdtCpg4RAsMvAJ9+xOn4Pw1T0mp8zVT64cEDWuqqKwCfblTd 4Lw0SvJC+v/6JbGIxJWL7aA= =0xs+ -----END PGP SIGNATURE-----

  這說明的是,『在 valhalla-i386-disc1.iso 這個檔案中,有個 MD5SUM 的檔案指紋表,如果該檔案是原本開發(fā)廠商提供的檔案時(沒有被修改過!),則以 md5sum 這支程式進(jìn)行檢驗(yàn)時,會得到左邊的指紋表!』那有什么用呢?!呵呵!用途可大了,前一陣子不是常常發(fā)現(xiàn)有些免費(fèi)的軟體被利用來作為收集使用者的電子郵件、常上網(wǎng)站資料,及其他使用者私人的資訊嗎?嘿嘿!那就是利用軟體的特性來『偷』使用者的咚咚,那么萬一 Red Hat 提供的光碟映象檔(image)被下載之后,讓有心人士偷偷修改過,再轉(zhuǎn)到 Internet 上面流傳,那么你下載的這個檔案偏偏不是原廠提供的,呵呵!你能保證該檔案的內(nèi)容完全沒有問題嗎?!當(dāng)然不能對不對?!是的,這個時候就有 md5sum 這個檔案指紋的咚咚出現(xiàn)啦!說說他的用法吧!

  · md5sum

  [root @test /root]# md5sum [-bct] filename [root @test /root]# md5sum [--status|--warn] --check filename 參數(shù)說明: -b :使用 binary 的讀檔方式,預(yù)設(shè)為 Windows/DOS 檔案型態(tài)的讀取方式; -c :檢驗(yàn) md5sum 檔案指紋; -t :以文字型態(tài)來讀取 md5sum 的檔案指紋。 范例: [root @test /root]# md5sum -t logfile.sh <==使用文字型態(tài)來檢驗(yàn)檔案的 md5 2a6da1ba121c7a83496fa2afc3e522bb logfile.sh <==顯示出的這個檔案的 md5 內(nèi)容 [root @test /root]# echo testing >> logfile.sh<==改變一下檔案內(nèi)容看看; [root @test /root]# md5sum -t logfile.sh <==再檢查一下 dc39058c7acbad49fbd13946407c2152 logfile.sh <==嘿嘿!密碼的內(nèi)容不一樣了!! [root @test /root]# md5sum --status --check logfile.sh <==看此檔案有無 md5sum 的指紋創(chuàng)建 md5sum: logfile.sh: no properly formatted MD5 checksum lines found 因?yàn)檫@個檔案是我自己建立的,并沒有寫入任何的 md5 資料,所以....

  ·說明:

  一般而言,每個系統(tǒng)里面的檔案內(nèi)容大概都不相同,例如你的系統(tǒng)中的 /etc/passwd 這個登入資訊檔與我的一定不一樣,因?yàn)槲覀兊氖褂谜吲c密碼、 Shell 及家目錄等大概都不相同,所以由 md5sum 這個檔案指紋分析程式所自行計算出來的指紋表當(dāng)然就不相同啰!以上面的例子來說明,當(dāng)原本的 logfile.sh 被改變之后,在經(jīng)由 md5sum 計算一次,嘿嘿!指紋改變了~~這說明了我們的檔案被修改過了,與原先的內(nèi)容不相同啰!

  好了,那么如何使用這個東西呢?基本上,您必須要為您的這些重要的檔案進(jìn)行指紋資料庫的建立(好象在做戶口調(diào)查!),將底下這些檔案建立資料庫:

  o /etc/passwd

  o /etc/shadow(假如你不讓使用者改密碼了)

  o /etc/group

  o /usr/bin/passwd

  o /sbin/portmap

  o /bin/login (這個也很容易被駭!)

  o /bin/ls

  o /bin/ps

  o /usr/bin/top

  等等,這幾個檔案最容易被修改了!因?yàn)楹芏嗄抉R程式執(zhí)行的時候,還是會有所謂的『執(zhí)行序, PID』為了怕被 root 追查出來,所以他們都會修改這些檢查排程的檔案,如果你可以替這些檔案建立指紋資料庫(就是使用 md5sum 檢查一次,將該檔案指紋記錄下來,然后常常以 shell script 的方式由程式自行來檢查指紋表是否不同了!),那么對于檔案系統(tǒng)會比較安全啦!!

  網(wǎng)路資源

  剛剛最前面說過了,套件升級最主要的考量就是『安全性』啦!所以請隨時注意安全性方面的問題!目前國內(nèi)的主要安全網(wǎng)站為:『臺灣網(wǎng)路危機(jī)處理小組』這個組織,請隨時注意上面發(fā)布的新聞!另外,如果跟鳥哥一樣使用的是 Red Hat 的 distrubution 的話,那么 Red Hat 的 Errata 網(wǎng)頁則不可不光臨!好啦!底下列出幾個 RPM 相關(guān)的網(wǎng)頁與 Red Hat 的 Errata 網(wǎng)頁提供大家參考啰!

  ·RPM 包裝檔案管理程式:http://www.study-area.org/tips/rpm.htm

  ·中文 RPM HOW-TO:http://www.linux.org.tw/CLDP/RPM-HOWTO.html

  ·RPM 的使用:http://linux.tnc.edu.tw/techdoc/rpm-howto.htm

  ·大家來作 RPM :http://freebsd.ntu.edu.tw/bsd/4/3/2/29.html

  ·一本 RPM 的原文書:http://linux.tnc.edu.tw/techdoc/maximum-rpm/rpmbook/

  ·Red Hat 的 Errata 網(wǎng)頁:http://www.redhat.com/apps/support/errata/

來源:網(wǎng)絡(luò)搜集//所屬分類:Linux教程/更新時間:2011-12-08
相關(guān)Linux教程