このケーススタディーでは、sed クラスと手続きスクリプトを使用してドライバをインストールする方法を説明します。このパッケージは絶対オブジェクトと再配置可能オブジェクトの両方から構成されるため、この方法は前のケーススタディー (「手続きスクリプトによるドライバのインストールと削除」を参照) とは異なります。
このケーススタディーでは、次の手法の実例を示します。
絶対オブジェクトと再配置可能オブジェクトの両方を使用して prototype ファイルを作成する
prototype ファイルの作成の詳細については、「prototype ファイルの作成 」を参照してください。
postinstall スクリプトを使用する
このスクリプトの詳細については、「手続きスクリプトの書き込み」を参照してください。
preremove スクリプトを使用する
このスクリプトの詳細については、「手続きスクリプトの書き込み」を参照してください。
copyright ファイルを使用する
このファイルについては、「著作権に関するメッセージの書き込み」を参照してください。
絶対パッケージオブジェクトと再配置可能パッケージオブジェクトの両方を含んだ prototype ファイルを作成します。
詳細は、「prototype ファイル」を参照してください。
sed クラススクリプトを prototype ファイルに追加します。
スクリプトの名前は、編集対象ファイルの名前である必要があります。このケースでは、編集対象のファイルが /etc/devlink.tab であるため、sed スクリプトの名前も /etc/devlink.tab となります。sed スクリプトのモード、所有者、およびグループには必要条件はありません (サンプルの prototype ではクエスチョンマークで表されています)。sed スクリプトのファイルタイプは e (編集可能であることを表す) である必要があります。
CLASSES パラメータに sed クラスを含めます。
sed クラスアクションスクリプト (/etc/devlink.tab) を作成します。
postinstall スクリプトを作成します。
postinstall スクリプトでは、add_drv コマンドを実行してデバイスドライバをシステムに追加する必要があります。
preremove スクリプトを作成します。
preremove スクリプトでは、パッケージを削除する前に rem_drv コマンドを実行してデバイスドライバをシステムから削除する必要があります。
copyright ファイルを作成します。
copyright ファイルには、著作権に関するメッセージを記述した ASCII テキストが含まれています。サンプルファイルに示したメッセージは、パッケージのインストール中に画面に表示されます。
PKG=SUNWsst NAME=Simple SCSI Target Driver VERSION=1 CATEGORY=system ARCH=sparc VENDOR=Sun Microsystems BASEDIR=/opt CLASSES=sed |
たとえばこのケーススタディーでは、パッケージオブジェクトについて、次の図に示す階層型レイアウトを使用しています。
パッケージオブジェクトは、上に示した pkg ディレクトリ内での場所と同じ場所にインストールされます。ドライバモジュール (sst および sst.conf) は /usr/kernel/drv にインストールされ、インクルードファイルは /usr/include/sys/scsi/targets にインストールされます。sst、sst.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 ファイルはまだ完成していません。このファイルを完成するには、次の修正を加える必要があります。
制御ファイルのエントリを挿入します (ファイルタイプ i)。これは、制御ファイルの書式がほかのパッケージオブジェクトとは異なるためです。
ターゲットシステムにすでに存在しているディレクトリのエントリを削除します。
各エントリのアクセス権と所有者を変更します。
絶対パッケージオブジェクトの前にスラッシュを付加します。
最終的な 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 に追加するために使用されています。このファイルは、/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 を直接実行するための行を追加する必要があります。
この例では、このスクリプトは 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 スクリプトの終了コードは重要です。終了コード 20 は pkgadd コマンドに対して、ユーザーにシステムの再起動 (ドライバのインストール後に必要) を要求するように指示します。終了コード 2 は pkgadd コマンドに対して、インストールが部分的に失敗したことをユーザーに知らせるように指示します。
このドライバの例では、このスクリプトは /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 コマンドによって削除されます。
これは、著作権表示のテキストを格納した単純な 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. |