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 文件。
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 文件中添加一个驱动程序条目。devlinks 命令使用此文件创建从 /dev 到 /devices 的符号链接。以下是 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 命令不运行该脚本的删除部分。您可能需要向 preremove 脚本中添加一行,以便直接运行 sed 从 /etc/devlink.tab 文件删除条目。
在此示例中,该脚本所需要做的只是运行 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 命令的操作之一是运行 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. |