この節の要件に従って、現在稼働中の OS の変更を回避します。
オペレーティングシステムを正常にインストールするには、パッケージが代替ルート (/) ファイルシステム (Solaris Live Upgrade の非アクティブブート環境など) を認識し、正常に対話する必要があります。
パッケージの pkgmap ファイル (パッケージマップ) には、絶対パスを指定できます。これらのパスが存在する場合、そのファイルは、pkgadd コマンドの -R オプションとの相対パスに書き込まれます。絶対パスと相対 (再配置可能) パスの両方を含むパッケージは、代替ルート (/) ファイルシステムにもインストールできます。絶対ファイルであれ再配置可能ファイルであれ、その前には $PKG_INSTALL_ROOT が付加されるため、pkgadd によるインストールでは、すべてのパスが正しく解釈されます。
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 インストールスクリプト構文の例
$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 つあります。preinstall、postinstall、preremove、および postremove です。
表 B–2 スクリプトの作成のガイドライン
ガイドライン |
Solaris Live Upgrade への影響 |
非大域ゾーンへの影響 |
---|---|---|
スクリプトは Bourne シェル (/bin/sh) で作成する必要があります。pkgadd コマンドは、スクリプトの実行時にインタープリタとして Bourne シェルを使用します。 |
○ |
○ |
スクリプトはプロセスの開始や停止を行なったり、ps や truss などのコマンドの出力に依存したりしてはいけません。ps や truss はオペレーティングシステムに依存し、稼働中のシステムに関する情報を報告します。 |
○ |
○ |
スクリプトでは、expr、cp、ls などの標準的な UNIX コマンドや、シェルスクリプトの作成を容易にするそのほかのコマンドを自由に使用できます。 |
○ |
○ |
パッケージはサポートされているすべてのリリースで動作する必要があるため、スクリプトで呼び出すコマンドはこれらすべてのリリースで利用可能なものでなければなりません。したがって、Solaris 8 リリースのあとで追加または削除されたコマンドは使用できません。 特定のコマンドまたはオプションが Solaris 8、9、または 10 リリースでサポートされているかどうかを調べるには、http://docs.sun.com で該当するバージョンの Solaris Reference Manual Collection を参照してください。 |
○ |
パッケージでは、パッケージ自体が提供しているコマンドを実行してはいけません。これは、ディスクレスクライアントの互換性を維持するためであると同時に、まだインストールされていない共有ライブラリを必要とするコマンドの実行を避けるためです。
すべてのパッケージは pkgchk の検証にパスしなければなりません。パッケージを作成したらインストールする前に、次のコマンドでパッケージをチェックする必要があります。
# pkgchk -d dir_name pkg_name |
パッケージがあるディレクトリの名前を指定します。
パッケージの名前を指定します。
パッケージを作成したら、pkgadd コマンドに -R dir_name オプションを指定して、これを代替ルート (/) ファイルシステムにインストールしてテストする必要があります。さらに、この処理が終わったら、次のように、pkgchk コマンドでパッケージが正しいかチェックします。
# pkgadd -d . -R /a SUNWvxvm # pkgchk -R /a SUNWvxvm |
エラーが表示されないことを確認します。
パッケージが /export/SUNWvxvm にある場合は、コマンドを次のように指定します。
# pkgchk -d /export SUNWvxvm |
エラーが表示されないことを確認します。
ファイルの作成、変更、および削除時に、その他のコマンドでパッケージをチェックすることもできます。次にコマンド例を示します。
たとえば、パッケージが正しく動作するかどうかを dircmp や fssnap コマンドを使って検証できます。
さらに、ps コマンドでは、パッケージによりデーモンの開始や停止が行われていないことを確認することによってデーモンに対する要件準拠を確認できます。
truss、pkgadd -v、および pkgrm コマンドで、パッケージインストールの実行要件に準拠しているかどうかを確認できます。ただし、これが常に機能するとはかぎりません。次の例では、truss コマンドは、読み取り専用ディレクトリおよび $TEMPDIR 以外のディレクトリへのアクセス情報をすべて除外し、指定された非アクティブブート環境以外のディレクトリへの読み取り専用でないアクセス情報のみを表示します。
# 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} |