Solaris 10 10/09 インストールガイド (カスタムJumpStart/ 上級編)

稼働中の 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}