В данном практическом примере описывается, как установить драйвер с помощью класса 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. Этот файл используется командой 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. |