Solaris 10 10/09 インストールガイド (Solaris Live Upgrade とアップグレードの計画)

付録 B その他の SVR4 パッケージ要件 (リファレンス)

この付録は、パッケージ (特に Sun 以外のパッケージ) のインストールや削除を行うシステム管理者を対象としています。ここで説明するパッケージ要件に従うことにより、次のことが可能になります。

この章の内容は次のとおりです。

稼働中の OS に対する変更の防止

この節で説明する要件に従えば、現在稼働中の OS は変更されません。

絶対パスの使用

オペレーティングシステムのインストールが成功するには、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 シェル「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 は、再配置可能なパッケージオブジェクトがインストールされる「再配置可能」なベースディレクトリを指しています。ここにインストールされるのは、再配置可能オブジェクトだけです。再配置可能でないオブジェクト (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

スクリプト作成のガイドライン

パッケージ処理のスクリプトを作成するときは、現在稼働中の OS への変更を防ぐために、OS に依存しないようにしてください。スクリプトには、パッケージのインストールや削除の実行中に行うアクションを定義します。事前に決められたプロシージャー名で作成できるスクリプトが 4 つあります。 preinstallpostinstallpreremove、および postremove です。

表 B–2 スクリプト作成のガイドライン

ガイドライン 

Solaris Live Upgrade への影響 

非大域ゾーンへの影響 

スクリプトは Bourne シェル (/bin/sh) で書き込む必要があります。pkgadd コマンドは、スクリプトの実行時にインタープリタとして Bourne シェルを使用します。

スクリプトはプロセスの開始や停止を行なったり、pstruss などのコマンドの出力に依存したりしてはいけません。ps や truss はオペレーティングシステムに依存し、稼働中のシステムに関する情報を報告します。

スクリプトでは、exprcpls などの標準的な UNIX コマンドや、シェルスクリプトの作成を容易にするそのほかのコマンドを自由に使用できます。

パッケージはサポートされているすべてのリリースで動作する必要があるため、スクリプトで呼び出すコマンドはこれらすべてのリリースで利用可能なものでなければなりません。したがって、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 パッケージをテストする

パッケージを作成したら、pkgadd コマンドに -R dir_name オプションを指定して、これを代替ルート (/) ファイルシステムにインストールしてテストする必要があります。パッケージをインストールしたら、次のように、パッケージが正しいかどうかを 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_HOLLOW、および SUNW_PKG_THISZONE パッケージパラメータは、ゾーンがインストールされているシステムでのパッケージの特性を定義します。非大域ゾーンのインストールされたシステムでパッケージを管理できるようにするには、これらのパラメータを設定する必要があります。

次の表に、パッケージパラメータの設定に使用できる 4 つの有効な組み合わせを示します。次の表に示されていない設定の組み合わせは無効であり、そのような設定を選択するとパッケージのインストールは失敗します。


注 –

3 つのパッケージパラメータをすべて設定したことを確認してください。3 つのパッケージパラメータをすべて空のままにしてもかまいません。ゾーンのパッケージパラメータが見つからない場合、パッケージツールでは false の設定として解釈されますが、パラメータの設定を省略しないように強くお勧めします。3 つのパッケージパラメータをすべて設定することにより、パッケージをインストールまたは削除するときのパッケージツールの動作を正確に指定します。


表 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」パッケージの詳細については、『Solaris のシステム管理 (Solaris コンテナ : 資源管理と Solaris ゾーン)』の第 24 章「ゾーンがインストールされている Solaris システムでのパッケージとパッチについて (概要)」を参照してください。

パッケージの依存関係を検査できるように、パッケージはすべてのゾーンでインストール済みとして表示されます。 

  • 大域ゾーンでは、パッケージの内容全体が可視になります。

  • 完全ルート非大域ゾーンでは、パッケージの内容全体が不可視になります。

  • 非大域ゾーンが大域ゾーンからファイルシステムを継承する場合、このファイルシステムにインストールされているパッケージは非大域ゾーンで可視になります。パッケージで提供されるほかのすべてのファイルは、非大域ゾーン内では不可視になります。

    たとえば、疎ルート非大域ゾーンは、特定のディレクトリを大域ゾーンと共有します。これらのディレクトリは読み取り専用です。疎ルート非大域ゾーンは、/platform ファイルシステムをほかのゾーンと共有します。もう 1 つの例は、起動するハードウェアだけに関連するファイルがパッケージで提供されている場合です。


注 –

パッケージを非大域ゾーンにインストールしようとすると失敗します。


説明 

詳細 

パッケージとゾーンの詳細 

『Solaris のシステム管理 (Solaris コンテナ : 資源管理と Solaris ゾーン)』の第 24 章「ゾーンがインストールされている Solaris システムでのパッケージとパッチについて (概要)」

疎ルートゾーンと完全ルートゾーンの概要 

『Solaris のシステム管理 (Solaris コンテナ : 資源管理と Solaris ゾーン)』の第 16 章「Solaris ゾーンの紹介」

パッケージの特性およびパラメータの詳細 

pkginfo(4)

パッケージパラメータ値の表示の詳細 

pkgparam(1)

背景情報

パッケージの要件および特定のコマンドの構文については、次の情報を参照してください。

パッケージの要件の詳細および用語の定義 

『アプリケーションパッケージ開発者ガイド』の第 6 章「パッケージの作成のための高度な手法」

パッケージの追加と削除およびインストール管理ファイルに関する基本情報 

『Solaris のシステム管理 (基本編)』の第 19 章「ソフトウェアの管理 (概要)」

この付録に記載されている個々のコマンドの詳細について参照するマニュアルページ 

dircmp(1)fssnap(1M)ps(1)、または truss(1)pkgadd(1M)pkgchk(1M)、または pkgrm(1M)

Solaris Live Upgrade の概要 

第 2 章Solaris Live Upgrade (概要)

カスタム JumpStart の概要 

『Solaris 10 10/09 インストールガイド (カスタムJumpStart/ 上級編)』の第 2 章「カスタム JumpStart (概要)」

Solaris ゾーンの概要 

『Solaris のシステム管理 (Solaris コンテナ : 資源管理と Solaris ゾーン)』の第 16 章「Solaris ゾーンの紹介」