RPM之安裝篇
從一般意義上說,軟件包的安裝其實(shí)是文件的拷貝,RPM安裝軟件包,也無外乎此。但RPM要更進(jìn)一步、更聰明一些就需要多做些工作了。
聰明的安裝
從一般意義上說,軟件包的安裝其實(shí)是文件的拷貝,即把軟件所用的各個(gè)文件拷貝到特定目錄。RPM安裝軟件包,無外乎此。但RPM要更進(jìn)一步,更聰明一些。在安裝前,它通常要執(zhí)行以下操作:
1.檢查軟件包的依賴(Dependency)
RPM格式的軟件包中可包含有依賴關(guān)系的描述,如軟件執(zhí)行時(shí)需要什么動(dòng)態(tài)鏈接庫,需要什么程序存在及版本號(hào)要求等。當(dāng)RPM檢查時(shí)發(fā)現(xiàn)所依賴的鏈接庫或程序等不存在或不符合要求時(shí),默認(rèn)的做法是中止軟件包安裝。
2.檢查軟件包的沖突(Conflicts)
有的軟件與某些軟件不能共存,軟件包制作者會(huì)將這種沖突記錄到RPM軟件包中。安裝時(shí),若RPM發(fā)現(xiàn)有沖突存在,將會(huì)中止安裝。
3.執(zhí)行安裝前腳本程序(Preinstall)
此類程序由軟件包制作者設(shè)定,需要在安裝前執(zhí)行。通常是檢測(cè)操作環(huán)境,建立有關(guān)目錄,清理多余文件等等,為順利安裝作準(zhǔn)備。
4.處理配置文件(Configfiles)
RPM對(duì)配置文件(Configfiles)有著特別的處理。因?yàn)橛脩舫3P枰鶕?jù)實(shí)際情況,對(duì)軟件的配置文件做相應(yīng)的修改。如果安裝時(shí)簡(jiǎn)單地覆蓋了此類文件,則用戶又得重新手工設(shè)置,很麻煩。這種情況下,RPM做得比較明智:它將原配置文件換個(gè)名字保存了起來(原文件名后綴加上.rpmorig),用戶可根據(jù)需要再恢復(fù),避免重新設(shè)置的尷尬。
5.解壓軟件包并存放到相應(yīng)位置
這是最重要的部分,也是軟件包安裝的關(guān)鍵所在。在這一步,RPM將軟件包解壓縮,將其中的文件一個(gè)個(gè)存放到正確的位置,同時(shí),文件的操作權(quán)限等屬性相應(yīng)設(shè)置正確。
6.執(zhí)行安裝后腳本程序(Postinstall)
此類程序?yàn)檐浖恼_執(zhí)行設(shè)定相關(guān)資源,如修改inetd.conf、運(yùn)行l(wèi)dconfig程序以利新的動(dòng)態(tài)鏈接庫生效等等。
7.更新RPM數(shù)據(jù)庫
安裝后,RPM將所安裝的軟件及相關(guān)信息記錄到其數(shù)據(jù)庫中,便于以后升級(jí)、查詢、校驗(yàn)和卸載。
8.執(zhí)行安裝時(shí)觸發(fā)腳本程序(Triggerin)
觸發(fā)腳本程序是指軟件包滿足某種條件(如已安裝軟件包sendmail,或file版本大于3.0)時(shí)才觸發(fā)執(zhí)行的腳本程序,它用于軟件包之間的交互控制。觸發(fā)腳本程序有三類:一是軟件包安裝時(shí)才觸發(fā)的,稱為安裝時(shí)觸發(fā)腳本程序(triggerin);二是軟件包卸載前觸發(fā)的,叫作卸載前觸發(fā)腳本程序(triggerun);三是軟件包卸載后才觸發(fā)執(zhí)行的,稱作卸載后觸發(fā)腳本程序(triggerpostun)。這些觸發(fā)腳本程序,大大擴(kuò)展了RPM軟件包管理的功能。
命令格式
安裝RPM格式的軟件包,可使用如下命令格式: rpm -i [安裝選項(xiàng)1 安裝選項(xiàng)2...]
包裹文件1 包裹文件2...
注:可用--install代替-i,效果相同。
選項(xiàng)列表
包裹文件
對(duì)于要安裝的RPM格式的包裹文件,RPM對(duì)其名字不作強(qiáng)制要求。用戶可以使用以下三種方式的命名樣式:
1.典型的命名樣式(常用): 格式為:軟件名-版本號(hào)-釋出號(hào).體系號(hào).rpm
注:體系號(hào)指的是執(zhí)行程序適用的處理器體系,如i386體系,sparc體系等。體系號(hào)為src時(shí)表明為源代碼包,否則為執(zhí)行程序包。
如abc-3.2-1.i386.rpm為執(zhí)行程序包,軟件名為abc,版本號(hào)為3.2,釋出號(hào)為1,適用體系為i386,而abc-3.2-1.src.rpm則為源代碼包。
2.URL形式的命名樣式(較常用)
*
FTP方式的命名格式:ftp://[用戶名[:密碼]@]主機(jī)[:端口]/包裹文件
注:[]括住的內(nèi)容表示可選。主機(jī)可以是主機(jī)名,也可是IP地址。包裹文件可含目錄信息。如未指定用戶名,則RPM采用匿名方式傳輸數(shù)據(jù)(用戶名為anonymous)。如未指定密碼,則RPM會(huì)根據(jù)實(shí)際情況提示用戶輸入密碼。如未指定端口,則RPM使用默認(rèn)端口(一般為21)。
如ftp://ftp.xxx.com/yyy.rpm
如ftp://24.109.164.55:1024/pub/yyy.rpm
如zhsoft@ftp.xxx.com/yyy.rpm">ftp://zhsoft@ftp.xxx.com/yyy.rpm
如password@ftp.xxx.com/yyy.rpm">ftp://zhsoft:password@ftp.xxx.com/yyy.rpm
3 HTTP方式的命名:格式為:http://主機(jī)[:端口]/包裹文件
注:[]括住的內(nèi)容可選。主機(jī)可以是主機(jī)名,也可是IP地址。包裹文件可含目錄信息。如未指定端口,則RPM默認(rèn)使用80端口。
如http://www.xxx.com/yyy.rpm
如http://www.xxx.com:8080/pub/yyy.rpm
3.其它形式(很少使用):
命名格式:任意
如將abc-3.2-1.i386.rpm改名為abc.txt,用RPM安裝也會(huì)安裝成功,其根本原因是RPM判定一個(gè)文件是否RPM格式,不是看名字,而是看內(nèi)容,看其是否符合特定的格式。
參數(shù):
一、安裝指定用選項(xiàng)
1.hash(或-h):以#顯示安裝進(jìn)度,如果一個(gè)軟件包很大、安裝費(fèi)時(shí)時(shí),用戶若想及時(shí)了解安裝進(jìn)度,必須用此選項(xiàng)。該選項(xiàng)以顯示#號(hào)表示進(jìn)度,每個(gè)#號(hào)表示2%的進(jìn)度,總共要顯示50個(gè)#號(hào)。下面安裝MySQL軟件包,如下所示:
# rpm -i --hash MySQL-3.22.32-1.i386.rpm
##################################################
#
從上看出,軟件包安裝順利完成。
2.percent:以%(百分比)顯示安裝進(jìn)度
percent的含義是百分比,而此選項(xiàng)的作用就是以百分比(%)來顯示安裝進(jìn)度的。同樣是安裝MySQL軟件包,下面的輸出就不一樣:
# rpm -i --percent MySQL-3.22.32-1.i386.rpm
%% 0.000000
%% 0.002600
%% 0.020586
......
%% 100.000000
#
上例中省略了很多輸出(......表示)。因?yàn)槿绻浖艽?,則用--percent時(shí)輸出的內(nèi)容會(huì)很多,所以用戶最好用--hash選項(xiàng),以#號(hào)來表示安裝進(jìn)度,這樣簡(jiǎn)潔明了。
3.test:安裝測(cè)試
所謂安裝測(cè)試,意即并非真正的安裝,它不拷貝和建立任何文件。使用本選項(xiàng)的目的在于:檢測(cè)軟件包的依賴關(guān)系是否滿足,是否存在潛在的沖突等等。
# rpm -i --test autofs-3.1.3-2.i386.rpm
error: failed dependencies:
mktemp is needed by autofs-3.1.3-2
#
本例進(jìn)行安裝測(cè)試時(shí)發(fā)現(xiàn)了依賴方面的錯(cuò)誤,autofs所需要的mktemp包不存在,安裝中斷。
下面先安裝mktemp軟件包,再進(jìn)行autofs安裝測(cè)試,看情況怎么樣:
# rpm -i mktemp-1.5-2.i386.rpm
# rpm -i --test autofs-3.1.3-2.i386.rpm
#
由上看出,這次測(cè)試沒有出現(xiàn)什么錯(cuò)誤。
4.replacepkgs:替換軟件包
為什么要替換軟件包?原因可能是系統(tǒng)中的軟件包已經(jīng)破壞了,其中一個(gè)或多個(gè)文件丟失或損毀。如果用戶想修復(fù)這個(gè)軟件包,用直接安裝的方法,RPM將報(bào)錯(cuò)退出:
# rpm -V file
missing/usr/man/man1/file.1
# rpm -i file-3.26-6.i386.rpm
package file-3.26-6 is already installed
#
注:本例先用RPM校驗(yàn)命令校驗(yàn)一下file軟件包,發(fā)現(xiàn)/usr/man/man1/file.1文件丟失。之后用安裝命令安裝,RPM提示軟件包file-3.26-6已經(jīng)安裝了。(有關(guān)RPM校驗(yàn)命令,<<精通RPM之六--校驗(yàn)篇>>中將會(huì)有詳細(xì)的介紹)
如果采用--replacepkgs選項(xiàng),結(jié)果又怎樣呢?
# rpm -i --replacepkgs file-3.26-6.i386.rpm
# rpm -V file
#
看來,RPM成功地替換了原軟件包,校驗(yàn)一下該包,發(fā)現(xiàn)沒有錯(cuò)誤輸出,所以現(xiàn)在的軟件包是完整的。
5.replacefiles:替換文件
RPM是聰明的軟件包管理器,它維護(hù)著每個(gè)已安裝軟件包的文件信息。如果在安裝一個(gè)新的軟件包時(shí),RPM發(fā)現(xiàn)其中某個(gè)文件和已安裝的某個(gè)軟件包中的文件名字相同但內(nèi)容不同,那么RPM就會(huì)認(rèn)為這是一個(gè)文件沖突,會(huì)報(bào)錯(cuò)退出:
# rpm -i ff-4.0-2.i386.rpm
file /root/my.a from install of ff-4.0-2 conflicts with file from package
zoo-6.0-1
#
注:本例中RPM發(fā)現(xiàn)要安裝的軟件包ff-4.0-2與已安裝的軟件包zoo-6.0-1中,含有相同的一個(gè)文件/root/my.a,但其內(nèi)容并不相同,所以提示了文件沖突的錯(cuò)誤。
如果用戶想忽略這個(gè)錯(cuò)誤,可使用--replacefiles選項(xiàng),指示RPM發(fā)現(xiàn)文件沖突時(shí),直接替換掉原文件即可。注意:除非用戶對(duì)所沖突的文件有很深的了解,不要輕易替換文件,以免破壞已安裝軟件包的完整性,確保其能正常運(yùn)行。
# rpm -i --replacefiles ff-4.0-2.i386.rpm
#
采用該選項(xiàng)后,軟件包能順利安裝了。
另外,說到替換文件,若要安裝的軟件包中的文件已存在,但此文件并不屬于任何軟件包,RPM的做法是將文件換名保存(文件名后綴加.rpmorig),并且以警告信息提醒用戶。如下所示:
# rpm -i foo-6.0-1.i386.rpm
warning: /etc/foo.conf saved as /etc/foo.conf.rpmorig
#
6.allfiles:安裝所有文件
讀者看到此選項(xiàng),也許要問:難道RPM安裝軟件包不是安裝其中所有的文件嗎? 我的回答是:如果是初次安裝的話,RPM確是將包中所有文件全部安裝。但是,如果是修復(fù)軟件包(用--replacepkgs選項(xiàng)),那結(jié)果就不一定了。個(gè)中原因是:RPM包中有些配置文件可標(biāo)識(shí)為missingok屬性(missingok指的是即使丟失,照樣OK),這樣的包安裝后,若這種類型的配置文件被刪除,則修復(fù)時(shí)RPM默認(rèn)的做法是不再安裝這種類型的文件,除非采用--allfiles選項(xiàng)。下面看個(gè)實(shí)際的例子:
# rpm -i foo-6.0-1.i386.rpm
# ls -l /etc/foo.conf
-rw-r--r-- 1 root root9 Oct 11 09:50 /etc/foo.conf
# rm -f /etc/foo.conf
# rpm -i --replacepkgs foo-6.0-1.i386.rpm
# ls -l /etc/foo.conf
ls: /etc/foo.conf: 文件或目錄不存在
# rpm -i --replacepkgs --allfiles foo-6.0-1.i386.rpm
# ls -l /etc/foo.conf
-rw-r--r-- 1 root root9 Oct 11 09:50 /etc/foo.conf
注:本例中已預(yù)先知道foo包中的配置文件/etc/foo.conf帶有missingok屬性。
(1)用rpm -i命令安裝foo包;
(2)用ls命令列一下屬于該包的配置文件/etc/foo.conf(能列出來,表明文件存在);
(3)用rm命令刪除了這個(gè)文件;
(4)用rpm -i --replacepkgs命令修復(fù)foo軟件包;
(5)因?yàn)樾迯?fù)時(shí)未用--allfiles選項(xiàng),所以用ls命令列文件/etc/foo.conf時(shí)出錯(cuò)了:文件不存在,沒有安裝上;
(6)用rpm -i --replacepkgs --allfiles命令安裝修復(fù)foo軟件包;
(7)再度用ls命令列文件,列了出來,表明這次安裝上了。
由本例看出,若用戶確實(shí)想安全恢復(fù)(修復(fù))某個(gè)軟件包,最好使用--allfiles選項(xiàng)。一般情況下則不必這么做,因?yàn)閹в衜issingok屬性的配置文件本來就是可以丟失的嘛,不必太在意了。
7.force:強(qiáng)制執(zhí)行
force的含義是強(qiáng)制。--force選項(xiàng)的作用就是強(qiáng)制安裝軟件包,不考慮軟件包是否已安裝,也不考慮有沒有文件沖突。其效果相當(dāng)于同時(shí)選用--replacepkgs與--replacefiles選項(xiàng)進(jìn)行安裝。
8.excludedocs:不安裝說明文檔
RPM有多個(gè)好功能,其中之一就是:它將文件分為配置文件,說明文檔和其它文件三種,這樣便于區(qū)別對(duì)待,靈活處理。
基于RPM安裝的LINUX發(fā)行版中包括5000多個(gè)說明文檔,有50M字節(jié),占用的空間不小。如果想節(jié)省空間,可使用--excludedocs選項(xiàng)以排除安裝說明文檔。
如軟件包file中包含/usr/man/man1/file.1和/usr/man/man4/magic.4兩個(gè)說明文檔。安裝時(shí)若使用--excludedocs選項(xiàng),這兩個(gè)文檔就不會(huì)被安裝。
# rpm -i --excludedocs file-3.26-6.i386.rpm
# ls -l /usr/man/man1/file.1
ls: /usr/man/man1/file.1: 文件或目錄不存在
# ls -l /usr/man/man4/magic.4
ls: /usr/man/man4/magic.4: 文件或目錄不存在
#
如果用戶想讓RPM默認(rèn)不安裝說明文檔,則可以這么做:編輯~/.rpmmacros文件(用戶主目錄HOME下的RPM宏文件),加入下面一行:
%_excludedocs 1
其作用是定義RPM內(nèi)部的_excludedocs宏為1,確認(rèn)不安裝說明文檔。
這樣的話,就不用在命令行使用--excludedocs選項(xiàng)了。
# rpm -i file-3.26-6.i386.rpm
# ls -l /usr/man/man1/file.1
ls: /usr/man/man1/file.1: 文件或目錄不存在
# ls -l /usr/man/man4/magic.4
ls: /usr/man/man4/magic.4: 文件或目錄不存在
#
9.includedocs:安裝說明文檔
RPM一般情況下是安裝說明文檔的,但是如果用戶自行修改了設(shè)定(象上面的例子),則RPM就不再安裝說明文檔了,除非特別指定,這就用到--includedocs選項(xiàng)。這種情況下,只有用此選項(xiàng)才能確保安裝說明文檔。
# rpm -i --includedocs file-3.26-6.i386.rpm
# ls -l /usr/man/man1/file.1
-rwxr-xr-x 1 root root12023 Mar 23 1999 /usr/man/man1/file.1
# ls -l /usr/man/man4/magic.4
-rwxr-xr-x 1 root root 6625 Mar 23 1999 /usr/man/man4/magic.4
#
10.noscripts:不執(zhí)行腳本程序
一個(gè)RPM軟件包中可包含五種腳本程序,即:安裝前腳本程序,安裝后腳本程序,卸載前腳本程序,卸載后腳本程序和校驗(yàn)?zāi)_本程序。安裝時(shí)使用--noscripts選項(xiàng),可禁止安裝前與安裝后腳本程序的執(zhí)行。
# rpm -i foo-6.0-1.i386.rpm
preinstall is running ... done
postinstall is running ... done
#
上面不禁止腳本程序的執(zhí)行,下面不執(zhí)行腳本程序,請(qǐng)看輸出結(jié)果:
# rpm -i --noscripts foo-6.0-1.i386.rpm
#
看,因?yàn)闆]有安裝前與安裝后腳本程序的執(zhí)行,所以沒有什么輸出了。
注意:一般用戶不要使用此選項(xiàng)。此選項(xiàng)主要提供給軟件包制作者使用的。通過禁止執(zhí)行腳本程序,可以防止因安裝帶有BUG的軟件包而宕掉整個(gè)系統(tǒng)。當(dāng)軟件包去掉了BUG后,此選項(xiàng)就不必使用了。
11.nodeps:不檢查依賴
RPM管理軟件包,不僅管理包中的所有文件,還同時(shí)管理著軟件包之間的依賴關(guān)系。如A依賴于B運(yùn)行,若B不存在了,則A也就運(yùn)行不了了。RPM維護(hù)著這種關(guān)系,盡量避免破壞,以保證軟件的正常運(yùn)行。
# rpm -i autofs-3.1.3-2.i386.rpm
error: failed dependencies:
mktemp is needed by autofs-3.1.3-2
#
本例安裝中出現(xiàn)了依賴方面的錯(cuò)誤(autofs依賴mktemp,但mktemp不存在),安裝過程中斷了。如果要RPM不管依賴關(guān)系是否正常都安裝,就要用--nodeps選項(xiàng),指示RPM不檢查依賴,這樣就能正常安裝了。
# rpm -i --nodeps autofs-3.1.3-2.i386.rpm
#
注:除非用戶對(duì)軟件包有足夠了解,或只想看看軟件,否則不要使用本選項(xiàng),以維護(hù)軟件間正常的依賴關(guān)系。
12.notriggers:不執(zhí)行觸發(fā)程序
為了軟件包間的交互控制,RPM設(shè)計(jì)了三種觸發(fā)程序:安裝時(shí)觸發(fā)程序,卸載前觸發(fā)程序和卸載后觸發(fā)程序。為了防止因某一軟件包的安裝而引發(fā)安裝時(shí)觸發(fā)程序的執(zhí)行,可以使用--notriggers選項(xiàng)。
13.ignorearch:忽略體系與ignoreos :忽略操作系統(tǒng)
何謂體系?體系就是CPU的類別,有Intel的x86(如i386,i486系列)體系,有Sun的sparc體系等等。當(dāng)一個(gè)軟件包建立時(shí),RPM就為其指定了所適用的CPU體系,也為其指定了所適用的操作系統(tǒng)。這樣做的好處就是,RPM容易知道為一臺(tái)計(jì)算機(jī)所建立的軟件包是否適用于兼容于另一臺(tái)計(jì)算機(jī)。RPM的資源配置文件(默認(rèn)為/usr/lib/rpm/rpmrc)中,就定義了體系的兼容關(guān)系(arch_compat表達(dá))和操作系統(tǒng)的兼容關(guān)系(os_compat表達(dá))。RPM安裝一個(gè)包裹文件時(shí),要做這樣一個(gè)兼容方面的檢查。如果用戶想忽略體系,不管其是否兼容,請(qǐng)用--ignorearch選項(xiàng)安裝。如果也不管操作系統(tǒng)是否兼容,可用--ignoreos選項(xiàng)。需要指出的是,若非知道自己這樣的目的,否則不要試圖這樣做。
14.ignoresize:不檢查空間大小
RPM安裝軟件包前,首先要檢查當(dāng)前系統(tǒng)是否有足夠的剩余空間,如果空間不足的話,安裝將無法完成。使用本選項(xiàng)的目的,在于指示RPM不做空間大小方面的檢查,意即不管系統(tǒng)是否有容納要安裝的軟件包的空間,照直安裝就行了。
15.relocate:重定位
RPM軟件包在制作過程中,可以定義一個(gè)或多個(gè)重定位前綴,以此方便軟件的重定位(即把軟件包中的文件放到自定義的目錄下面),從而增加軟件包安裝的靈活性。
本選項(xiàng)用于更換指定的重定位目錄,如果一個(gè)包有多個(gè)重定位前綴,可以使用本選項(xiàng)多次。
# rpm -qpl file-3.26-6.i386.rpm
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
# rpm -i --relocate /usr=/tmp file-3.26-6.i386.rpm
# rpm -ql file
/tmp/bin/file
/tmp/man/man1/file.1
/tmp/man/man4/magic.4
/tmp/share/magic
#
注:本例中先用rpm -qpl列出包裹文件file-3.26-6.i386.rpm當(dāng)中的文件,可以看到其中的文件均是以/usr開頭的。之后進(jìn)行重定位安裝,將/usr換作/tmp。最后從列出已安裝的file包的文件列表可以看出,原來的/usr目錄前綴換作指定的前綴/tmp了,這樣實(shí)現(xiàn)了軟件的重定位。(關(guān)于RPM查詢命令,詳見<<精通RPM之五--查詢篇>>)
16.badreloc:強(qiáng)制重定位
RPM軟件包的重定位,依賴于制作時(shí)重定位前綴的定義。如果沒有定義重定位前綴,或者用戶安裝時(shí)所指定的重定位前綴不存在,則RPM會(huì)報(bào)錯(cuò)退出,中斷安裝。此時(shí),若用本選項(xiàng),則RPM會(huì)不管這些錯(cuò)誤,進(jìn)行強(qiáng)制的重定位安裝。注:本選項(xiàng)和--relocate選項(xiàng)同時(shí)使用時(shí)才有意義。
如上例,采用并不存在的重定位前綴/usr/man進(jìn)行安裝:
# rpm -i --relocate /usr/man=/tmp file-3.26-6.i386.rpm
path /usr/man is not relocateable for package file-3.26-6
#
RPM提示了錯(cuò)誤:/usr/man目錄在file-3.26-6包中是不可重定位的。
如加上--badreloc選項(xiàng),結(jié)果怎么樣:
# rpm -i --relocate /usr/man=/tmp --badreloc file-3.26-6.i386.rpm
# rpm -ql file
/usr/bin/file
/tmp/man1/file.1
/tmp/man4/magic.4
/usr/share/magic
#
由上可以看到,這樣的強(qiáng)制重定位獲得通過,之后再用查詢命令rpm -ql列一下file包的文件,就會(huì)發(fā)現(xiàn)原來的/usr/man/man1/file.1定位成了/tmp/man1/file.1,而/usr/man/man4/magic.4則成了/tmp/man4/magic.4。怎么樣?神奇吧!
17.excludepath:不安裝指定目錄下的文件
利用此選項(xiàng),可以禁止RPM安裝某些指定目錄下的文件。如不想安裝file軟件包中的說明文檔,除了可使用--excludedocs選項(xiàng)外,還可使用本選項(xiàng)。因?yàn)閒ile的說明文檔均在目錄/usr/man下面。
# rpm -i --excludepath /usr/man file-3.26-6.i386.rpm
# rpm -qls file
normal/usr/bin/file
not installed /usr/man/man1/file.1
not installed /usr/man/man4/magic.4
normal/usr/share/magic
#
注:例子中先安裝file軟件包,并用--excludepath禁止安裝/usr/man下的文件,再用RPM查詢命令rpm
-qls列出file包的文件及狀態(tài),可以看到:/usr/man下的兩個(gè)文件均未安裝(not installed)。
18.justdb:僅更新數(shù)據(jù)庫
安裝軟件包使用此選項(xiàng)后,RPM將只更新其數(shù)據(jù)庫數(shù)據(jù),文件系統(tǒng)不更新,意即并不拷貝和建立包中的文件。
# rpm -i --justdb file-3.26-6.i386.rpm
# rpm -qls file
normal/usr/bin/file
normal/usr/man/man1/file.1
normal/usr/man/man4/magic.4
normal/usr/share/magic
# ls -l /usr/bin/file
ls: /usr/bin/file: 文件或目錄不存在
#
注:例子中安裝file包但指明只更新數(shù)據(jù)庫,結(jié)果是:雖然用查詢命令查到該軟件包中所有文件狀態(tài)均正常(normal),但用ls命令列包中所含文件/usr/bin/file,該文件卻不存在。這表明包中文件并未建立。
19.prefix:指定重定位前綴
如前所述,可重定位的軟件包可含一個(gè)或多個(gè)重定位前綴,可用--relocate選項(xiàng)來改變某個(gè)重定位前綴之值。--prefix選項(xiàng)僅能用來改變默認(rèn)的重定位前綴(默認(rèn)是第一個(gè)重定位前綴),它不需要說明原重定位前綴。下面的例子同樣將file包安裝到/tmp目錄:
# rpm -qpl file-3.26-6.i386.rpm
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
# rpm -i --prefix /tmp file-3.26-6.i386.rpm
# rpm -ql file
/tmp/bin/file
/tmp/man/man1/file.1
/tmp/man/man4/magic.4
/tmp/share/magic
#
20.ftpproxy:指定FTP代理主機(jī)
本選項(xiàng)指定FTP代理主機(jī),主機(jī)可以是主機(jī)名,也可以是IP地址。
21.ftpport:指定FTP端口
本選項(xiàng)指定FTP協(xié)議使用的TCP端口,系統(tǒng)默認(rèn)是21。
請(qǐng)看下面的例子:
# rpm -iv --ftpport 8888 ftp://root@xwboc/tmp/file-3.26-6.i386.rpm
Password for root@xwboc:
Password for root@xwboc:
Retrieving ftp://root@xwboc/tmp/file-3.26-6.i386.rpm
file-3.26-6
#
本例中用FTP方式安裝file軟件包,數(shù)據(jù)傳輸使用8888端口。執(zhí)行中,RPM先提示輸入root用戶的密碼兩次,之后下載(retrieve)軟件,最后成功安裝。
22.httpproxy:指定HTTP代理主機(jī)
本選項(xiàng)指定HTTP代理主機(jī),主機(jī)可以是主機(jī)名,也可以是IP地址。
23.httpport:指定HTTP端口
本選項(xiàng)指定HTTP協(xié)議使用的TCP端口,系統(tǒng)默認(rèn)是80。下面的例子就指定了80端口來安裝autofs軟件,當(dāng)然不指定也行,因?yàn)橄到y(tǒng)默認(rèn)的就是這個(gè)端口。
# rpm -iv --httpport 80 http://24.109.164.55/rpms/autofs-3.1.3-2.i386.rpm
Retrieving http://24.109.164.55/rpms/autofs-3.1.3-2.i386.rpm
autofs-3.1.3-2
#
注:同F(xiàn)TP方式一樣,RPM都是下載再安裝。
二、通用選項(xiàng)
所謂通用選項(xiàng),就是不管是安裝,升級(jí),卸載還是其它軟件包操作,統(tǒng)統(tǒng)適用的選項(xiàng)。 這樣的選項(xiàng)主要以下幾個(gè):
1.-v:顯示附加信息
一般情況下,RPM和不少LINUX命令(如cp,rm,mv等)一樣,都本著盡可能少輸出信息的原則(除非必要,否則不要輸出),這樣做是為了避免浪費(fèi)CPU資源。所以,當(dāng)用戶使用某個(gè)命令后沒有什么輸出,這就意味著命令執(zhí)行成功了。如果有什么錯(cuò)誤,程序會(huì)提示的。RPM也是這個(gè)樣子。為了使RPM輸出多一點(diǎn)的信息,可以使用-v選項(xiàng)。
如不帶此選項(xiàng)安裝file包,沒有輸出:
# rpm -i file-3.26-6.i386.rpm
#
而采用-v選項(xiàng)后安裝時(shí)輸出了包名:
# rpm -i -v file-3.26-6.i386.rpm
file-3.26-6
#
2.-vv:顯示調(diào)試信息
選用-vv選項(xiàng),可以使RPM輸出更多的信息。這些信息,主要供RPM軟件開發(fā)者研究使用的,一般用戶也可以看看,從中可以知道RPM究竟干些什么。
下面采用此選項(xiàng)安裝file包,同時(shí)使用管道線(|)將輸出數(shù)據(jù)送nl命令,以帶行號(hào)輸出每行數(shù)據(jù)。
從執(zhí)行結(jié)果看,輸出的信息很多,其中以D:開頭的行均是調(diào)試信息。現(xiàn)在逐行解釋:
第1行:統(tǒng)計(jì)要安裝的軟件包個(gè)數(shù);
第2行:RPM找到1個(gè)包;
第3行:查看哪些包需要下載(這些要下載的包,都是以FTP或HTTP形式書寫的包名);
第4行:下載了0個(gè)包;
第5-10行:取包裹文件的文件頭信息,算出軟件包占用的空間68019(字節(jié)),以利檢查
系統(tǒng)是否有足夠空間。
第11行:打開RPM數(shù)據(jù)庫;
第12行:找到0個(gè)源代碼包,1個(gè)執(zhí)行代碼包;
第13-18行:檢查軟件包的依賴關(guān)系。其依賴(requires)的東西均得到滿足(satisfied)。
第19行:準(zhǔn)備安裝執(zhí)行代碼包;
第20行:取得已安裝文件系統(tǒng)的列表;
第21-26行:再度取包裹文件頭信息,算出軟件包占用空間;
第27-31行:列出包中文件及要執(zhí)行的操作,第27行的test=0表示不是進(jìn)行安裝測(cè)試,
file包中的文件均要執(zhí)行創(chuàng)建操作(create)。
第32行:如果有安裝前執(zhí)行腳本程序的話,執(zhí)行它;
第33行:安裝軟件包file-3.26-6;
第34行:如果有安裝后執(zhí)行腳本程序的話,執(zhí)行它。
3.root:指定根目錄
指定根目錄ROOT,其作用在于將系統(tǒng)所有操作限定在指定的目錄下面,這樣RPM操作的數(shù)據(jù)庫位置變了,軟件包的安裝位置也變了。它是通過chroot系統(tǒng)調(diào)用實(shí)現(xiàn)的。RPM默認(rèn)的數(shù)據(jù)庫目錄是/var/lib/rpm,如果指定根目錄為/usr,則RPM的數(shù)據(jù)庫目錄將變?yōu)?usr/var/lib/rpm。同樣,如果包中有個(gè)文件為/etc/zhsoft.txt,則安裝后為/usr/etc/zhsoft.txt。
看下面的例子:
# rpm -i --root /usr file-3.26-6.i386.rpm
failed to open /usr/var/lib/rpm/packages.rpm
error: 不能打開 /usr/var/lib/rpm/packages.rpm
#
注:指定RPM根目錄為/usr安裝file出現(xiàn)錯(cuò)誤,RPM打不開/usr/var/lib/rpm/packages.rpm文件,這是因?yàn)閷?shí)際上在/usr/var/lib/rpm目錄下沒有任何RPM數(shù)據(jù)庫。如果想成功安裝,可用初始化RPM數(shù)據(jù)庫命令來建立RPM數(shù)據(jù)庫,命令是rpm
--initdb --root /usr(這些功能將在以后講到)。
4.rcfile:指定RPM資源配置文件
RPM的資源配置文件里,存放著RPM的默認(rèn)設(shè)置,有編譯選項(xiàng)optflags,體系定義arch_canon,兼容定義arch_compat,宏文件定義macrofiles等。RPM默認(rèn)的資源配置文件(按讀取順序)為:/usr/lib/rpm/rpmrc,/etc/rpmrc,~/.rpmrc。(后兩個(gè)文件現(xiàn)在意義不大了,如今一般換作RPM宏文件了。較之資源配置文件,宏文件有更大的靈活性。)
如果想讓RPM使用用戶指定的資源配置文件,就用--rcfile來設(shè)定,可同時(shí)設(shè)定多個(gè)文件,文件間以冒號(hào)(:)分隔,如/usr/lib/rpm/rpmrc:/etc/rpmrc:~/.rpmrc這種形式。
5.dbpath:指定RPM數(shù)據(jù)庫目錄
本選項(xiàng)不同于--root選項(xiàng),它僅僅是指定RPM數(shù)據(jù)庫的目錄,并不改變安裝文件的位置。
評(píng)論
查看更多