この付録は、パッケージ (特に Sun 以外のパッケージ) のインストールや削除を行うシステム管理者を対象としています。ここで説明するパッケージ要件に従うことにより、次のことが可能になります。
現在稼働中のシステムへの変更を防いで、Solaris Live Upgrade によるアップグレードと、非大域ゾーンやディスクレスクライアントの作成・管理とを可能にします。
カスタム JumpStart などのインストールプログラムを使用する場合に、パッケージを対話式にしないで自動インストールを可能にします。
この章の内容は次のとおりです。
この節で説明する要件に従えば、現在稼働中の 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 シェルを使用します。 |
X |
X |
スクリプトはプロセスの開始や停止を行なったり、ps や truss などのコマンドの出力に依存したりしてはいけません。ps や truss はオペレーティングシステムに依存し、稼働中のシステムに関する情報を報告します。 |
X |
X |
スクリプトでは、expr、cp、ls などの標準的な UNIX コマンドや、シェルスクリプトの作成を容易にするそのほかのコマンドを自由に使用できます。 |
X |
X |
パッケージはサポートされているすべてのリリースで動作する必要があるため、スクリプトで呼び出すコマンドはこれらすべてのリリースで利用可能なものでなければなりません。したがって、Solaris 8 リリースのあとで追加または削除されたコマンドは使用できません。 特定のコマンドまたはオプションが Solaris 8、9、または 10 リリースでサポートされているかどうかを調べるには、http://docs.sun.com で該当するバージョンの Solaris Reference Manual AnswerBook を参照してください。 |
X |
パッケージでは、パッケージ自体が提供しているコマンドを実行してはいけません。これは、ディスクレスクライアントの互換性を維持するためであると同時に、まだインストールされていない共有ライブラリを必要とするコマンドの実行を避けるためです。
すべてのパッケージは 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} |
次の Solaris 標準ユーティリティーを使用するときは、ユーザーの情報入力なしに、パッケージの追加や削除が行われる必要があります。
カスタム JumpStart プログラム
Solaris Live Upgrade
Solaris インストールプログラム プログラム
Solaris ゾーン
パッケージをテストして、ユーザー操作なしでインストールされるようにするには、pkgadd -a コマンドで新しい管理ファイルを設定します。-a オプションは、デフォルトの管理ファイルの代わりにユーザー定義の管理ファイルを使用することを意味します。デフォルトのファイルを使用すると、情報の入力が必要になることがあります。管理ファイルを作成すれば、pkgadd でこのようなチェックを省略し、ユーザーの確認なしでパッケージをインストールすることができます。詳細については、admin(4) または pkgadd(1M) のマニュアルページを参照してください。
次の例では、pkgadd コマンドによる管理ファイルの扱いを示します。
管理ファイルを指定しないと、pkgadd は /var/sadm/install/admin/default を使用します。このファイルを使用すると、ユーザーの入力が必要になることがあります。
# pkgadd |
コマンド行に相対的な管理ファイルを指定すると、pkgadd は /var/sadm/install/admin からこのファイル名を探して使用します。この例では相対的な管理ファイルの名前が nocheck であるため、pkgadd は /var/sadm/install/admin/nocheck を探します。
# pkgadd -a nocheck |
絶対パスでファイルを指定すると、 pkgadd はこれを使用します。この例では、pkgadd は /tmp 内で nocheck 管理ファイルを検索します。
# pkgadd -a /tmp/nocheck |
次に示すのは、pkgadd ユーティリティーでユーザーの入力をほとんど必要としないインストール管理ファイルの例です。パッケージがシステムで利用可能な容量を超えた容量を必要としない限り、 pkgadd ユーティリティーはこのファイルを使用して、ユーザーに情報の入力を求めることなくインストールを実行します。
mail= instance=overwrite partial=nocheck runlevel=nocheck idepend=nocheck space=ask setuid=nocheck confiict=nocheck action=nocheck basedir=default
パッケージが保持するパラメータにより、非大域ゾーンのインストールされたシステムで内容を配布および可視にする方法が制御されます。SUNW_PKG_ALLZONES、SUNW_PKG_HOLLOW、および SUNW_PKG_THISZONE パッケージパラメータは、ゾーンがインストールされているシステムでのパッケージの特性を定義します。非大域ゾーンのインストールされたシステムでパッケージを管理できるようにするには、これらのパラメータを設定する必要があります。
次の表に、パッケージパラメータの設定に使用できる 4 つの有効な組み合わせを示します。次の表に示されていない設定の組み合わせは無効であり、そのような設定を選択するとパッケージのインストールは失敗します。
3 つのパッケージパラメータをすべて設定したことを確認してください。3 つのパッケージパラメータをすべて空のままにしてもかまいません。ゾーンのパッケージパラメータが見つからない場合、パッケージツールでは false の設定として解釈されますが、パラメータの設定を省略しないように強くお勧めします。3 つのパッケージパラメータをすべて設定することにより、パッケージをインストールまたは削除するときのパッケージツールの動作を正確に指定します。
SUNW_PKG_ALLZONES の設定 |
SUNW_PKG_HOLLOW の設定 |
SUNW_PKG_THISZONE の設定 |
パッケージの説明 |
---|---|---|---|
false |
false |
false |
これは、ゾーンのパッケージパラメータのすべてに値を指定しないパッケージに対するデフォルト設定です。 この設定を持つパッケージは、大域ゾーンまたは非大域ゾーンにインストールできます。
どちらの場合も、パッケージがインストールされたすべてのゾーンで、パッケージの内容全体が可視になります。 |
false |
false |
true |
この設定を持つパッケージは、大域ゾーンまたは非大域ゾーンにインストールできます。インストール後に新しい非大域ゾーンを作成した場合、パッケージはこれらの新しい非大域ゾーンには伝達されません。
どちらの場合も、パッケージがインストールされたゾーンで、パッケージの内容全体が可視になります。 |
true |
false |
false |
この設定を持つパッケージは、大域ゾーンだけにインストールできます。pkgadd コマンドを実行すると、パッケージは大域ゾーンおよびすべての非大域ゾーンにインストールされます。すべてのゾーンで、パッケージの内容全体が可視になります。 注 – パッケージを非大域ゾーンにインストールしようとすると失敗します。 |
true |
true |
false |
この設定を持つパッケージは、大域管理者が大域ゾーンだけにインストールできます。pkgadd コマンドを実行すると、パッケージの内容が大域ゾーンに完全にインストールされます。パッケージパラメータの値がこのように設定されている場合、パッケージの内容自体はどの非大域ゾーンにも提供されません。パッケージをインストール済みとして表示するために必要なパッケージインストール情報だけが、すべての非大域ゾーンにインストールされます。これにより、このパッケージに依存するほかのパッケージをインストールできるようになります。「hollow」パッケージの詳細については、『Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)』の第 25 章「ゾーンがインストールされている Solaris システムでのパッケージとパッチについて (概要)」を参照してください。 パッケージの依存関係を検査できるように、パッケージはすべてのゾーンでインストール済みとして表示されます。
注 – パッケージを非大域ゾーンにインストールしようとすると失敗します。 |
説明 |
詳細 |
---|---|
パッケージとゾーンの詳細 | |
疎ルートゾーンと完全ルートゾーンの概要 |
『Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)』の第 16 章「Solaris ゾーンの紹介」 |
パッケージの特性およびパラメータの詳細 | |
パッケージパラメータ値の表示の詳細 |
パッケージの要件および特定のコマンドの構文については、次の情報を参照してください。
パッケージの要件の詳細および用語の定義 | |
パッケージの追加と削除およびインストール管理ファイルに関する基本情報 | |
この付録に記載されている個々のコマンドの詳細について参照するマニュアルページ |
dircmp(1)、fssnap(1M)、ps(1)、または truss(1)、pkgadd(1M)、pkgchk(1M)、または pkgrm(1M) |
Solaris Live Upgrade の概要 | |
カスタム JumpStart の概要 | |
Solaris ゾーンの概要 |
『Oracle Solaris のシステム管理 (Oracle Solaris コンテナ : 資源管理と Oracle Solaris ゾーン)』の第 16 章「Solaris ゾーンの紹介」 |