Oracle Solaris 10 9/10 安裝指南:Solaris Live Upgrade 與升級規劃

附錄 B 附加的 SVR4 封裝需求 (參考)

本附錄適用於安裝或移除套裝軟體,尤其是協力廠商套裝軟體的系統管理員。遵循這些封裝需求可滿足下列事項:

本章包含下列小節:

防止修改目前的作業系統

遵循本節所述的需求,可讓目前正在執行的作業系統保持不變。

使用絕對路徑

若要成功地安裝作業系統,套裝軟體必須辨識並正確找出替代的根 (/) 檔案系統,例如 Solaris Live Upgrade 非使用中啟動環境。

套裝軟體可以在其 pkgmap 檔案 (套裝軟體對映) 中包含絕對路徑。如果這些檔案存在,其相對於 pkgadd 指令的 -R 選項進行寫入。同時包含絕對路徑和相對 (可重新定位) 路徑的套裝軟體,也可以安裝在替代根 (/) 檔案系統上。$PKG_INSTALL_ROOT 同時前置於絕對和可重新定位的檔案,因此在透過 pkgadd 安裝時可正確地解析所有路徑。

使用 pkgadd -R 指令

使用 pkgadd -R 選項安裝或使用 pkgrm -R 選項移除的套裝軟體,不得修改目前執行中的系統。這項功能是由自訂 JumpStart、Solaris Live Upgrade、非全域區域和無本地磁碟的用戶端使用的。

任何使用 pkgadd 指令 -R 選項安裝或使用 pkgrm 指令 -R 選項移除的套裝軟體隨附的程序檔,不得修改目前執行中的系統。所有提供的安裝程序檔必須參照任何以變數 $PKG_INSTALL_ROOT 為字首的目錄或檔案。套裝軟體必須寫入所有以 $PKG_INSTALL_ROOT 為字首的目錄與檔案。套裝軟體不得移除沒有以 $PKG_INSTALL_ROOT 為字首的目錄。

表 B–1 提供程序檔語法範例。

表 B–1 安裝程序檔語法範例

程序檔類型 

正確的語法 

不正確的語法 

Bourne shell「if」敘述分段 

if [ -f ${PKG_INSTALL_ROOT}\
/etc/myproduct.conf ] ; then
if [ -f /etc/myproduct.conf ] ; \
 then

移除檔案 

/bin/rm -f ${PKG_INSTALL_ROOT}\
/etc/myproduct.conf
/bin/rm -f /etc/myproduct.conf 

變更檔案 

echo "test=no" > ${PKG_INSTALL_ROOT}\
/etc/myproduct.conf
echo "test=no" > \
/etc/myproduct.conf

$PKG_INSTALL_ROOT$BASEDIR 之差異簡介

$PKG_INSTALL_ROOT 為根 (/) 檔案系統在增加套裝軟體的機器上的位置。該位置設定為 pkgadd 指令的 -R 引數。例如,如果呼叫下列指令,則在安裝套裝軟體期間,$PKG_INSTALL_ROOT 會成為 /a


# pkgadd -R /a SUNWvxvm

$BASEDIR 指向安裝可重定位套裝軟體物件的 relocatable 基本目錄。僅可重定位物件安裝於此。不可重定位物件 (即在 pkgmap 檔案中擁有絕對路徑的物件) 的安裝位置總是相對於非使用中啟動環境,而不是相對於實際生效的 $BASEDIR。如果套裝軟體沒有可重定位物件,則該套裝軟體稱為絕對套裝軟體 (或不可重定位的),並且 $BASEDIR 不做定義,也無法在套裝軟體程序檔中使用。

例如,假設套裝軟體的 pkgmap 檔案含有兩個登錄:


1 f none sbin/ls 0555 root sys 3541 12322 1002918510
1 f none /sbin/ls2 0555 root sys 3541 12322 2342423332

pkginfo 檔案有 $BASEDIR 的規格:


BASEDIR=/opt

如果使用下列指令安裝此套裝軟體,則 ls 安裝在 /a/opt/sbin/ls 中,但 ls2 安裝為 /a/sbin/ls2


# pkgadd -R /a SUNWtest

撰寫程序檔的準則

您的套裝軟體程序檔必須獨立於目前執行的作業系統,以避免修改了作業系統。程序檔定義在套裝軟體安裝與移除期間發生在特定時間點的動作。可使用這些預先定義的名稱來建立四個程序檔: preinstallpostinstallpreremovepostremove

表 B–2 建立程序檔的準則

準則 

影響 Solaris Live Upgrade 

影響非全域區域 

程序檔均須以 Bourne shell (/bin/sh) 撰寫。Bourne shell 是 pkgadd 指令用來執行程序檔的解譯器。

