Linux的RPM與Tarball套件管理工具_(dá)Linux教程
這真是一個(gè)很有趣的課題,為何需要升級(jí)套件?如果我的機(jī)器運(yùn)作的好好的,那么我干嘛需要升級(jí)?通常我們升級(jí)的原因主要有三個(gè):
·需要新的功能,但舊有主機(jī)并沒有,所以需要安裝新的套件;
·舊版本的套件上面可能有安全上的顧慮,所以需要更新到新版的套件;
·舊版的套件執(zhí)行效能不彰,或者執(zhí)行的能力不能讓管理者滿足。
在上面的需求當(dāng)中,尤其需要注意的是第二點(diǎn),當(dāng)一個(gè)套件有安全上的顧慮時(shí),千萬(wàn)不要懷疑,趕緊更新套件吧!否則造成網(wǎng)路危機(jī),那可不是鬧著玩的?那么更新的方法有哪些呢?其實(shí),目前在 Linux 里面有相當(dāng)多的不同的更新套件的方式,包括了 Red Hat 發(fā)展的 RPM 與 up2date 的線上更新模式; Debian 這個(gè) distribution 里頭使用的 dpkg 方法;Sun Unix 上面使用的 pkg 升級(jí)方式;目前越來越流行的 apt 線上更新模式;還有原始碼里頭最常使用的 Tarball 編譯方法等等,如果要一個(gè)一個(gè)說明的話那也太累人了?所以,這里我們以目前在 Mandrake, Red Hat, OpenLinux 等 Linux distributions 內(nèi)常見的 RPM 與 Tarball 的套件升級(jí)方式來進(jìn)行說明:
·RPM
目前使用最廣泛的套件管理程式之一,利用資料庫(kù)管理的方式來進(jìn)行套件的安裝,具有相當(dāng)容易的操作介面,而且套件查詢驗(yàn)證的功能相當(dāng)強(qiáng)大,不過麻煩的地方在于他的屬性相依的問題;
·Tarball
直接以原始碼( source code )經(jīng)過編譯后,進(jìn)行安裝。在安裝上面具有較大的靈活度,可以隨時(shí)更改使用者喜好的參數(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 』簡(jiǎn)稱則為 RPM 啦!顧名思義,當(dāng)初這個(gè)套件管理的程式是由 Red Hat 這家公司發(fā)展出來的,但其實(shí)在很多的其他套件也有相類似的套件管理程式。不過由于 RPM 使用上很方便,所以就成了目前最熱門的套件管理程式啦!那么什么是 RPM 呢?說的簡(jiǎn)單一點(diǎn), RPM 是以一種資料庫(kù)記錄的方式來將你所需要的套件安裝到你的 Linux 主機(jī)的一套管理程式。他最大的特點(diǎn)就是將您要安裝的套件先包裝好了,透過包裝好的套件里頭預(yù)設(shè)的資料庫(kù)記錄,記錄這個(gè)套件要安裝的時(shí)候必須要的相依屬性模組(就是你的 Linux 主機(jī)需要先存在的幾個(gè)必須的套件),當(dāng)安裝在你的 Linux 主機(jī)時(shí), RPM 會(huì)先依照套件里頭的紀(jì)錄資料查詢 Linux 主機(jī)的相依屬性套件是否滿足,若滿足則予以安裝,若不滿足則不予安裝。那么安裝的時(shí)候就將該套件的資訊整個(gè)寫入 RPM 的資料庫(kù)中,以便未來的查詢、驗(yàn)證與反安裝!這樣一來的優(yōu)點(diǎn)是:
1.由于已經(jīng)編譯完成并且打包完畢,所以安裝上很方便;
2.由于套件的資訊都已經(jīng)記錄在 Linux 主機(jī)的資料庫(kù)上,很方便查詢、升級(jí)與反安裝;
但是這也造成很大的困擾,由于 RPM 程式是已經(jīng)包裝好的資料,也就是說,里面的資料已經(jīng)都『編譯完成』了!所以,安裝的時(shí)候一定需要當(dāng)初安裝時(shí)的主機(jī)環(huán)境才能安裝,也就是說,當(dāng)初建立這個(gè)套件的安裝環(huán)境必須也要在你的主機(jī)上面出現(xiàn)才行!例如 rp-pppoe 這個(gè) ADSL 撥接套件,他必須要在 ppp 這個(gè)套件存在的環(huán)境下才能進(jìn)行安裝!如果你的主機(jī)并沒有 ppp 這個(gè)套件,那么很抱歉,除非您先安裝 ppp 否則 rp-pppoe 就是不讓你安裝的(當(dāng)然您可以強(qiáng)制安裝,但是通常都會(huì)有點(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)境必須與打包時(shí)的環(huán)境需求一致或相當(dāng);
4.需要滿足套件的相依屬性需求;
5.反安裝時(shí)需要特別小心,最底層的套件不可先移除,否則可能造成整個(gè)系統(tǒng)的問題!
那怎么辦?呵呵!還好,還有 SRPM 這個(gè)東西! SRPM 是什么呢?他也是一種 RPM 啦!但是由于里面連同當(dāng)初編譯之前的原始碼都在里頭,所以可以進(jìn)行重新編譯的動(dòng)作。通常 SRPM 的附檔名是 ****.src.rpm 這一種檔案格式。由于 SRPM 包含了原始碼及參數(shù)設(shè)定檔案,所以在安裝之前則必須重新的編譯建立起包裝的資訊檔案套件才行!當(dāng)然啰,如果在編譯的過程中發(fā)生了問題,也可以藉由里頭的原始碼更動(dòng)來修正問題的所在呢!所以說, RPM 與 SRPM 最大的差異就是在于有沒有包含原始碼的程式啦!
·什么是 i386, i586, i686, noarch
好啦!現(xiàn)在我們已經(jīng)知道 RPM 與 SRPM 的格式了,分別為:
xxxxxxxxx.rpm <==RPM 的格式,已經(jīng)包裝完成的 rpm 檔案; xxxxx.src.rpm <==SRPM的格式,包含為編譯的原始碼資訊。
·
OK!那么 rpm 檔案有沒有什么版本或者是套件名稱的稱呼呢?有的,你可以這樣來看待一個(gè) rpm 的檔案,例如 rp-pppoe-2.6-5.i386.rpm
rp-pppoe - 2.6 - 5 . i386 .rpm 第一個(gè)部分是套件名稱這是套件的版本資訊 這是釋出版本的次數(shù) 這是適合的硬體平臺(tái)附檔名而已
這樣子可以很清楚的發(fā)現(xiàn)該套件的名稱、版本資訊、打包次數(shù)與操作的硬體平臺(tái)!好了,來談一談每個(gè)不同的地方吧:
o套件名稱:當(dāng)然就是每一個(gè)套件的名稱了!
o版本資訊:每一次更新版本就需要有一個(gè)版本的資訊,否則如何知道這一版是新是舊?這里通常又分為主版本跟次版本,反正版本很多啦!
o釋出版本次數(shù):也就是編譯的次數(shù)啦!那么為何需要重復(fù)的編譯呢?這是由于同一版的套件中,可能由于有某些 bug 或者是安全上的顧慮,所以必須要重新設(shè)定當(dāng)初打包時(shí)候的設(shè)定參數(shù),設(shè)定完成之后重新編譯并打包成 RPM 檔案!因此就有不同的打包數(shù)出現(xiàn)了!
o操作硬體平臺(tái):這是個(gè)很好玩的地方,由于 RPM 可以適用在不同的操作平臺(tái)上,但是由于不同的平臺(tái)設(shè)定的參數(shù)還是有所差異性!所以就有所謂的 i386, i586, i686 與 noarch 等的檔案名稱出現(xiàn)了!
§i386:幾乎適用于所有的 x86 平臺(tái),不論是舊的 pentum 或者是新的 pentum-IV 與 K7 系列的 CPU等等,都可以正常的工作!那個(gè) i 指的是 Intel 相容的 CPU 的意思,至于 386 不用說,就是 CPU 的等級(jí)啦!
§i586:就是 586 等級(jí)的電腦,那是哪些呢?包括 pentum 第一代 MMX CPU, AMD 的 K5, K6 系列 CPU ( socket 7 插腳 ) 等等的 CPU 都算是這個(gè)等級(jí);
§i686:在 pentun II 以后的 Intel 系列 CPU ,及 K7 以后等級(jí)的 CPU 都屬于這個(gè) 686 等級(jí)!
§noarch:就是沒有任何硬體等級(jí)上的限制。
需要額外說明的是, i386 的檔案可以在任何的機(jī)器上面安裝,不論是 586 或者是 686 的機(jī)器,但是 i386 則不一定可以使用于 586 或者是 686 的硬體上面,另外,在 686 的機(jī)器上使用 i686 的檔案會(huì)比使用 i386 的檔案在執(zhí)行上,效能可能比較好一些!無論如何,使用 i386 應(yīng)該就是比較沒有問題的啦!另外,由于不同的 distirbution 會(huì)有不同的環(huán)境與函式庫(kù),所以在 i386 之后也有可能會(huì)額外再加上該套件的簡(jiǎn)寫!
好了!接下來我們來談一談安裝的時(shí)候所需要使用到的目錄!
·SRPM 與 RPM 工作時(shí)候所需要的安裝目錄
SRPM 的編譯過程:
剛剛提到 SRPM 里頭含有的是未經(jīng)編譯的原始碼,所以我們需要將 SRPM 進(jìn)行編譯打包的動(dòng)作!那么編譯是在哪里進(jìn)行呢?由于編譯的時(shí)候會(huì)將原始碼解壓縮出來,并且將附有的參數(shù)控制選項(xiàng)也同時(shí)的解開,所以就有一些資料會(huì)出現(xiàn)了,那么這些資料放在哪里呢?你可以到你的 /usr/src 這個(gè)目錄里面去查看一下,通常每個(gè) distribution 提供的目錄都不太相同,以 Mandrake 9.0 為例,他是以 /usr/src/RPM 為工作目錄, Red Hat 是以 /usr/src/redhat 為工作目錄, Openlinux 則是以 /usr/src/openlinux 為工作目錄!無論如何,反正就是在 /usr/src 這個(gè)目錄下就對(duì)了!好了,既然我們是在 Mandrake 9.0 ,所以就到 /usr/src/RPM 里頭去看一看呦:
o/usr/src/RPM/SPEC:這個(gè)目錄當(dāng)中放置的是該套件的設(shè)定檔,例如這個(gè)套件的資訊參數(shù)、設(shè)定項(xiàng)目等等都放置在這里;
o/usr/src/RPM/SOURCE:這個(gè)目錄當(dāng)中放置的是該套件的原始檔(*.tar.gz的檔案)以及 config 這個(gè)設(shè)定檔;
o/usr/src/RPM/BUILD:在編譯的過程中,有些暫存的資料都會(huì)放置在這個(gè)目錄當(dāng)中;
o/usr/src/RPM/RPMS:經(jīng)過編譯之后,并且順利的編譯成功之后,將打包完成的檔案放置在這個(gè)目錄當(dāng)中。里頭有包含了 i386, i586, i686, noarch.... 等等的次目錄。
此外,在編譯的過程當(dāng)中,可能會(huì)發(fā)生不明的錯(cuò)誤,或者是設(shè)定的錯(cuò)誤,這個(gè)時(shí)候就會(huì)在 /tmp 底下產(chǎn)生一個(gè)相對(duì)應(yīng)的錯(cuò)誤檔,您可以根據(jù)該錯(cuò)誤檔進(jìn)行除錯(cuò)的工作呢!等到所有的問題都解決之后,也編譯成功了,那么剛剛解壓縮之后的檔案,就是在 /usr/src/RPM/SPEC, SOURCE, BUILD 等等的檔案都會(huì)被殺掉,而只剩下放置在 /usr/src/RPM/RPMS 底下的檔案了!
RPM 的安裝過程:
RPM 在安裝的時(shí)候,會(huì)先去讀取 套件 內(nèi)的設(shè)定參數(shù)內(nèi)容,就是剛剛我們?cè)?/usr/src/RPM/SPEC 的相關(guān)資訊啦!然后將該資料用來比對(duì) Linux 系統(tǒng)的環(huán)境,這些環(huán)境包括了這個(gè)欲安裝的套件的前驅(qū)套件,例如目前 postfix 這個(gè) e-mail 套件當(dāng)中,大都支援了cyrus-sasl 這個(gè)套件的身份認(rèn)證功能,所以,要安裝 postfix 就必需先安裝 cyrus-sasl 這個(gè)套件,否則 postfix 就不讓你安裝了!還有類似版本的資訊等等,這些都是 RPM 環(huán)境的要求,如果環(huán)境相符就予以安裝,如果不符就會(huì)顯示出不符合的內(nèi)容所在!等到安裝完畢之后, rpm 就會(huì)將套件的資訊寫入:/var/lib/rpm 這個(gè)目錄中去!所以,往后您在進(jìn)行查詢的時(shí)候或者是預(yù)計(jì)要升級(jí)的時(shí)候,相關(guān)的資訊就會(huì)由 /var/lib/rpm 這個(gè)目錄的內(nèi)容資料來提供啰!此外,在安裝 RPM 的套件時(shí),這些套件通常會(huì)使用到底下的目錄:
o /etc 一些設(shè)定檔放置的目錄,例如 /etc/samba
o /usr/bin 一些可執(zhí)行檔案
o /usr/lib 一些程式使用的動(dòng)態(tài)函式庫(kù)
o /usr/share/doc 一些基本的軟體使用手冊(cè)與說明檔
o /usr/share/man 一些 man page 檔案
底下我們先針對(duì) RPM 的相關(guān)指令來進(jìn)行說明啰!
·RPM 的指令使用:安裝、升級(jí)與更新、查詢、驗(yàn)證、反安裝與重建資料庫(kù)
RPM 提供了『安裝』、『升級(jí)與更新』、『查詢』、『驗(yàn)證』、『反安裝與重建資料庫(kù)』等功能,底下我們一個(gè)一個(gè)來說明吧!
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:這個(gè)參數(shù)會(huì)將后面的 SRPM 進(jìn)行『編譯』與『打包』的動(dòng)作,但是并沒有安裝,當(dāng)您使用 --rebuild 的時(shí)候,最后通常會(huì)發(fā)現(xiàn)一行字體:
Wrote: /usr/src/RPM/RPMS/i386/rp-pppoe-2.6-5.i386.rpm
這個(gè)就是編譯完成的 RPM 檔案啰!那么這個(gè)檔案就可以用來安裝啦!安裝的時(shí)候請(qǐng)加絕對(duì)路徑來安裝即可!
§--recompile:這個(gè)動(dòng)作會(huì)直接的『編譯』『打包』并且『安裝』啰!請(qǐng)注意, rebuild 僅『編譯并打包』而已,而 recompile 不但進(jìn)行編譯跟打包,還同時(shí)進(jìn)行『安裝』了!
§-ivh:就是用來安裝 RPM 的參數(shù)而在這個(gè)參數(shù)之下,由于會(huì)有一些『相依屬性』的問題,或者是曾經(jīng)安裝過的檔案的問題,所以您可以再加以下的參數(shù)來『強(qiáng)制』安裝:
§--nodeps:不考慮相依屬性的關(guān)系,給他強(qiáng)制的安裝下去;
§--replacepkgs:如果這個(gè)套件之前安裝過,您想要覆蓋這個(gè)套件,那么不需要反安裝后再安裝,可以直接加上 --replacepkgs 強(qiáng)制覆蓋;
§--replacefiles:那么如果這個(gè)套件安裝完畢之后,曾經(jīng)被你修改過檔案呢?就是安裝過程中會(huì)出現(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升級(jí):
使用 RPM 來升級(jí)真是太簡(jiǎn)單了!就以 Uvh 來升級(jí)即可!但是在比較大量的升級(jí)版本中,使用 Fvh 則是比較好的作法。但是需要注意的是,如果您使用的是 Fvh ,偏偏您的機(jī)器上尚無這一個(gè)套件,那么很抱歉,該套件并不會(huì)被安裝在您的 Linux 主機(jī)上面,所以請(qǐng)重新以 ivh 來安裝吧!
[root @test /root]# rpm -Uvh rp-pppoe-2.6-5.i386.rpm [root @test /root]# rpm -Fvh *.rpm <==所有在你 Linux 主機(jī)上面安裝過的套件才升級(jí)
注意的是, Uvh 是升級(jí)您所寫入的套件,至于 Fvh 則是『僅升級(jí)在您的系統(tǒng)里面存在的套件』,所以有的朋友在大量的進(jìn)行套件版本修補(bǔ)的時(shí)候,他們都是這樣做的:
1.先到各發(fā)展商的 errata 網(wǎng)站上捉下來最新的 i386 檔案;
2.使用 -Fvh 來將您的系統(tǒng)內(nèi)曾安裝過的套件進(jìn)行修補(bǔ)與升級(jí)!(真是方便呀!)
o 查詢:
查詢也是 RPM 的重要功能之一,因?yàn)樗峁┝诉@個(gè)套件的版本、用途等資訊,是相當(dāng)有用的!那么如何查詢呢?底下列出只要的查詢參數(shù):
1. 從系統(tǒng)查詢(由 /var/lib/rpm 資料庫(kù)取得的資料) [root @test /root]# rpm -q rp-pppoe <==僅列出 rp-pppoe 這個(gè)套件的版本; [root @test /root]# rpm -qa <==列出所有安裝過的套件與版本; [root @test /root]# rpm -qi rp-pppoe <==列出 rp-pppoe 這個(gè)套件的詳細(xì)資訊 [root @test /root]# rpm -ql rp-pppoe <==列出 rp-pppoe 這個(gè)套件安裝的檔案與路徑; [root @test /root]# rpm -qf /etc/rc.d/init.d/pppoe <==查詢 pppoe 這個(gè)檔案屬于哪一個(gè)套件? 2. 由檔案查詢檔案的內(nèi)容 [root @test /root]# rpm -qpi rp-pppoe-2.6-5.src.rpm <==查詢這個(gè)套件的詳細(xì)資訊; [root @test /root]# rpm -qpl rp-pppoe-2.6-5.src.rpm <== 查詢這個(gè)套件里面有多少的檔案內(nèi)容存在
o
§ 查詢套件:查詢安裝過的套件可以使用 -q 即可知道他的套件版本,但是如果忘記套件的全名,那么可以使用
rpm -qa | grep pakagename 來選擇出適當(dāng)?shù)奶准?
若使用 -qi 則可以了解這個(gè)套件的主要資訊!
§ 尋找套件檔案:常常我們忘記一個(gè)套件內(nèi)容含有的檔案時(shí),可以使用 -ql 來查詢?cè)撎准瑫?huì)列出相當(dāng)多的檔案呦!
§ 由檔案尋找套件:這是最長(zhǎng)發(fā)生的問題,就是您『誤砍』了某個(gè)檔案,偏偏不知道他是哪一個(gè)套件的,呵呵!那么你可以請(qǐng)跟你同樣系統(tǒng)的朋友,使用 -qf 來查詢?cè)摍n案所屬的套件,然后重新安裝該套件就可以就回來啦!
o 驗(yàn)證:
驗(yàn)證的功能主要在于提供系統(tǒng)管理員一個(gè)有用的管理機(jī)制!作用的方式是『使用 /var/lib/rpm 底下的資料庫(kù)內(nèi)容來比對(duì)目前 Linux 系統(tǒng)的環(huán)境下的所有套件檔案』也就是說,當(dāng)您有資料不小心遺失,或者是因?yàn)槟`殺了某個(gè)套件的檔案,或者是不小心不知道修改到某一個(gè)套件的檔案內(nèi)容,就用這個(gè)簡(jiǎn)單的方法來驗(yàn)證一下原本的檔案系統(tǒng)吧!好讓您了解這一陣子到底是修改到哪些檔案資料了!
[root @test /root]# rpm -V rp-pppoe <==單純檢查 rp-pppoe 這個(gè)已安裝套件的檔案內(nèi)容與原先是否相同 [root @test /root]# rpm -Va <==檢查所有的 /var/lib/rpm 底下的資料庫(kù)與 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(檔案的建立時(shí)間已被改變) [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 有五個(gè)檔案或目錄,其中,如果驗(yàn)證一下的話,就會(huì)發(fā)現(xiàn) /etc/crotab 已經(jīng)被改過了?那么如果該檔案的變更是『預(yù)期中的』,那么就沒有什么大問題,但是如果該檔案是『非預(yù)期的』,那么是否被入侵了呢?呵呵!得注意注意啰!
o 反安裝與重建資料庫(kù):
反安裝就是將套件解除安裝啦!要注意的是,『解安裝的過程一定要由最上層往下解除』,以 rp-pppoe 為例,這一個(gè)套件主要是依據(jù) ppp 這個(gè)套件來安裝的,所以當(dāng)您要解除 ppp 的時(shí)候,就必須要先解除 rp-pppoe 才行!否則就會(huì)發(fā)生結(jié)構(gòu)上的問題啦!這個(gè)可以由建筑物來說明,如果你要拆除五、六樓,那么當(dāng)然要由六樓拆起,否則拆了第五樓,那么上面的樓層難道會(huì)懸空?
那么重建資料庫(kù)呢?由于我們會(huì)一直在修改一些檔案內(nèi)容,例如 /etc/xinetd.d 里頭的參數(shù)檔案,加上可能自系統(tǒng)操作的過程中新增、移除等等的動(dòng)作,導(dǎo)致系統(tǒng)的資料庫(kù)有點(diǎn)亂,這個(gè)時(shí)候可以使用 --rebuilddb 來重建一下 rpm 的資料庫(kù)!這兩個(gè)方法的參數(shù)如下啰
[root @test /root]# rpm -e re-pppoe <==解安裝 rp-pppoe [root @test /root]# rpm --rebuilddb <==重建資料庫(kù)
Tarball 套件管理員:
還記得我們使用過的打包指令 tar 嗎?使用 tar 并且以 gzip 進(jìn)行壓縮的檔案,就稱為 Tarball 啦!這個(gè)是最原始的原始碼檔案喔!底下談一談他啰!
·什么是 Tarball ( source code )
其實(shí) tarball 就是以 *.tar.gz 壓縮之后的 binary 原始檔啦!還記得 tar 怎么使用嗎?記得回去第二篇瞧一瞧去!由于軟體開發(fā)商為了適應(yīng)各種工作平臺(tái),所以通常他們都會(huì)將整個(gè)軟體以較龐大的原始檔案創(chuàng)建下來,里頭除了(1)最重要的原始碼之外,另外包含了(2)針對(duì)各個(gè)不同的平臺(tái)編譯與操作參數(shù)而訂定的偵測(cè)與參數(shù)設(shè)定檔,然后將這些東西以 tar 這個(gè)匯整壓縮軟體將整個(gè)軟體下的目錄壓縮成一個(gè)檔案,由于是經(jīng)過類似打包壓縮的動(dòng)作,嘿嘿!那就是所謂的 tarball 啰!因此,當(dāng)您看到一個(gè) tarball 的檔案,不要懷疑,里頭通常是包含了原始碼的!
剛剛說 tarball 可以適應(yīng)在各個(gè)不同的平臺(tái)上面,那么他是怎么辦到的呢?因?yàn)楦鱾(gè)平臺(tái)的操作環(huán)境都不相同吶!嗯!為了要讓使用者便于安裝,所以通常軟體開發(fā)者會(huì)寫一支小 scripts 來偵測(cè)使用者的系統(tǒng),以及偵測(cè)該軟體所需要的前驅(qū)軟體是否存在你的 Linux 環(huán)境中,以便利于后續(xù)的編譯過程與安裝步驟!利用這樣的一個(gè) script 幾乎就可以完整的建立起基本的參數(shù)設(shè)定檔了。基本上,如果前驅(qū)軟體都已經(jīng)安裝完畢,那么使用 tarball 幾乎『一定可以安裝成功』的,而且安裝上面也不麻煩,大多只要執(zhí)行三~四個(gè)步驟即可安裝完畢!而且,使用者『可以自行設(shè)定安裝的路徑』,以便于管理。
不過, tarball 在另一方面有個(gè)相當(dāng)嚴(yán)重的困擾,那就是反安裝的部分。在 RPM 上面的反安裝是蠻簡(jiǎn)單的一件事,只要克服了屬性相依的問題之后,要反安裝只要下達(dá) rpm –e package 即可!但是 tarball 可沒有這么簡(jiǎn)單呢!因?yàn)樗]有紀(jì)錄當(dāng)初安裝檔案的資料庫(kù),所以,要反安裝的時(shí)候,可能需要一個(gè)檔案一個(gè)檔案的手動(dòng)去除?嗄?這么麻煩?那么有沒有什么方法可以比較容易管理呢?有呀!就是利用安裝在特定的目錄下的方式來管理,就會(huì)比較清楚一點(diǎn)!而且也會(huì)比較容易未來進(jìn)行主機(jī)的移交作業(yè)?通常我們會(huì)給您這樣的建議:
1.最好將 tarball 的原始資料解壓縮到 /usr/local/src 當(dāng)中;
2.安裝時(shí),最好安裝到 /usr/local 這個(gè)預(yù)設(shè)路徑下;
3. 考慮未來的反安裝步驟,最好可以將每個(gè)套件單獨(dú)的安裝在 /usr/local 底下,例如安裝 rp-pppoe-2.6.tar.gz 時(shí),則可以指定該套件需要安裝于 /usr/local/rp-pppoe 當(dāng)中,如此一來,如果該套件會(huì)將所有的資料都寫入 /usr/local/rp-pppoe 當(dāng)中,因此,未來如果要移除該套件,只要將該目錄刪除即可視為成功的移除了!
4.不過單獨(dú)安裝某個(gè)套件在某一特定路徑下的作法,會(huì)導(dǎo)致當(dāng)有 man page 的時(shí)候,使用預(yù)設(shè)的 MANPATH 會(huì)找不到相關(guān)的說明檔案內(nèi)容。這個(gè)時(shí)候就必須要將 man page 的路徑加到 /etc/man.config 檔案中了!否則使用 man 也查詢不到指令的使用方法的。以上面的例子為例,如果是安裝了 /usr/local/rp-pppoe 當(dāng)中,通常 man page 會(huì)放在 /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ù)暮?jiǎn)單』,因?yàn)橹灰樦忾_壓縮之后目錄里面的 README 或 INSTALL 就可以安裝成功了!但是仍然有部分的困擾,例如:如果常常上 BBS 或者是新聞群組討論區(qū)的朋友,應(yīng)該不難發(fā)現(xiàn)這個(gè)發(fā)問『我在執(zhí)行某個(gè)程式的偵測(cè)檔案時(shí),他都會(huì)告訴我沒有 gcc 這個(gè)套件,這是怎么回事?』還有:『我沒有辦法使用 make 耶!這是什么問題?』呵呵!必須要告訴大家的是,使用 tarball 的安裝時(shí),『一定』需要幾個(gè)物件才行!這些物件在 Mandrake 或者是其他的 distribution 時(shí),『預(yù)設(shè)都是不選擇的』,所以在安裝 Linux 的時(shí)候,請(qǐng)?zhí)貏e留意選擇的類別呢!底下這些東西都是必需的:
1.需要 Kernel sources files:常常一些 Tarball 在安裝時(shí),會(huì)使用到 Kernel 的原始檔案,亦即在 /usr/src/linux 這個(gè)目錄底下的檔案,而該目錄是需要安裝或者編譯過核心才會(huì)存在的目錄!這個(gè)問題最常發(fā)生在『驅(qū)動(dòng)程式的安裝與編譯』方面。所以當(dāng)您在安裝 Linux 的時(shí)候沒有選擇 Kernel source 或者在之后沒有編譯核心時(shí),呵呵!那么可能就沒有辦法安裝了!
2.需要 make 及 autoconfig 等套件:需要另外注意的就是,我們還需要 make 這個(gè)套件才行!除此之外,還有 autoconfig 等等的套件也需要安裝才行!這兩個(gè)東西可以讓參數(shù)設(shè)定檔( 通常就是 Makefile 這個(gè)檔案 )順利的被執(zhí)行。
3.需要 gcc 或 cc 等編譯軟體 ( compiler ):如果沒有編譯的軟體,那么自然也就無法將原始程式碼編譯成可以執(zhí)行的檔案啦!所以至少要有一種編譯器才行!在 GNU 架構(gòu)的 Linux 上面,我們通常使用的是 gcc 這個(gè)加強(qiáng)功能的 C 語(yǔ)言編譯器啦!請(qǐng)注意:除了 gcc 之外,連同上面的 make 等等的套件,幾乎都在安裝 Linux 的時(shí)候的那個(gè) Software Development 咚咚里頭!也就是說,若是您當(dāng)初 安裝的時(shí)候,選擇的是我建議的那種安裝方式的話,那么您的 tarball 安裝應(yīng)該問題不大,若是沒有安裝的話,那么肯定很多的套件是無法編譯成功的!這個(gè)時(shí)候只好拿出您的原版光碟,一個(gè)一個(gè) RPM 套件加入您的 Linux 系統(tǒng)當(dāng)中吧! @_@
4.特別留意安裝時(shí)候的選擇工具:由于在安裝的時(shí)候『預(yù)設(shè)選項(xiàng)并沒有將 Kernel Development 及 Software Development 加入安裝的行列』,所以您如果選擇預(yù)設(shè)選項(xiàng)的話,呵呵!那么使用 tarball 的工具就會(huì)顯的力不從心!這一點(diǎn)還請(qǐng)?zhí)貏e特別留意呢!
·一般安裝步驟:
基本上, tarball 的安裝主要就是:
1.將 tarball 在 /usr/local/src 解壓縮;
2.在軟體解壓縮的路徑下建立 Makefile 這個(gè)參數(shù)設(shè)定檔案;
3.以 make 這個(gè)程式并使用該目錄下的 Makefile 做為他的參數(shù)設(shè)定檔,來進(jìn)行 make (編譯或其他) 的動(dòng)作;
4.以 make 這個(gè)程式,并以 Makefile 這個(gè)參數(shù)設(shè)定檔,依據(jù) install 項(xiàng)目的指定來安裝到正確的路徑!
此外,通常在每個(gè)軟體的 tarball 中,都會(huì)附上 INSTALL 或者是 README 這種檔名的說明檔,這些說明檔請(qǐng)『務(wù)必詳細(xì)閱讀』過一遍,通常這些檔案會(huì)記錄這個(gè)軟體的安裝要求、軟體的工作項(xiàng)目、與軟體的安裝參數(shù)設(shè)定及技巧等,只要仔細(xì)的閱讀完這些檔案,基本上,要安裝好 tarball 的檔案,都不會(huì)有什么大問題啰?那么那個(gè) make 在干嘛?一般而言, make 會(huì)依據(jù) Makefile 這個(gè)檔案的內(nèi)容,去執(zhí)行清除目標(biāo)檔(object file)或者是編譯或者是安裝的步驟,對(duì)于安裝 source code 的人來說,這個(gè) make 是相當(dāng)重要的!在 Makefile 這個(gè)檔案中,會(huì)有一些不同的步驟應(yīng)該要進(jìn)行的工作項(xiàng)目,例如 clean, install, compile 等等,而如果要執(zhí)行清除的步驟,就是 make clean ,安裝就下達(dá) make install ,亦即 make 后面接欲進(jìn)行的工作,那么 make 這個(gè)工具就會(huì)依據(jù) Makefile 這個(gè)檔名的檔案去讀取相關(guān)的步驟訊息,而進(jìn)行該有的動(dòng)作!
OK!我們底下約略提一下大部分的 tarball 軟體之安裝的指令下達(dá)方式:
5../configure :這個(gè)步驟就是在建立 Makefile 這的檔案啰!通常程式開發(fā)者會(huì)寫一支 scripts 來檢查您的 Linux 系統(tǒng)、相關(guān)的套件屬性等等,這個(gè)步驟相當(dāng)?shù)闹匾驗(yàn)槲磥砟陌惭b資訊都是這一步驟內(nèi)完成的!另外,這個(gè)步驟的相關(guān)資訊應(yīng)該要參考一下該目錄下的 README 或 INSTALL 相關(guān)的檔案!!基本上,這個(gè)步驟完成之后會(huì)建立(或修改)一個(gè) Makefile ,這就是參數(shù)檔啦!
6.make clean:make 會(huì)讀取 Makefile 中關(guān)于 clean 的工作。這個(gè)步驟不一定會(huì)有,但是希望執(zhí)行一下!為什么呢?因?yàn)樵谶M(jìn)行編譯的時(shí)候,會(huì)產(chǎn)生一些 *.o 的檔案,例如有個(gè) abc.c 的原始碼,經(jīng)過編譯后會(huì)變成 abc.o 的檔案!我們稱這些檔案為 object file ,這些檔案如果之前已經(jīng)編譯過并留下來的話,那么這次再編譯的時(shí)候,就不會(huì)編譯該檔案,然而由于我們可能已經(jīng)修改了部分的參數(shù),因此該檔案的編譯結(jié)果事實(shí)上應(yīng)該會(huì)有所不同!因此,為了避免前一次留下來的資料可能影響到這次編譯的結(jié)果,所以通常可以進(jìn)行一下這個(gè)步驟啰!
7.make:make 會(huì)依據(jù) Makefile 當(dāng)中的預(yù)設(shè)工作進(jìn)行編譯的行為!編譯的工作主要是進(jìn)行 gcc 來將原始碼編譯成為可以被執(zhí)行的 object files ,但是這些 object files 通常還需要一些函式庫(kù)之類的 link 后,才能產(chǎn)生一個(gè)完整的執(zhí)行檔!使用 make 就是要將原始碼編譯成為可以被執(zhí)行的可執(zhí)行檔,而這個(gè)可執(zhí)行檔會(huì)放置在目前所在的目錄之下,尚未被安裝到預(yù)定安裝的目錄中;
8.make install:通常這就是最后的安裝步驟了,make 會(huì)依據(jù) Makefile 這個(gè)檔案里面關(guān)于 install 的項(xiàng)目,將上一個(gè)步驟所編譯完成的資料給他安裝到預(yù)定的目錄中,就完成安裝啦!
9. 特別留意:請(qǐng)注意,上面的步驟是一步一步來進(jìn)行的,而其中只要一個(gè)步驟無法成功,那么后續(xù)的步驟就完全沒有辦法進(jìn)行的!因此,要確定每一的步驟都是成功的才可以!舉個(gè)例子來說,萬(wàn)一今天你在 ./configure 就不成功了,那么就表示 Makefile 無法被建立起來,要知道,后面的步驟都是根據(jù) Makefile 來進(jìn)行的,既然無法建立 Makefile ,后續(xù)的步驟當(dāng)然無法成功啰!另外,如果在 make 無法成功的話,那就表示原始檔案無法被編譯成可執(zhí)行檔,那么 make install 主要是將編譯完成的檔案給他安裝下去的,既然都沒有成功的執(zhí)行檔了,怎么進(jìn)行安裝?所以啰,要每一個(gè)步驟都正確無誤才能往下繼續(xù)做!此外,如果安裝成功,并且是安裝在獨(dú)立的一個(gè)目錄中,例如 /usr/local/packages 這個(gè)目錄中好了,那么您就必需手動(dòng)的將這個(gè)套件的 man page 給他放到 /etc/man.config 里面去,設(shè)定的方法如前面提到的一般所示。
·Tarball 的移除與升級(jí):
再來就要談到惱人的 tarball 的移除跟升級(jí)了?Tarball的移除難易度跟(1)當(dāng)初設(shè)定參數(shù)檔時(shí)候的安裝目錄與(2)這個(gè)套件本身要求的檔案放置目錄有關(guān)。如果我們以 apache 這個(gè)軟體來說明的話( 您的系統(tǒng)不見得有裝 ),那么如果您以 RPM 的安裝方式來安裝時(shí),會(huì)發(fā)現(xiàn)他的檔案放在哪里呢?大多是放在:
o /etc/httpd
o /usr/lib
o /usr/bin
o /usr/share/man
我們會(huì)發(fā)現(xiàn)他大致上是擺在 etc, lib, man, bin 等目錄當(dāng)中,分別代表『設(shè)定、函式庫(kù)、線上說明檔、執(zhí)行檔』,一個(gè)套件通常會(huì)將他的內(nèi)容分為這四個(gè)目錄來放置,好了,那么你是以 tarball 來安裝時(shí)呢?如果是放在預(yù)設(shè)的 /usr/local 里面,由于 /usr/local 原本就預(yù)設(shè)這幾個(gè)目錄了,所以你的資料就會(huì)被放在:
o /usr/local/etc
o /usr/local/bin
o /usr/local/lib
o /usr/local/man
但是如果你每個(gè)套件都選擇在這個(gè)預(yù)設(shè)的路徑下安裝的話,那么所有的套件的檔案都將放置在這四個(gè)目錄當(dāng)中,因此,如果你都安裝在這個(gè)目錄下的話,那么未來在想要升級(jí)或移除的時(shí)候,就會(huì)比較難以追查檔案的來源啰?而如果您在安裝的時(shí)候選擇的是單獨(dú)的目錄,例如 /usr/local/apache 的話,那么您的檔案目錄就會(huì)變成:
/usr/local/apache/etc
/usr/local/apache/bin
/usr/local/apache/lib
/usr/local/apache/man
呵呵!自己的檔案都在同一個(gè)目錄之下,那么要移除就簡(jiǎn)單的多了!只要將該目錄移除即可視為該套件已經(jīng)被移除啰?當(dāng)然啰,實(shí)際安裝的時(shí)候還是得視該軟體的 Makefile 里頭的 install 資訊才能知道到底他的安裝情況為何的?
移除的方法是這樣,那么升級(jí)呢?唉?升級(jí)有的時(shí)候也是很困擾啦!怎么說呢?我們還是以 apache 來說明好了,如果您安裝的時(shí)候是使用 PHP + Apache + MySQL 的方式來安裝的,那么每個(gè)套件在安裝的時(shí)候『都有一定的順序與程序!』因?yàn)樗麄內(nèi)咧g具有相關(guān)性,所以安裝時(shí)必需要三者同時(shí)考慮到他們的函式庫(kù)與相關(guān)的編譯參數(shù)。那么如果今天我只要升級(jí) PHP 呢?有的時(shí)候因?yàn)橹挥猩婕皠?dòng)態(tài)函式庫(kù)的升級(jí),那么我只要升級(jí) PHP 即可!其他的部分或許影響不大。但是如果今天 PHP 需要重新編譯的模組比較多,那么可能會(huì)連帶的,連 Apache 這個(gè)程式也需要重新編譯過才行?阿!真是有點(diǎn)給他頭痛的?沒辦法啦!使用 tarball 確實(shí)有他的優(yōu)點(diǎn)啦,但是在這方面,確實(shí)也有他一定的傷腦筋程度? @_@
要選擇 RPM 還是 Tarball?
優(yōu)先選擇 RPM:
這一直是個(gè)有趣的問題:『如果我要升級(jí)的話,或者是全新安裝一個(gè)新的套件,那么該選擇 RPM 還是 Tarball 來安裝呢?』!基本上,如果有 RPM 可以提供給您的 distribution 來安裝,并且沒有嚴(yán)重的相依屬性的問題時(shí),呵呵!選擇 RPM 來安裝會(huì)是一個(gè)比較好的解決方案, Why ?這是由于剛剛上面就提到的 RPM 的好處 啦!可以具有檔案與資料均有紀(jì)錄的優(yōu)點(diǎn),這就是上面提到的 /var/lib/rpm 這個(gè)目錄里面的資料庫(kù),個(gè)記錄可以讓你在管理上更為便利,包括上面提到的 RPM 的升級(jí)、安裝、驗(yàn)證與移除等等。尤其是在查詢上面!可以讓你在管理你的系統(tǒng)上面更為便利。但是 RPM 也不是沒有缺點(diǎn)的,包括最為大家所抱怨連連的『屬性相依』的問題,每一個(gè)不同版本之間,就必須要以不同的 RPM 檔案來安裝!此外,如果要升級(jí)『某一個(gè)套件』而已時(shí),通常還需要連帶其他的套件也必須要一起升級(jí)才行,否則會(huì)有問題!此外,當(dāng)一個(gè)套件經(jīng)過了『大幅度的修改』之后,通常舊的 RPM 與新的 RPM 之間已經(jīng)幾乎無法『完全相容』時(shí),呵呵!那么升級(jí)或者是移除的手續(xù)可是會(huì)累壞人的!例如最近朋友們常常問到的 Apache 1.3.xx 與 2.0.xx 的版本升級(jí)問題!由于架構(gòu)上面差異性太大,加上版本屬性相依問題很難得到一個(gè)完滿的解決方案,這個(gè)時(shí)候 RPM 就不那么合適了。(除非您要一個(gè)一個(gè)的將 Apache 移除,連同其相依的套件,然后再將 Apache 一個(gè)一個(gè)的安裝,包括新套件的相依套件! ^_^ .....我是不會(huì)這么做的啦!)
簡(jiǎn)易方法:
所以這個(gè)時(shí)候 Tarball 的方式就特別適合您的安裝了!這是因?yàn)?Tarball 可以自行設(shè)定編譯時(shí)的參數(shù),此外,也可以自行設(shè)定『安裝路徑』,相當(dāng)?shù)倪m合于想要安裝『多個(gè)不同版本的同一個(gè)套件』的情況!這是怎么說呢?!由于 RPM 必須要配合系統(tǒng)里面其他的相依屬性的套件,所以基本上,他的安裝路徑(就是每個(gè)檔案的放置路徑)理論上是放死的,就是不能隨意的改變他的安裝路徑,因此,當(dāng)有兩個(gè)不同版本的相同套件想要測(cè)試的時(shí)候,大概一定就得將原先的版本移除之后,才能安裝使用先的版本啰!(此外,由于相依的套件幾乎都已經(jīng)包含在 tarball 當(dāng)中了,所以安裝上面其實(shí)并不難啦!)
然而 tarball 可不是這樣的!你可以自行編譯并且安裝在不同的路徑,只要在啟動(dòng)的時(shí)候啟動(dòng)適當(dāng)?shù)陌姹荆敲床煌姹镜奶准梢酝瑫r(shí)的存在于一個(gè)系統(tǒng)當(dāng)中,而且可以透過選擇啟動(dòng)的檔案來啟動(dòng)不同的版本。當(dāng)然啰!你也可以讓 tarball 的安裝與 RPM 的安裝同時(shí)存在于一個(gè)系統(tǒng)當(dāng)中,但是需要特別留意的是,你在啟動(dòng)該套件的時(shí)候,千萬(wàn)記得你的啟動(dòng)路徑!免得啟動(dòng)到了錯(cuò)誤的版本了!呵呵!(這也是一個(gè)系統(tǒng)存在不同多個(gè)版本的套件容易發(fā)生的錯(cuò)誤!希望大家都能夠了解這個(gè)問題呢!)
所以說,為了避免這種路徑上的錯(cuò)誤困擾,基本上,我們都希望 Tarball 的安裝路徑可以設(shè)定在 Linux 原本就規(guī)劃要給大家安裝的路徑『 /usr/local 』這個(gè)路徑下!這樣可以省去相當(dāng)多尋找檔案的時(shí)間!而且在管理上面也會(huì)比較容易!呵呵!
不過, Tarball 最麻煩的地方有幾點(diǎn):
·反安裝:
Tarball 最麻煩的地方就在于他的『解安裝』了!相當(dāng)?shù)挠憛?如果是簡(jiǎn)單的直接將所有的套件安裝在一個(gè)目錄下的話,例如 /usr/local/mrtg 時(shí),那么解安裝還算簡(jiǎn)單,就是將該路徑殺掉就 OK 啦!但是如果是類似 sendmail 這一種呢?他的路徑都是已經(jīng)放置死的(需要在 /etc/sendmail.cf、/etc/mail 底下)那么追蹤反安裝的路徑就很煩人;
·線上查詢:
如果您的安裝路徑是在 /usr/local 底下的話,那么執(zhí)行檔會(huì)被放置到 /usr/local/bin ,或者是 /usr/local/sbin 底下,參數(shù)檔會(huì)放在 /usr/local/etc 底下,線上查詢檔案會(huì)放在 /usr/local/man 底下,所以在設(shè)定上面還有查詢上面還算簡(jiǎn)單(路徑設(shè)定一下即可!),不過,如果你是將套件安裝在單獨(dú)的路徑下呢?例如 /usr/local/mrtg 底下,那么執(zhí)行檔變成了 /usr/local/mrtg/bin 底下,最麻煩的地方就是 man page (線上查詢)放置的地點(diǎn)會(huì)變成在 /usr/local/mrtg/man 底下了!糟糕!那么預(yù)設(shè)的 man page 路徑就找不到該說明檔啰!這個(gè)時(shí)候就必須要手動(dòng)的將該路徑加入 /etc/man.conf 這個(gè)檔案中!而且執(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)差異性太大,或者是無法解決相依屬性的問題,那么與其花大把的時(shí)間與精力在解決屬性相依的問題上,還不如直接以 tarball 來安裝,輕松又愜意!
函式庫(kù)資料: ldconfig, ldd,
什么是函式庫(kù)呢?由于我們使用的 Linux 是一個(gè)相當(dāng)不算小的作業(yè)系統(tǒng),里頭的資料可是相當(dāng)多的,然而有些執(zhí)行程式所使用的系統(tǒng)資源都是相同的,例如登入的時(shí)候不論 ftp, ssh, telnet 都需要使用到 pam 模組,那么是不是所有的執(zhí)行程式都需要將 pam 的資料寫入程式當(dāng)中呢?當(dāng)然不需要了!因?yàn)橄到y(tǒng)本身就已經(jīng)有 pam 了呀!那么如何使用這些系統(tǒng)提供的資訊呢?呵呵!這個(gè)時(shí)候動(dòng)態(tài)的函式庫(kù)就不可或缺了!同時(shí),需要特別留意的是,有相當(dāng)多的函式庫(kù)都是『根據(jù) kernel 的版本來設(shè)定的』,所以不同版本的 kernel 最好不要隨意的互相更換呦!容易造成很多執(zhí)行程式無法使用其函式庫(kù),而掛點(diǎn)的情況發(fā)生的!底下我們來談一談怎么獲得函式庫(kù)的資料!
·ldconfig
[root @test /root]# ldconfig [-f conf] [-C cache] [-p] 參數(shù)說明: -f conf :使用 conf 作為 libarary 函式庫(kù)的取得,而不以 /etc/ld.so.conf 為預(yù)設(shè)值 -C cache:使用 cache 作為快取暫存的函式庫(kù)資料,而不以 /etc/ld.so.cache 為預(yù)設(shè)值 -p :列出目前有的所有函式庫(kù)資料內(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)行函式庫(kù)的重建( /etc/ld.so.cache )
·說明:
系統(tǒng)預(yù)設(shè)的函式庫(kù)都是由 ldconfig 設(shè)定后寫入 /etc/ld.so.cache 當(dāng)中!然后供系統(tǒng)來讀取使用!那么您如何知道目前的函式庫(kù)有多少呢?呵呵!使用 ldconfig 就可以知道啦!以 ldconfig -p 可以列出 /etc/ld.so.cache 的內(nèi)容呢!那么 /etc/ld.so.conf 又是什么呢?!很簡(jiǎn)單,那就是『目前你的系統(tǒng)中主要的函式庫(kù)放置的目錄』,以上式為例,則主要的 XFree86 函式庫(kù)放置在 /usr/X11R6/lib 當(dāng)中,另外還有常用的 kerberos 的函式庫(kù)也擺在其中!如果您的其他函式庫(kù)需要寫入系統(tǒng)中,讓系統(tǒng)可以很快的找到該函式庫(kù)而予以取用的話,那么將你所安裝的套件(通常是 tarball 的套件)所產(chǎn)生的 lib 目錄,給他寫到 /etc/ld.so.conf 這個(gè)檔案中,然后再以 ldconfig 重新建立 /etc/ld.so.cache 即可!
·ldd
[root @test /root]# ldd [-vdr] [filename] 參數(shù)說明: -v :列出所有內(nèi)容資訊; -d :重新將資料有遺失的 link 點(diǎn)秀出來! -r :將 ELF 有關(guān)的錯(cuò)誤內(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
·說明:
·如果您常常升級(jí)安裝 RPM 的套件時(shí),應(yīng)該常常會(huì)發(fā)現(xiàn)那個(gè)『相依屬性』的問題吧!?沒錯(cuò)!我們可以先以 ldd 來視察『相依函式庫(kù)』之間的相關(guān)性!以先取得了解!例如上面的例子中,我們檢查了 libc.so 這個(gè)在 /lib 當(dāng)中的函式庫(kù),結(jié)果發(fā)現(xiàn)他其實(shí)還跟 libc.so.6 有關(guān)呢!也與 ld-linux.so.2 有關(guān)說!所以我們就需要來了解一下,那個(gè)檔案到底是什么套件的函式庫(kù)呀!?使用 -v 這個(gè)參數(shù)還可以得知該函式庫(kù)來自于哪一個(gè)套件!像上面的資料中,就可以得到該 libc.so.6 其實(shí)可以支援 GLIBC_2.1.1 等的版本!
檢驗(yàn)軟體正確性
在我們的 Linux 系統(tǒng)當(dāng)中,為了怕系統(tǒng)商( distribution )推出的檔案被修改過,因此都會(huì)有所謂的 MD5 的軟體指紋驗(yàn)證功能!例如在南臺(tái)灣最大的 ftp 學(xué)術(shù)網(wǎng)站
中山大學(xué)的 ftp 網(wǎng)站里頭的 Red Hat 7.3 這個(gè)可開機(jī)光碟的完整套件,在該目錄底下,除了完整的的可開機(jī)光碟的映象檔(image)之外,還會(huì)附上一個(gè)檔名為 MD5SUM 的檔案,這個(gè)檔案的內(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 這個(gè)檔案中,有個(gè) MD5SUM 的檔案指紋表,如果該檔案是原本開發(fā)廠商提供的檔案時(shí)(沒有被修改過!),則以 md5sum 這支程式進(jìn)行檢驗(yàn)時(shí),會(huì)得到左邊的指紋表!』那有什么用呢?!呵呵!用途可大了,前一陣子不是常常發(fā)現(xiàn)有些免費(fèi)的軟體被利用來作為收集使用者的電子郵件、常上網(wǎng)站資料,及其他使用者私人的資訊嗎?嘿嘿!那就是利用軟體的特性來『偷』使用者的咚咚,那么萬(wàn)一 Red Hat 提供的光碟映象檔(image)被下載之后,讓有心人士偷偷修改過,再轉(zhuǎn)到 Internet 上面流傳,那么你下載的這個(gè)檔案偏偏不是原廠提供的,呵呵!你能保證該檔案的內(nèi)容完全沒有問題嗎?!當(dāng)然不能對(duì)不對(duì)?!是的,這個(gè)時(shí)候就有 md5sum 這個(gè)檔案指紋的咚咚出現(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 <==顯示出的這個(gè)檔案的 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)檫@個(gè)檔案是我自己建立的,并沒有寫入任何的 md5 資料,所以....
·說明:
一般而言,每個(gè)系統(tǒng)里面的檔案內(nèi)容大概都不相同,例如你的系統(tǒng)中的 /etc/passwd 這個(gè)登入資訊檔與我的一定不一樣,因?yàn)槲覀兊氖褂谜吲c密碼、 Shell 及家目錄等大概都不相同,所以由 md5sum 這個(gè)檔案指紋分析程式所自行計(jì)算出來的指紋表當(dāng)然就不相同啰!以上面的例子來說明,當(dāng)原本的 logfile.sh 被改變之后,在經(jīng)由 md5sum 計(jì)算一次,嘿嘿!指紋改變了~~這說明了我們的檔案被修改過了,與原先的內(nèi)容不相同啰!
好了,那么如何使用這個(gè)東西呢?基本上,您必須要為您的這些重要的檔案進(jìn)行指紋資料庫(kù)的建立(好象在做戶口調(diào)查!),將底下這些檔案建立資料庫(kù):
o /etc/passwd
o /etc/shadow(假如你不讓使用者改密碼了)
o /etc/group
o /usr/bin/passwd
o /sbin/portmap
o /bin/login (這個(gè)也很容易被駭!)
o /bin/ls
o /bin/ps
o /usr/bin/top
等等,這幾個(gè)檔案最容易被修改了!因?yàn)楹芏嗄抉R程式執(zhí)行的時(shí)候,還是會(huì)有所謂的『執(zhí)行序, PID』為了怕被 root 追查出來,所以他們都會(huì)修改這些檢查排程的檔案,如果你可以替這些檔案建立指紋資料庫(kù)(就是使用 md5sum 檢查一次,將該檔案指紋記錄下來,然后常常以 shell script 的方式由程式自行來檢查指紋表是否不同了!),那么對(duì)于檔案系統(tǒng)會(huì)比較安全啦!!
網(wǎng)路資源
剛剛最前面說過了,套件升級(jí)最主要的考量就是『安全性』啦!所以請(qǐng)隨時(shí)注意安全性方面的問題!目前國(guó)內(nèi)的主要安全網(wǎng)站為:『臺(tái)灣網(wǎng)路危機(jī)處理小組』這個(gè)組織,請(qǐng)隨時(shí)注意上面發(fā)布的新聞!另外,如果跟鳥哥一樣使用的是 Red Hat 的 distrubution 的話,那么 Red Hat 的 Errata 網(wǎng)頁(yè)則不可不光臨!好啦!底下列出幾個(gè) RPM 相關(guān)的網(wǎng)頁(yè)與 Red Hat 的 Errata 網(wǎng)頁(yè)提供大家參考啰!
·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)頁(yè):http://www.redhat.com/apps/support/errata/
- Linux系統(tǒng)下TOP命令使用與分析詳解
- 安裝Linux我們需要改變20件事情
- 使用Linux系統(tǒng)架設(shè)VSFTP服務(wù)器
- Linux系統(tǒng)上架設(shè)POP3服務(wù)器
- Linux中“Networking Disabled”的解決方法(解決Ubuntu等系統(tǒng)無法上網(wǎng))
- ubuntu系統(tǒng)清理磁盤教程
- linux下搭建pxe自動(dòng)化安裝環(huán)境
- BIOS不支持導(dǎo)致Linux內(nèi)核耗電增加
- Debian GNU/Linux系統(tǒng)卡片
- Linux操作系統(tǒng)開機(jī)自行啟動(dòng)項(xiàng)目詳細(xì)解析
- Linux菜鳥入門級(jí)命令大全
- Linux操作系統(tǒng)中讀取目錄文件信息的過程
- 相關(guān)鏈接:
- 教程說明:
Linux教程-Linux的RPM與Tarball套件管理工具
。