Solaris Live Upgrade を使用したり、新しいブート環境を作成する場合には、次の項目に従って問題の発生を防止してください。
パッケージに添付されているスクリプトは、アクティブなオペレーティング環境から独立していなければなりません。パッケージに添付されているスクリプトには、パッケージのインストールや削除を行う際に特定の時点で行うアクションを定義します。事前に決められたプロシージャ名で作成できるスクリプトが 4 つあります (preinstall、postinstall、preremove、postremove)。 これらのスクリプトは、現在のアクティブなオペレーティング環境から独立していなければなりません。これは、代替ブート環境が Solaris Live Upgrade によって切り替えられることがあり得るからです。
これらのスクリプトはプロセスの開始や停止を行なったり、ps や truss などのコマンドの出力に依存してはなりません。ps や truss はオペレーティングシステムに依存し、動作中のシステムに関する情報を報告します。
これらのスクリプトでは、expr、cp、ls などの標準的な UNIX コマンドや、シェルスクリプトの作成を容易にするそのほかのコマンドを自由に使用できます。ただし、現在の代替ルート (/) を変更する場合には、「カスタム JumpStart プログラムと Solaris Live Upgrade の代替ルート (/) 要件」 に述べる規則に従ってください。
すべてのスクリプトは Bourne シェル (/bin/sh ) で書き込む必要があります。pkgadd コマンドは、スクリプトの実行時にインタープリタとして Bourne シェルを使用します。
パッケージに添付されているスクリプトでは、2.6 より前のリリースに存在していないコマンドを呼び出すことはできません。たとえば、スクリプトで pgrep コマンドを呼び出すことはできません。2.6 以降、多くのコマンドに新しい機能が追加されました。 スクリプトでは、2.6 リリースにないコマンドオプションを使用することはできません。たとえば、-f オプションは umount コマンドに新たに追加されたものです。
すべてのパッケージは pkgchk の検証にパスしなければなりません。パッケージを作成したらインストールする前に、次のコマンドでパッケージをチェックする必要があります。
# pkgchk -d dir_name pkg_name |
dir_name |
パッケージがあるディレクトリの名前を指定します。 |
pkg_name |
パッケージの名前を指定します。 |
たとえば、パッケージが /export/SUNWvxvm にあるなら、コマンドを次のように指定します。
# pkgchk -d /export SUNWvxvm |
エラーが表示されないことを確認します。
パッケージを作成したら、pkgadd コマンドに -R dir_name オプションを指定してこれを代替ルート (/) にインストールしてテストします。さらに、この処理が終わったら、次のように、pkgchk コマンドでパッケージが正しいかチェックします。
# pkgadd -d . -R /a SUNWvxvm # pkgchk -R /a SUNWvxvm |
エラーが表示されないことを確認します。
さらに、パッケージでは、パッケージ自体が提供しているコマンドを実行しないでください。これは、ディスクレスの互換性を維持するためであると同時に、まだインストールされていない共有ライブラリを必要とするコマンドの実行を避けるためです。
ファイルの作成や変更、削除に対する要件はさまざまなコマンドで検証できます。たとえば、パッケージが正しく動作するかどうかを dircmp や fssnap コマンドを使って検証できます。 さらに、ps コマンドでは、パッケージによりデーモンの開始や停止が行われていないことを確認することによってデーモンに対する要件準拠を確認できます。truss や pkgadd コマンドでは、実行時のパッケージインストール要件に準拠しているかどうかを確認できます。ただし、これが常に機能するとはかぎりません。次の例では、truss コマンドは、読み取り専用ディレクトリまたは $BASEDIR へのアクセスをすべて除外し、読取専用でないディレクトリまたは指定された代替ルート (/) 以外のディレクトリへのアクセス情報のみを表示します。
# BASEDIR=/a; export BASEDIR # truss -t open /usr/sbin/pkgadd -R ${BASEDIR} SUNWvxvm \ 2>&1> /dev/null | grep -v O_RDONLY | grep -v \ 'open("'${BASEDIR} |
この節で参照したコマンドについては、マニュアルページ dircmp(1)、fssnap(1M)、ps(1)、または truss(1) を参照してください。