AIX操作系統可以安裝包括rpm及installp格式的軟件包。其中installp是AIX系統特有的軟件包格式, 它提供了強大的管理能力,但是,同時它也包含了很多容易混淆的概念(如fileset, package, lpp 等等 ),許多有經驗的系統管理員仍經常不能正確地理解它們的含義及相互關系。本文通過探討一些 AIX installp軟件包的基本概念及內部機理,使管理員對AIX installp軟件包有較深入的理解,並能在實踐中 靈活的運用installp的強大功能。
另外,本文的最後部分總結了一些在日常管理 AIX installp軟 件包中經常遇到的問題並給出了解決方案,留給 AIX系統管理員參考使用。
AIX installp軟件包 基本概念
fileset
在AIX 5L操作系統的文件打包結構中,把文件分成了許多 fileset 。每 個fileset 包含的是一組邏輯上相關的文件。例如:與 TCP/IP 客戶端功能相關的文件都打包在 bos.net.tcp.client fileset中。fileset是最小的可獨立安裝實體,每個fileset都是可以單獨安裝、升 級、卸載的。Fileset的版本號由四個域組成,分別是:Version, Release, Maintenance level和Fix level組成,稱作VRMF。(例如:bos.rte 5.3.0.0表示version域為5, release域為3, Maintenance level域為0 , Fix level域為0)。
package
多個相關的fileset可以被打包到一起,形成 一個安裝鏡像或者一個BFF(Backup Format File),也被稱為package 。通常,一個package 裡可以包含 一個或者多個fileset。
LPP(Licensed Program Product)
LPP 就像他的英文定義一樣,對 於用戶來說 LPP是用戶可以用來購買的產品。它可以是一系列的package 或者只是一個單獨的package。 一般情況下,用戶可以選擇不一次購買整個LPP 而只是購買其中的幾個package。
圖1 fileset/package/LPP 之間的關系
由圖1可以清楚的看到 ,例子中的每個package都只包含有一個fileset,而 CSM LPP 包含 csm.core, csm.deploy及csm.server 3 個package.
圖2
圖2是一個更加復雜的 軟件包關系圖。可以看到每個package中都包含了大量的fileset,而一個LPP中又包含了大量的package。 這也是AIX中最普遍的情況。
VRMF
VRMF是系統版本號(Version)、發行版本號 (Release) 、改進版本號 (Modification level)和修正版本號 (Fix level)的首字母的集合。這四個數字組合再一 起,表示了軟件包的版本。下面我們分別對這四個版本號進行詳細的解釋 .
系統版本號(Version )——一個兩位的數字用來表示產品的發布版本。例如:AIX5L,其中的5 就是操作系統的版 本號。
發行版號(Release)——發行版號也是由一個兩位數字表示,它代表了軟件的 發行版本。例如:AIX5.3,其中的3 就是發行版號,我們在這裡省略了十位的0,將 03 簡寫為3.
改進版號(Modification level)——是由一個四位數字組成,表示最新的改進版級別。一般 情況下,每過一段時間,軟件發布者會將大量的更新打包成一個安裝鏡像並發布,此時改進版本級別會被 改變。
修正版本號(fix level)——是由一個四位數字組成,表示最新的fileset 修 正版本。軟件每經過一次修正,其修正版本號都會增加一次,直到改進版本號升高,修正版本號將被重置 為0。
AIX軟件包結構
usr部分、root部分和share部分
AIX 為了實現在客戶機 / 服 務器環境下安裝的靈活性將安裝包劃分為usr部分 (usr part)、root部分 (root part)和share部分 (share part)。
a)usr部分 : 這個部分包括了 lpp_name和liblpp.a兩個控制文件以及軟件包中可 以被多個同構硬件共享的文件。在一個標准的AIX系統中,這些文件被放置在/usr 目錄樹下。
b) root部分這個部分包含了 liblpp.a 歸檔文件以及產品中不能被多個機器共享的部分。換句話說,每個機 器必須有它自己的一個獨立拷貝,這個部分和每台機器的配置相關聯。在一個標准的AIX系統中,這些文 件被放置在根(/)目錄樹下。如果一個fileset 包含一個root部分那它也必須包含一個usr部分。
./usr/lpp/PackageName/liblpp.a 這是一個歸檔文件,它包括了安裝或升級軟件的root部分時所 需要的控制文件。
c)share部分 : 這個部分包括了軟件包中可以被多個異構硬件共享的文件。一 般這個部分包括軟件包中的非可執行文件,例如:文檔和數據文件。在一個標准的AIX系統中,這些文件 被放置在/usr/share 目錄樹下。share部分必須和usr/root部分分開打包,即包括share部分的fileset 裡不能包含 usr/root部分,並且包含 share部分的fileset 不能和包含 usr/root部分的fileset 同名。
圖3 AIX 包結構
在圖3中,我們可以看 到,一個典型的AIX軟件包中包含 usr部分和root部分。每個部分中又包含著控制文件和安裝文件。下面 我們將對圖3中的內容做詳細的介紹。
上一節我們已經提到安裝包的usr部分包含兩個安裝控制文 件:lpp_name和liblpp.a以及所有在安裝和升級 usr部分時將被安裝的文件。下面我們分別對兩個控制文 件做一個簡單的介紹:
./lpp_name
這個文件提供了軟件包安裝和升級的信息 .
./usr/lpp/PackageName/liblpp.a
這是一個庫文件,它包括了安裝或升級軟件的usr部分 時所需要的所有控制文件。
安裝包的root部分包含 ./usr/lpp/PackageName/inst_root/liblpp.a 庫文件以及所有在安裝和升級 root部分時將被安裝的文件。
./usr/lpp/PackageName/inst_root/liblpp.a
這也是一個庫文件,它包括了安裝或升級軟 件的root part 時所需要的所有控制文件。
如果軟件產品中包含 share部分,share部分必須獨立 於usr和root部分被單獨的打包。這個部分和usr部分非常相似也包換./lpp_name和liblpp.a以及所有在安 裝和升級 share部分時將被安裝的文件。
installp的包管理流程
圖4
圖4 顯示了 installp 對包進行操作中,所牽涉的資源和文件。下面,我們將對installp操作包的流程做詳細的介紹。請大家參 考圖4 進行理解。
installp 對包提供了如下四種主要的操作:
Apply
Commit
Reject
Remove
下面我們分別對Apply/Reject/Remove 的流程做詳細的介紹:
installp 處理 Apply操作的流程:
a.檢查所需的filesets是否在 安裝媒介上存在。
b.檢查所需的filesets的版本,以確定他們是否已經被安裝在系統上。
c.解包 liblpp.a文件,將其中的控制文件按照包的類型拷貝到相應目錄。(usr部分拷貝到 /usr/lpp/Package_Name,share部分拷貝到 /usr/share/lpp/Package_Name,root部分拷貝到 /usr/lpp/Package_Name/inst_root/liblpp.a)
d.檢查磁盤空間。
e.檢查所依賴的包是否 已經安裝或者在即將安裝的軟件包列表上。
f.檢查 license 。
h.執行安裝(拷貝文件, 運行安裝腳本)並生成 status文件。
g.如果status文件顯示apply操作成功,更新 ODM 數據庫中 的SWVPD 信息,否則清除並顯示所有失敗的文件。
installp 處理 Reject操作的流程
檢查 軟件包之間的依賴關系,保證所有被依賴的包都已被 Reject 。
如果./lpp.reject 存在則執行 ./lpp.reject,否則執行系統缺省的/usr/lib/instl/reject 腳本,進行和Apply 反向的Reject操作
更新 SWVPD 數據
installp 處理 Remove操作的流程
a.檢查包之間的依賴關系,保 證所有被依賴的包也都被 Remove 。
b.如果./lpp.deinstall 存在則執行 ./lpp.deinstall ,否 則執行系統缺省的/usr/lib/instl/deinstall 腳本。
c.刪除屬於此 fileset的文件。
d. 從 SWVPD中刪除相關信息。
e.刪除軟件 license 許可。
AIX 上的軟件包基本維護
如何安裝軟件
由第3章我們知道軟件包在被安裝後,可以處於applied和committed兩種狀態。 applied狀態會在/usr/lpp/PackageName 目錄保留軟件包的前一個版本。當軟件包的新版本出現問題時, 用戶可以方便的回滾到前一個穩定版本。而 committed狀態則會刪除軟件所有以前的版本,用戶不再可以 進行回滾操作。下面,我們就分別介紹如何將軟件包安裝為applied狀態和committed狀態。
在AIX 中,用戶可以通過命令行和SMIT 來進行軟件包的安裝。由於篇幅關系,我們在這裡只介紹命令行方式。
在命令行模式下,軟件包安裝通過 installp命令來完成,下面列出了將軟件包安裝成 applied 模式的installp命令語法:
installp -a [ -eLogFile ] [ -V Number ] [ -dDevice ] [ -b ] [ -S ] [ -B ] [ -D ] [ -I ]
[ -p ] [ -Q ] [ -q ] [ -v ] [ -X ] [ -F | -g ] [ -O { [ r ] [ s ] [ u ] } ]
[ -tSaveDirectory ] [ -w ] [ -zBlockSize ] { FilesetName [ Level ]...| -f ListFile | all}
例如:要安裝放置在/usr/sys/inst.images 目錄中的bos.net 軟件包中的所有filesets,在安裝中使用checksum 檢查,並使軟件包處於applied狀態。使用下面這個命 令:
installp -avX -d/usr/sys/inst.images bos.net
將軟件安裝為 commited狀態,請使用下邊的語法:
installp -ac [ -N ] [ -eLogFile ] [ -V Number ] [ -dDevice ] [ -b ] [ -S ] [ -B ] [ -D ]
[ -I ] [ -p ] [ -Q ] [ -q ] [ -v ] [ -X ] [ -F | -g ] [ -O { [ r ] [ s ] [ u ] } ]
[ -tSaveDirectory ] [ -w ]
[ -zBlockSize ] { FilesetName [ Level ]...| -f ListFile | all }
例如:要模擬安裝放置 在/usr/sys/inst.images 目錄中的bos.net軟件包中的所有filesets,在安裝前進行磁盤容量檢查,並使 軟件包處於committed狀態。使用下面這個命令:
installp -acpX - d/usr/sys/inst.images bos.net
installp命令的輸出記錄可以 在/var/adm/sw/installp.summary文件中找到
如何 commit applied軟件包
commit 一個處 於applied狀態的軟件包,也是使用installp命令來完成的。語法如下:
installp -c [ - eLogFile ] [ -VNumber ] [ -b ] [ -g ] [ -p ] [ -v ] [ -X ]
[ -O { [ r ] [ s ] [ u ] } ] [ -w ] { FilesetName [ Level ]...| -f ListFile | all }
例如:commit 所有的軟件 包更新
installp -cgX all
如何 reject applied軟件包
reject 一 個處於applied狀態的軟件包,是使用installp命令來完成的。語法如下:
installp -r [ -eLogFile ] [ -VNumber ] [ -b ] [ -g ] [ -p ] [ -v ] [ -X ]
[ -O { [ r ] [ s ] [ u ] } ] [ -w ] { FilesetName [ Level ]...| -f ListFile }
例如:reject 所有寫 在./reject.list文件中的applied狀態的軟件包
installp -rBfX ./reject.list
如何卸載軟件包
卸載軟件包,也是使用installp命令來完成的。語 法如下:
installp -u [ -eLogFile ] [ -VNumber ] [ -b ] [ -g ] [ -p ] [ -v ] [ -X ]
[ -O { [ r ] [ s ] [ u ] } ] [ -w ] { FilesetName [ Level ]...| -f ListFile }
例如:模擬卸載 bos.net.ipsec.rte和所以他依賴的包
installp -ugp -V2 bos.net.ipsec.rte
這個命令將顯示所有將被卸載的文件列表,但是並不會真的刪除它們 。
安裝失敗後如何清理環境
如果一個軟件包安裝失敗,installp 將不能夠再次安裝這個 軟件包,直到用戶刪除了在失敗點之前的成功安裝。要清理失敗的環境可以使用下面的命令:
installp -C [ -b ] [ -eLogFile ]
AIX軟件包管理 FAQ
問 1:如 何得到目前的system level ?
答:使用oslevel命令,例如:
-bash-2.05b# oslevel -s
5300-01-00-0000
5300—VR
01---TL
00---SP
0000—SPdate
注:TL(Technical Level)指 AIX操作系統的技術版本(以前稱為 ML, Maintenance Level),包括硬件、軟件的新功能和傳統的補丁。SP( Service Pack)是服務補丁版本 ,包括一些不能等到下一個TL推出的關鍵的補丁及非常有限的新硬件驅動。如果想了解具體有關信息,請 參照《IBM AIX Operating System Service Strategy Details and Best
Practices》 (https://www14.software.ibm.com/webapp/set2/sas/f/best/home.html)。
問 2:在將系統到 新的TL 後,如果oslevel命令仍然報告是老的TL,怎麼辦?
答:首先使用oslevel –s命令 查看當前的TL,例如:
bash-2.05b# oslevel -s
5300-01-00-0000
接 下來,使用oslevel –rl命令查看哪些 fileset 版本低於新的TL,需要升級
bash- 2.05b# oslevel -rl 5300-03
Fileset Actual Level Recommended ML
------------------ -----------------------------------------------------------
X11.adt.ext 5.3.0.0 5.3.0.30
X11.adt.include 5.3.0.0 5.3.0.30
X11.base.lib 5.3.0.10 5.3.0.30
X11.base.smt 5.3.0.10 5.3.0.30
X11.compat.lib.X11R5 5.3.0.10 5.3.0.30
接 下來使用installp命令升級 oslevel 列出的fileset 就可以了。
問 3:列出一個fileset中的所 有文件 ?
答:使用lslpp命令,例如:
bash-2.05b# lslpp -f bos.rte
Fileset File
----------------------------------------------------------------------- -----
Path: /usr/lib/objrepos
bos.rte 5.3.7.0 /
/usr/aix
/usr/lpp
/usr/lpp/bos
/usr/lpp/bos/inst_root
…
Path: /etc/objrepos
bos.rte 5.3.7.0 /usr
/lib -> /usr/lib
/dev
/etc
…
問 4:如何列出一個文件屬於哪個fileset ?
答:使用lslpp命令,例 如:
bash-2.05b# lslpp -w /opt/csm/pm/CSMDefs.pm
File Fileset Type
-- --------------------------------------------------------------------------
/opt/csm/pm/CSMDefs.pm csm.core File
問 5:如何列出一個fileset中沒有被安裝的 文件?
答:使用restore -qTvf命令,例如:
bash-2.05b# restore -qTvf U805874.csm.hpsnm.bff
New volume on U805874.csm.hpsnm.bff:
Cluster 51200 bytes (100 blocks).
Volume number 1
Date of backup: Tue Oct 11 13:01:35 2005
Files backed up by name
User BUILD
0 ./
1113 ./lpp_name
0 ./usr
0 ./usr/lpp
0 ./usr/lpp/csm.hpsnm/csm.hpsnm/1.4.1.12
16682 ./usr/lpp/csm.hpsnm/csm.hpsnm/1.4.1.12/liblpp.a
0 ./usr/lpp/csm.hpsnm/csm.hpsnm/1.4.1.12/inst_root
1178 ./usr/lpp/csm.hpsnm/csm.hpsnm/1.4.1.12/inst_root/liblpp.a
…
6812032 ./usr/websm/codebase/pluginjars/hsc.jar
total size: 78826891
files archived: 54
問 6:如何從一個fileset中直接得到文件?
答:使用restore -qxvdf命令,例 如:
bash-2.05b# ls -al csm.core
-rw-r--r-- 1 root system 2744320 Feb 11 17:02 csm.core
-bash-2.05b# restore -qxvdf csm.core
New volume on csm.core:
Cluster 51200 bytes (100 blocks).
Volume number 1
Date of backup: Thu Sep 7 08:04:51 2006
Files backed up by name
User BUILD
x 0 ./
x 3804 ./lpp_name
x 0 ./usr
x 0 ./usr/lpp
…
x 774 ./opt/csm/samples/mkres/IBM.Sensor/MySensor.pm
total size: 3868461
files restored: 166
-bash-2.05b# du -m opt/
0.03 opt//csm/install/defs
0.71 opt//csm/install/pkgdefs
0.76 opt//csm/install
0.03 opt//csm/pm/Rpm/Child
0.10 opt//csm/pm/Rpm
1.38 opt//csm/pm
0.05 opt//csm/lib
0.00 opt//csm/samples/mkres/IBM.Association
0.00 opt//csm/samples/mkres/IBM.Condition
0.02 opt//csm/codebase
0.00 opt//csm/man/cat1
0.00 opt//csm/man/cat5
0.04 opt//csm/man/man1
0.01 opt//csm/man/man5
0.05 opt//csm/man
3.83 opt//
問 7.如何列出一個archive文件中的內容 ?
答:使用ar –t命令,例 如:
bash-2.05a# ar -v -t /usr/lib/libcfg.a
rwxr-x--- 300/300 122917 Oct 5 02:58 2007 shr.o
問 8.如何從一個archive中得到文件 ?
答:使用ar –x 命令,例如
bash-2.05a# ar -v -x /usr/lib/libcfg.a
x - shr.o
bash- 2.05a# ls shr.o
shr.o
總結
AIX 對軟件包的管理功能非常強大,lpp 結構 的軟件包使用起來也非常靈活。但是,和其他 UNIX 上的軟件包使用上還是有很大的不同之處,由於篇幅 所限,本文所涉及的內容非常有限,作為AIX系統管理員,只有在日常的工作做多總結,才能做到隨心所 欲對AIX軟件包進行管理。