Руководство разработчика по пакетированию приложений

Установка драйвера с помощью класса 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. Файлы 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 еще не завершено. Чтобы закончить создание этого файла, произведите следующие изменения:

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

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

Очень важен код выхода из сценария postinstall. Код выхода 20 указывает команде pkgadd известить пользователя о необходимости перезагрузки системы после установки драйвера, а код выхода 2 указывает команде pkgadd известить пользователя о том, что установка частично не удалась.

Сценарий удаления 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.