程序檔不得啟動或停止任何程序,或依賴於如 pstruss 等指令的輸出,因為這些指令與作業系統相關,並報告目前正在執行之系統的相關資訊。

程序檔可以自由使用其他標準 UNIX 指令,如 exprcpls 以及其他幫助撰寫 shell 程序檔的指令。

程序檔呼叫的任何指令,都必須可以在所有支援的發行版本上使用,因為套裝軟體必須在這些發行版本上執行。因此,您無法使用 Solaris 8 發行版本之後增加或移除的指令。  

若要驗證 Solaris 8、9 或 10 發行版本是否支援某特定指令或選項,請參閱 http://docs.sun.com 上特定版本的「Solaris Reference Manual AnswerBook」。

 

維護無本地磁碟的用戶端相容性

套裝軟體不得執行自己提供的指令。這項需求是為了維護無本地磁碟的用戶端相容性,並避免執行所需的共用程式庫尚未安裝的指令。

驗證套裝軟體

所有套裝軟體均須通過 pkgchk 驗證。建立套裝軟體後,在安裝之前,必須使用下列指令對其進行檢查。


# pkgchk -d dir_name pkg_name
dir_name

指定套裝軟體所在目錄的名稱

pkg_name

指定套裝軟體的名稱


範例 B–1 測試套裝軟體

在建立套裝軟體之後,必須使用帶有 R -dir_name 選項的 pkgadd 指令,將其安裝至替代根 (/) 檔案系統位置以進行測試。套裝軟體安裝完畢之後,必須使用 pkgchk 指令檢查其正確性,如本範例所示。


# pkgadd -d . -R /a SUNWvxvm
# pkgchk -R /a SUNWvxvm

螢幕不應該顯示任何錯誤。



範例 B–2 測試 /export/SUNWvxvm 上的套裝軟體

如果套裝軟體存在於 /export/SUNWvxvm 中,則您可以輸入下列指令。


# pkgchk -d /export SUNWvxvm

螢幕不應該顯示任何錯誤。


在建立、修改及刪除檔案時,還有其他指令可以檢查套裝軟體。下列指令是部分範例。


# TEMPDIR=/a; export TEMPDIR
# truss -t open /usr/sbin/pkgadd -R ${TEMPDIR} SUNWvxvm \
2>&1 > /dev/null | grep -v O_RDONLY | grep -v \
'open("'${TEMPDIR}

安裝或升級時防止使用者互動

使用下列標準 Solaris 公用程式增加或移除套裝軟體時,不可有提示使用者的資訊。

若要測試套裝軟體是否可以在沒有使用者互動的情況下安裝,可以使用 pkgadd 指令和 -a 選項來設定新的管理檔案。-a 選項可定義欲使用的安裝管理檔案,以代替預設管理檔案。使用預設檔案可能會造成系統提示使用者輸入更多資訊。您可以建立管理檔案以指示 pkgadd 略過這些檢查,並且無須使用者的確認而安裝套裝軟體。如需詳細資訊,請參閱「admin(4) 線上手冊」或「pkgadd(1M) 線上手冊」。

下列範例顯示 pkgadd 指令如何使用管理檔案。


範例 B–3 安裝管理檔案

以下是一個安裝管理檔案的範例,它很少要求使用者與 pkgadd 公用程式互動。除非套裝軟體要求的空間多於系統上的可用空間,否則 pkgadd 公用程式會使用此檔案並安裝套裝軟體,而且不會提示使用者提供更多資訊。

mail=
instance=overwrite
partial=nocheck
runlevel=nocheck
idepend=nocheck
space=ask
setuid=nocheck
confiict=nocheck
action=nocheck
basedir=default

為各區域設定套裝軟體參數

套裝軟體具有的參數可控制其內容的發佈方式,並可讓這些內容顯示在安裝有非全域區域的系統上。SUNW_PKG_ALLZONESSUNW_PKG_HOLLOWSUNW_PKG_THISZONE 套裝軟體參數會定義已安裝區域之系統上的套裝軟體特性。您必須設定這些參數,才能在具有非全域區域的系統中管理套裝軟體。

下表列出四種有效的套裝軟體參數設定組合。如果您選擇的設定組合未列在下表中,則那些設定不僅無效,還會造成套裝軟體安裝失敗。


備註 –

請確認您已設定上述三個套裝軟體參數。這三個套裝軟體參數可以全部保持空白。套裝軟體工具會將缺少區域套裝軟體參數視為設定「false」,但強烈建議您務必設定此等參數。全部三個套裝軟體參數皆設定,即可指定套裝軟體工具在安裝或移除套裝軟體時應該表現的運作方式。


表 B–3 有效的區域套裝軟體參數設定

SUNW_PKG_ALLZONES 設定

