作者:雨亦奇 趙建利 從一般意義上說,軟件包的安裝其實是文件的拷貝,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.xxx.com,包裹文件yyy.rpm); 如ftp://24.109.164.55:1024/pub/yyy.rpm(匿名FTP傳輸,主機IP:24.109.164.55,使用1024端口,包裹文件在/pub目錄下); 如ftp://
[email protected]/yyy.rpm(主機ftp.xxx.com,FTP用戶名zhsoft,如有密碼,RPM將會自動提示輸入); 如ftp://zhsoft:
[email protected]/yyy.rpm(主機ftp.xxx.com,FTP用戶名zhsoft,密碼password)。 * HTTP方式的命名:http://主機[:端口]/包裹文件 注:[]括住的內容可選。主機可以是主機名,也可是IP地址。包裹文件可含目錄信息。如未指定端口,則RPM默認使用80端口。 如http://www.xxx.com/yyy.rpm(用HTTP獲取www.xxx.com主機上的yyy.rpm文件); 又如http://www.xxx.com:8080/pub/yyy.rpm(用HTTP獲取www.xxx.com主機上/pub目錄下的yyy.rpm文件,使用端口8080)。 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校驗命令,中將會有詳細的介紹) 如果采用--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 # 采用該選項後,軟件包能順利安裝了。 另外,說到替換文件,若要安裝的軟件包中的文件已存在,但此文件並不屬於