パッケージがインストールされる場所はさまざまな方法を使用して指定することができ、インストール時に動的にインストールベースを変更できることは重要です。インストール時に動的にインストールベースを変更できる場合、管理者は複数のバージョンと複数のアーキテクチャーを容易にインストールできます。
このセクションでは、最初に一般的な方法について説明してから、異機種システムへのインストールを行うアプローチを説明します。
パッケージのインストールを行う管理者は、管理ファイルを使用してパッケージのインストールを制御できます。ただし、パッケージの設計者は、管理ファイルと、設計者が意図するパッケージのインストールを管理者がどのように変更できるかを理解する必要があります。
管理ファイルによって、通常行われるチェックやプロンプトを実行するかどうかが pkgadd コマンドに通知されます。そのため、管理者はパッケージのインストールプロセスと、関連するスクリプトについて理解してから管理ファイルを使用するようにしてください。
基本的な管理デフォルトファイルは、SunOS オペレーティングシステムの /var/sadm/install/admin/default に付属しています。これは、ソフトウェア製品のインストールに関して最も基本的な管理ポリシーを確立するファイルです。このファイルは、出荷時には次のようになっています。
#ident "@(#)default 1.4 92/12/23 SMI" /* SVr4.0 1.5.2.1 */ mail= instance=unique partial=ask runlevel=ask idepend=ask rdepend=ask space=ask setuid=ask conflict=ask action=ask basedir=default |
管理者は、このファイルを編集して新しいデフォルト動作を確立したり、異なる管理ファイルを作成し、pkgadd コマンドに -a オプションを使用してファイルを指定したりすることができます。
管理ファイルでは 11 個のパラメータを定義できますが、すべてのパラメータを定義する必要はありません。詳細については、admin(4) を参照してください。
basedir パラメータは、パッケージをインストールする場合にベースディレクトリを取得する方法を指定します。ほとんどの管理者はこのパラメータを default のままにしますが、basedir は次のいずれかに設定できます。
ask。常に管理者にベースディレクトリを確認します。
絶対パス名。
$PKGINST 構成を含む絶対パス名。常にパッケージインスタンスから派生したベースディレクトリにインストールします。
pkgadd コマンドに引数 -a none を付けて呼び出した場合、常に管理者にベースディレクトリを確認します。ただし、この場合にはファイル内のすべてのパラメータがデフォルト値の quit に設定されます。これにより別の問題が発生する可能性があります。
管理者は、管理ファイルを使用してシステム上のすべてのパッケージのインストールを制御できます。しかし、パッケージの設計者は、しばしば管理者の要望を無視して、代替の管理デフォルトファイルを組み込んでいます。
パッケージの設計者は、管理者ではなく設計者がパッケージのインストールを制御できるように代替管理ファイルを組み込む場合もあります。管理デフォルトファイルの basedir エントリはほかのすべてのベースディレクトリに優先するため、この方法でインストール時に簡単に適切なベースディレクトリを選択することができます。Solaris 2.5 リリースより前のすべてのバージョンの Solaris OS で、これがベースディレクトリを制御するもっとも簡単な方法だと考えられていました。
しかし、製品のインストールに関しては管理者の要望を受け入れる必要があります。インストールを制御するために一時的な管理デフォルトファイルを組み込む方法は、管理者の信用を失うことにつながります。request スクリプトと checkinstall スクリプトを使用して、管理者の監督の下でこれらのインストールを制御するようにしてください。request スクリプトを誠実に使用してプロセスに管理者を関与させることで、System V のパッケージ化は管理者とパッケージの設計者の双方にとって効果的に機能します。
すべての再配置可能パッケージの pkginfo ファイルに、次の形式のエントリでデフォルトベースディレクトリを含める必要があります。
BASEDIR=absolute_path |
これは唯一のデフォルトベースディレクトリです。管理者はインストール時に変更できます。
複数のベースディレクトリが必要なパッケージもありますが、このパラメータを使用してパッケージを配置する利点は、ベースディレクトリが適切に配置され、インストール開始時に有効なディレクトリとして書き込み可能であることが保証されることです。サーバーとクライアントのベースディレクトリの適切なパスが、予約された環境変数の形式ですべての手続きスクリプトで使用可能になります。また、pkginfo -r SUNWstuf コマンドを使用すると、パッケージの現在のインストールベースを表示できます。
checkinstall スクリプトでは、BASEDIR は pkginfo ファイルで定義されたままのパラメータです。まだ条件は付いていません。ターゲットベースディレクトリを検査するには、${PKG_INSTALL_ROOT}$BASEDIR 構成が必要です。つまり、request スクリプトまたは checkinstall スクリプトを使用して、インストール環境の BASEDIR の値を予測可能な結果に変更できます。システムがクライアントの場合でも、preinstall スクリプトを呼び出すときまでに、BASEDIR パラメータは、ターゲットシステム上の実際のベースディレクトリを指す条件付きポインタになります。
request スクリプトでは、SunOS オペレーティングシステムのリリースごとに異なる BASEDIR パラメータが使用されます。request スクリプトの BASEDIR パラメータをテストするには、次のコードを使用して、実際に使用されるベースディレクトリを判断するようにしてください。
# request script constructs base directory if [ ${CLIENT_BASEDIR} ]; then LOCAL_BASE=$BASEDIR else LOCAL_BASE=${PKG_INSTALL_ROOT}$BASEDIR fi |
パッケージに複数のベースディレクトリが必要な場合、パラメータ型パス名を使用して複数のベースディレクトリを確立できます。この方法は一般的になりましたが、次の欠点があります。
パラメータ型パス名を使用するパッケージは通常は絶対パッケージのように機能しますが、pkgadd コマンドでは再配置可能パッケージのように扱われます。BASEDIR パラメータは、使用しない場合でも定義する必要があります。
管理者は、System V ユーティリティーを使用してパッケージのインストールベースを確認することができません。pkginfo -r コマンドは機能しません。
管理者は、確立された方法を使用してパッケージを再配置することができません。これは再配置可能パッケージと呼ばれますが、絶対パッケージとして動作します。
複数のアーキテクチャーまたは複数のバージョンのインストールでは、ターゲットベースディレクトリごとに不測事態対応計画を作成する必要があります。これは、しばしば複数の複雑なクラスアクションスクリプトを指します。
ベースディレクトリを決定するパラメータは pkginfo ファイルで定義されますが、request スクリプトで変更できます。このことが、このアプローチが一般的である主な理由の 1 つです。ただし、欠点は長期にわたるものであるため、この構成は最後の手段として検討するようにしてください。
# pkginfo file PKG=SUNWstuf NAME=software stuff ARCH=sparc VERSION=1.0.0,REV=1.0.5 CATEGORY=application DESC=a set of utilities that do stuff BASEDIR=/ EZDIR=/usr/stuf/EZstuf HRDDIR=/opt/SUNWstuf/HRDstuf VENDOR=Sun Microsystems, Inc. HOTLINE=Please contact your local service provider EMAIL= MAXINST=1000 CLASSES=none PSTAMP=hubert980707141632 |
: 1 1758 1 d none $EZDIR 0775 root bin 1 f none $EZDIR/dirdel 0555 bin bin 40 773 751310229 1 f none $EZDIR/usrdel 0555 bin bin 40 773 751310229 1 f none $EZDIR/filedel 0555 bin bin 40 773 751310229 1 d none $HRDDIR 0775 root bin 1 f none $HRDDIR/mksmart 0555 bin bin 40 773 751310229 1 f none $HRDDIR/mktall 0555 bin bin 40 773 751310229 1 f none $HRDDIR/mkcute 0555 bin bin 40 773 751310229 1 f none $HRDDIR/mkeasy 0555 bin bin 40 773 751310229 1 d none /etc ? ? ? 1 d none /etc/rc2.d ? ? ? 1 f none /etc/rc2.d/S70dostuf 0744 root sys 450 223443 1 i pkginfo 348 28411 760740163 1 i postinstall 323 26475 751309908 1 i postremove 402 33179 751309945 1 i preinstall 321 26254 751310019 1 i preremove 320 26114 751309865 |
複数のバージョンまたは複数のアーキテクチャーで使用可能なパッケージは、必要に応じてベースディレクトリを調査して設計するようにしてください。ベースディレクトリの調査とは、以前のバージョンまたは異なるアーキテクチャーのパッケージがすでにベースディレクトリにインストールされている場合に、インストールされるパッケージがこの問題を解決することです。通常は、わずかに異なる名前で新しいベースディレクトリが作成されます。Solaris 2.5 および互換リリースの request スクリプトと checkinstall スクリプトには、BASEDIR 環境変数を変更する機能があります。これより前のバージョンの Solaris OS にはこの機能はありません。
古いバージョンの Solaris OS でも、request スクリプトにはインストールベース内のディレクトリを再定義する権限があります。request スクリプトは、ほとんどの管理設定をサポートするようにディレクトリを再定義できます。