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

標準クラスとクラスアクションスクリプトを使用したファイルの変更

このケーススタディーでは、標準クラスとクラスアクションスクリプトを使用して、パッケージのインストール中に既存のファイルを変更します。ここでは、3 種類の変更方法のうちの 1 つを使用します。ほかの 2 つの方法については、sed クラスと postinstall スクリプトを使用したファイルの変更」およびbuild クラスを使用したファイルの変更」を参照してください。変更する対象のファイルは、/etc/inittab です。

手法

このケーススタディーでは、インストールおよび削除クラスアクションスクリプトの使用方法を説明します。詳細については、「クラスアクションスクリプトの書き込み」を参照してください。

アプローチ

クラスおよびクラスアクションスクリプトを使用して、インストール中に /etc/inittab を変更するには、次の作業を完了する必要があります。

このケーススタディーは、次のケーススタディーよりも複雑です。sed クラスと postinstall スクリプトを使用したファイルの変更」を参照してください。2 つではなく 3 つのファイルを作成する必要があり、配信された /etc/inittab ファイルは実際には、挿入するエントリの断片を含んだ可変部分に過ぎません。pkgadd コマンドが i.inittab ファイルに渡すファイルを必要としなければ、これは i.inittab ファイルに組み込まれていたかも知れません。また、削除の手順も別個のファイル (r.inittab) に置く必要があります。この方法はうまく行きますが、複数のファイルをインストールする必要のある非常に複雑なケースに最も向いています。「インストール時の crontab ファイルの変更」を参照してください。

sed クラスと postinstall スクリプトを使用したファイルの変更」で使用されている sed プログラムは、inittab エントリの最後にあるコメントがパッケージのインスタンスに基づいているため、複数のパッケージのインスタンスをサポートします。build クラスを使用したファイルの変更」のケーススタディーでは、インストール中に /etc/inittab を編集するための、より効率的なアプローチが紹介されています。

ケーススタディーで使用するファイル

pkginfo ファイル

PKG=case5
NAME=Case Study #5
CATEGORY=applications
BASEDIR=/opt
ARCH=SPARC
VERSION=Version 1d05
CLASSES=inittab

prototype ファイル

i pkginfo
i i.inittab
i r.inittab
e inittab /etc/inittab ? ? ?

i.inittab インストールクラスアクションスクリプト

# PKGINST parameter provided by installation service
while read src dest
do
# remove all entries from the table that
# associated with this PKGINST
sed -e "/^[^:]*:[^:]*:[^:]*:[^#]*#$PKGINST$/d" $dest >
/tmp/$$itab ||
exit 2
sed -e "s/$/#$PKGINST" $src >> /tmp/$$itab ||
exit 2
mv /tmp/$$itab $dest ||
exit 2
done
if [ "$1" = ENDOFCLASS ]
then
/sbin/init q ||
exit 2
fi
exit 0

r.inittab 削除クラスアクションスクリプト

# PKGINST parameter provided by installation service
while read src dest
do
# remove all entries from the table that
# are associated with this PKGINST
sed -e "/^[^:]*:[^:]*:[^:]*:[^#]*#$PKGINST$/d" $dest >
/tmp/$$itab ||
exit 2
mv /tmp/$$itab $dest ||
exit 2
done
/sbin/init q ||
exit 2
exit 0

inittab ファイル

rb:023456:wait:/usr/robot/bin/setup