アプリケーションパッケージ開発者ガイド

ベースディレクトリの指定

パッケージがインストールされる場所はさまざまな方法を使用して指定することができ、インストール時に動的にインストールベースを変更できることは重要です。インストール時に動的にインストールベースを変更できる場合、管理者は複数のバージョンと複数のアーキテクチャーを容易にインストールできます。

このセクションでは、最初に一般的な方法について説明してから、異機種システムへのインストールを行うアプローチを説明します。

管理デフォルトファイル

パッケージのインストールを行う管理者は、管理ファイルを使用してパッケージのインストールを制御できます。ただし、パッケージの設計者は、管理ファイルと、設計者が意図するパッケージのインストールを管理者がどのように変更できるかを理解する必要があります。

管理ファイルによって、通常行われるチェックやプロンプトを実行するかどうかが 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 は次のいずれかに設定できます。


注 –

pkgadd コマンドに引数 -a none を付けて呼び出した場合、常に管理者にベースディレクトリを確認します。ただし、この場合にはファイル内のすべてのパラメータがデフォルト値の quit に設定されます。これにより別の問題が発生する可能性があります。


疑問の解決

管理者は、管理ファイルを使用してシステム上のすべてのパッケージのインストールを制御できます。しかし、パッケージの設計者は、しばしば管理者の要望を無視して、代替の管理デフォルトファイルを組み込んでいます。

パッケージの設計者は、管理者ではなく設計者がパッケージのインストールを制御できるように代替管理ファイルを組み込む場合もあります。管理デフォルトファイルの basedir エントリはほかのすべてのベースディレクトリに優先するため、この方法でインストール時に簡単に適切なベースディレクトリを選択することができます。Solaris 2.5 リリースより前のすべてのバージョンの Solaris OS で、これがベースディレクトリを制御するもっとも簡単な方法だと考えられていました。

しかし、製品のインストールに関しては管理者の要望を受け入れる必要があります。インストールを制御するために一時的な管理デフォルトファイルを組み込む方法は、管理者の信用を失うことにつながります。request スクリプトと checkinstall スクリプトを使用して、管理者の監督の下でこれらのインストールを制御するようにしてください。request スクリプトを誠実に使用してプロセスに管理者を関与させることで、System V のパッケージ化は管理者とパッケージの設計者の双方にとって効果的に機能します。

BASEDIR パラメータの使用

すべての再配置可能パッケージの pkginfo ファイルに、次の形式のエントリでデフォルトベースディレクトリを含める必要があります。


BASEDIR=absolute_path

これは唯一のデフォルトベースディレクトリです。管理者はインストール時に変更できます。

複数のベースディレクトリが必要なパッケージもありますが、このパラメータを使用してパッケージを配置する利点は、ベースディレクトリが適切に配置され、インストール開始時に有効なディレクトリとして書き込み可能であることが保証されることです。サーバーとクライアントのベースディレクトリの適切なパスが、予約された環境変数の形式ですべての手続きスクリプトで使用可能になります。また、pkginfo -r SUNWstuf コマンドを使用すると、パッケージの現在のインストールベースを表示できます。

checkinstall スクリプトでは、BASEDIRpkginfo ファイルで定義されたままのパラメータです。まだ条件は付いていません。ターゲットベースディレクトリを検査するには、${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

パラメータ型ベースディレクトリの使用

パッケージに複数のベースディレクトリが必要な場合、パラメータ型パス名を使用して複数のベースディレクトリを確立できます。この方法は一般的になりましたが、次の欠点があります。

ベースディレクトリを決定するパラメータは pkginfo ファイルで定義されますが、request スクリプトで変更できます。このことが、このアプローチが一般的である主な理由の 1 つです。ただし、欠点は長期にわたるものであるため、この構成は最後の手段として検討するようにしてください。

例 — パラメータ型ベースディレクトリの使用

pkginfo ファイル

# 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

pkgmap ファイル

: 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 スクリプトは、ほとんどの管理設定をサポートするようにディレクトリを再定義できます。