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

sed クラスと手続きスクリプトを使用したドライバのインストール

このケーススタディーでは、sed クラスと手続きスクリプトを使用してドライバをインストールする方法を説明します。このパッケージは絶対オブジェクトと再配置可能オブジェクトの両方から構成されるため、この方法は前のケーススタディー (「手続きスクリプトによるドライバのインストールと削除」を参照) とは異なります。

手法

このケーススタディーでは、次の手法の実例を示します。

アプローチ

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

pkginfo ファイル

PKG=SUNWsst
NAME=Simple SCSI Target Driver
VERSION=1
CATEGORY=system
ARCH=sparc
VENDOR=Sun Microsystems
BASEDIR=/opt
CLASSES=sed

prototype ファイル

たとえばこのケーススタディーでは、パッケージオブジェクトについて、次の図に示す階層型レイアウトを使用しています。

図 5–1 パッケージの階層型ディレクトリ構造

この図については次に説明します。

パッケージオブジェクトは、上に示した pkg ディレクトリ内での場所と同じ場所にインストールされます。ドライバモジュール (sst および sst.conf) は /usr/kernel/drv にインストールされ、インクルードファイルは /usr/include/sys/scsi/targets にインストールされます。sstsst.conf、および sst_def.h ファイルは絶対オブジェクトです。テストプログラム sstest.c とそのディレクトリ SUNWsst は再配置可能オブジェクトです。それらのインストール場所は BASEDIR パラメータによって設定されます。

パッケージの残りのコンポーネント (すべての制御ファイル) は、開発マシン上でのパッケージの最上位ディレクトリにインストールされますが、sed クラススクリプトだけは例外です。このクラススクリプトは、それが変更するファイルにならって devlink.tab と呼ばれ、etc にインストールされます。このディレクトリには、実際の devlink.tab ファイルが格納されています。

pkg ディレクトリから pkgproto コマンドを次のように実行します。


find usr SUNWsst -print | pkgproto > prototype

このコマンドによる出力は、たとえば次のようになります。

d none usr 0775 pms mts
d none usr/include 0775 pms mts
d none usr/include/sys 0775 pms mts
d none usr/include/sys/scsi 0775 pms mts
d none usr/include/sys/scsi/targets 0775 pms mts
f none usr/include/sys/scsi/targets/sst_def.h 0444 pms mts
d none usr/kernel 0775 pms mts
d none usr/kernel/drv 0775 pms mts
f none usr/kernel/drv/sst 0664 pms mts
f none usr/kernel/drv/sst.conf 0444 pms mts
d none SUNWsst 0775 pms mts
f none SUNWsst/sstest.c 0664 pms mts

この prototype ファイルはまだ完成していません。このファイルを完成するには、次の修正を加える必要があります。

最終的な prototype ファイルを次に示します。

i pkginfo
i postinstall
i preremove
i copyright
e sed /etc/devlink.tab ? ? ?
f none /usr/include/sys/scsi/targets/sst_def.h 0644 bin bin
f none /usr/kernel/drv/sst 0755 root sys
f none /usr/kernel/drv/sst.conf 0644 root sys
d none SUNWsst 0775 root sys
f none SUNWsst/sstest.c 0664 root sys

sed スクリプトのエントリにあるクエスチョンマークは、インストール先マシンの既存ファイルのアクセス権と所有者を変更してはならないことを示します。

sed クラスアクションスクリプト (/etc/devlink.tab)

ドライバの例では、sed クラススクリプトはドライバのエントリをファイル /etc/devlink.tab に追加するために使用されています。このファイルは、/dev から /devices へのシンボリックリンクを作成するために、devlinks コマンドによって使用されます。sed スクリプトを次に示します。

# sed class script to modify /etc/devlink.tab
!install
/name=sst;/d
$i\
type=ddi_pseudo;name=sst;minor=character	rsst\\A1

!remove
/name=sst;/d

pkgrm コマンドは、このスクリプトの削除に関する部分を実行しません。/etc/devlink.tab ファイルからエントリを削除するには、preremove スクリプトに sed を直接実行するための行を追加する必要があります。

postinstall インストールスクリプト

この例では、このスクリプトは add_drv コマンドの実行だけを行います。

# Postinstallation script for SUNWsst
# This does not apply to a client.
if [$PKG_INSTALL_ROOT = "/" -o -z $PKG_INSTALL_ROOT]; then
   SAVEBASE=$BASEDIR
   BASEDIR=””; export BASEDIR
   /usr/sbin/add_drv sst
   STATUS=$?
   BASEDIR=$SAVEBASE; export BASEDIR
   if [ $STATUS -eq 0 ]
   then
	     exit 20
   else
	     exit 2
   fi
else
   echo "This cannot be installed onto a client."
   exit 2
fi

add_drv コマンドは BASEDIR パラメータを使用するため、スクリプトはこのコマンドを実行する前に BASEDIR の設定を解除し、実行後に復元する必要があります。

add_drv コマンドの動作の 1 つは、devlinks を実行することです。これは、sed クラススクリプトが /etc/devlink.tab に挿入したエントリを使用して、ドライバの /dev エントリを作成します。

postinstall スクリプトの終了コードは重要です。終了コード 20pkgadd コマンドに対して、ユーザーにシステムの再起動 (ドライバのインストール後に必要) を要求するように指示します。終了コード 2pkgadd コマンドに対して、インストールが部分的に失敗したことをユーザーに知らせるように指示します。

preremove 削除スクリプト

このドライバの例では、このスクリプトは /dev 内のリンクを削除し、ドライバに対して rem_drv コマンドを実行します。

# Pre removal script for the sst driver
echo “Removing /dev entries”
/usr/bin/rm -f /dev/rsst*

echo “Deinstalling driver from the kernel”
SAVEBASE=$BASEDIR
BASEDIR=””; export BASEDIR
/usr/sbin/rem_drv sst
BASEDIR=$SAVEBASE; export BASEDIR

exit 

このスクリプトは /dev のエントリを削除します。/devices のエントリは、 rem_drv コマンドによって削除されます。

copyright ファイル

これは、著作権表示のテキストを格納した単純な ASCII ファイルです。著作権表示は、パッケージのインストール開始時に、ファイルに記載されているとおりに表示されます。


	Copyright (c) 1999 Drivers-R-Us, Inc.
	10 Device Drive, Thebus, IO 80586

All rights reserved. This product and related documentation is
protected by copyright and distributed under licenses 
restricting its use, copying, distribution and decompilation. 
No part of this product or related documentation may be 
reproduced in any form by any means without prior written 
authorization of Drivers-R-Us and its licensors, if any.