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. Этот файл используется командой 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, которая использует запись, размещенную в каталоге /etc/devlink.tab сценарием класса sed для создания записей /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. |