このケーススタディーでは、パッケージのインストール中に、インストール先マシンに存在しているファイルを変更します。ここでは、3 種類の変更方法のうちの 1 つを使用します。ほかの 2 つの方法については、「標準クラスとクラスアクションスクリプトを使用したファイルの変更」および「sed クラスと postinstall スクリプトを使用したファイルの変更」を参照してください。変更する対象のファイルは、/etc/inittab です。
このケーススタディーでは、build クラスの使用方法を説明します。build クラスの詳細については、「build クラススクリプト」を参照してください。
このアプローチでは、/etc/inittab を変更するために build クラスを使用します。build クラススクリプトはシェルスクリプトとして実行され、実行されているファイルの新しいバージョンを出力します。つまり、このパッケージに付属するデータファイル /etc/inittab が実行され、その実行の出力が /etc/inittab になります。
build クラススクリプトは、パッケージのインストールおよび削除の際に実行されます。ファイルがインストール時に実行される場合には、引数 install がファイルに渡されます。サンプルの build クラススクリプトでは、この引数をテストすることで、インストールのアクションが定義されています。
build クラスを使用して /etc/inittab を編集するには、次の作業を完了する必要があります。
prototype ファイルで構築ファイルを定義します。
prototype ファイル内の構築ファイルのエントリでは、構築ファイルを build クラスとして指定し、そのファイルタイプを e として定義する必要があります。pkginfo ファイルの CLASSES パラメータが build として定義されていることを確認してください。
build クラススクリプトを作成します。
サンプルの build クラススクリプトは、次の手順を実行します。
/etc/inittab ファイルを編集し、このパッケージに関する既存の変更をすべて削除する。ファイル名 /etc/inittab は、sed コマンドにハードコードされています。
パッケージがインストールされる場合は、/etc/inittab の最後に新しい行を追加する。この新しいエントリには、そのエントリの出自を示すコメントタグが含まれています。
init q コマンドを実行する。
この解決方法は、「標準クラスとクラスアクションスクリプトを使用したファイルの変更」および「sed クラスと postinstall スクリプトを使用したファイルの変更」のケーススタディーで説明した欠点に対応しています。短いファイルがひとつ (pkginfo および prototype ファイル以外に) 必要になるだけです。PKGINST パラメータを使用することにより、このファイルはパッケージの複数のインスタンスを処理することができ、init q コマンドを build クラススクリプトから実行することにより、postinstall スクリプトが不要になります。
PKG=case6 NAME=Case Study #6 CATEGORY=applications BASEDIR=/opt ARCH=SPARC VERSION=Version 1d05 CLASSES=build |
i pkginfo e build /etc/inittab ? ? ? |
# PKGINST parameter provided by installation service # remove all entries from the existing table that # are associated with this PKGINST sed -e "/^[^:]*:[^:]*:[^:]*:[^#]*#$PKGINST$/d" /etc/inittab || exit 2 if [ "$1" = install ] then # add the following entry to the table echo "rb:023456:wait:/usr/robot/bin/setup #$PKGINST" || exit 2 fi /sbin/init q || exit 2 exit 0 |