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 リリースにないコマンドオプションを使用することはできません。たとえば、Solaris 7 リリースで、umount コマンドに-f オプションが追加されました。特定のコマンドまたはオプションが Solaris 2.6 リリースでサポートされているかどうかを調べるには、 http://docs.sun.com の『Solaris 2.6 Reference Manual AnswerBook』を参照してください。
すべてのパッケージは 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 -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} |
このセクションで示したコマンドの詳細は、dircmp(1)、fssnap(1M)、 ps(1)、truss(1)、pkgadd(1M)、pkgchk(1M)、またはpkgrm(1M) のマニュアルページを参照してください。