SUNW_PKG_HOLLOW 設定

SUNW_PKG_THISZONE 設定

套裝軟體說明 

false 

false 

false 

這是未針對所有區域套裝軟體參數指定值之套裝軟體的預設設定。 

具有這些設定的套裝軟體可安裝在全域區域或非全域區域中。  

  • 如果在全域區域中執行 pkgadd 指令,則套裝軟體會安裝在全域區域和所有非全域區域中。

  • 如果在非全域區域中執行 pkgadd 指令,則套裝軟體僅會安裝在非全域區域中。

在上述兩種情況下,所有安裝此套裝軟體的區域皆可看到該套裝軟體的完整內容。 

false 

false 

true 

具有這些設定的套裝軟體可安裝在全域區域或非全域區域中。如在安裝之後建立新的非全域區域,則套裝軟體不會傳遞到這些新增的非全域區域。 

  • 如果在全域區域中執行 pkgadd 指令,則套裝軟體僅會安裝在全域區域中。

  • 如果在非全域區域中執行 pkgadd 指令,則套裝軟體僅會安裝在非全域區域中。

在上述兩種情況下,安裝此套裝軟體的區域中可看到該套裝軟體的完整內容。 

true 

false 

false 

具有這些設定的套裝軟體僅可安裝在全域區域中。執行 pkgadd 指令時,套裝軟體會安裝在全域區域和所有非全域區域中。所有區域皆可看到此套裝軟體的完整內容。


備註 –

任何在非全域區域中安裝套裝軟體的嘗試都會失敗。


true 

true 

false 

具有這些設定的套裝軟體僅能由全域管理員安裝在全域區域中。執行 pkgadd 指令時,套裝軟體的內容會完整安裝在全域區域中。如果某套裝軟體將套裝軟體參數設為這些值,則此套裝軟體內容本身不會傳遞到任何非全域區域。在所有非全域區域上,只會安裝可能要安裝之套裝軟體的必要套裝軟體安裝資訊。如此即可安裝依賴此套裝軟體的其他套裝軟體。如需「空狀態 (hollow)」套裝軟體的更多資訊,請參閱「System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones」中的第 25 章「About Packages and Patches on a Solaris System With Zones Installed (Overview)」

若為檢查套裝軟體相依性目的,該套裝軟體應安裝在所有區域中。 

  • 在全域區域中,可見到套裝軟體的完整內容。

  • 在整個根非全域區域中,見不到套裝軟體的完整內容。

  • 當非全域區域繼承了來自全域區域的檔案系統時,即可在非全域區域中見到安裝在此檔案系統中的套裝軟體。但在此非全域區域內見不到該套裝軟體所傳遞的所有其他檔案。

    例如,稀疏根非全域區域會與全域區域共用特定的目錄。這些目錄是唯讀的。稀疏根非全域區域會和其他區域共用 /platform 檔案系統。另一個範例是,傳遞檔案的套裝軟體僅與啟動硬體相關。


備註 –

任何在非全域區域中安裝套裝軟體的嘗試都會失敗。


說明 

更多資訊 

套裝軟體和區域的更多詳細資訊 

「System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones」中的第 25 章「About Packages and Patches on a Solaris System With Zones Installed (Overview)」

稀疏根區域和整個根區域的簡介 

「System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones」中的第 16 章「Introduction to Solaris Zones」

套裝軟體特性和參數的資訊 

pkginfo(4) 線上手冊」

顯示套裝軟體參數值的資訊 

pkgparam(1) 線上手冊」

背景資訊

下列參考提供封裝需求和特定指令語法的相關背景資訊。

封裝需求和術語定義的特定資訊 

「Application Packaging Developer’s Guide」中的第 6 章「Advanced Techniques for Creating Packages」

增加和移除套裝軟體與安裝管理檔案的基本資訊 

「System Administration Guide: Basic Administration」中的第 20 章「Managing Software (Overview)」

如需本附錄中參考之特定指令的詳細資訊,請參閱下列線上手冊 

dircmp(1) 線上手冊」、「fssnap(1M) 線上手冊」、「ps(1) 線上手冊」、「truss(1) pkgadd(1M), pkgchk(1M) 線上手冊」或「pkgrm(1M) 線上手冊」

Solaris Live Upgrade 的簡介 

第 2 章Solaris Live Upgrade (簡介)

自訂 JumpStart 的簡介 

「Oracle Solaris 10 9/10 安裝指南:自訂 JumpStart 及進階安裝」中的第 2 章「自訂 JumpStart (簡介)」

Solaris Zones 的簡介 

「System Administration Guide: Oracle Solaris Containers-Resource Management and Oracle Solaris Zones」中的第 16 章「Introduction to Solaris Zones」