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