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

Изменение файла с помощью класса build

В данном практическом примере происходит изменение файла, существующего на целевом компьютере в ходе установки пакета. Здесь используется один из трех способов изменения файла. Два других способа описаны в разделах Изменение файла с помощью стандартных классов и сценариев действий над классами и Изменение файла с помощью класса sed и сценария postinstall. Изменяемый файл называется /etc/inittab.

Методы

В данном практическом примере показано, как использовать класс build. Для получения дополнительной информации о классе build см. раздел Сценарий класса build .

Подход

Данный подход к изменению /etc/inittab использует класс build. Сценарий класса build выполняется как сценарий интерпретатора команд, и результатом его выполнения становится новая версия исполняемого файла. Другими словами, файл данных /etc/inittab, поставляемый с этим пакетом, будет выполнен, и результатом этого выполнения станет файл /etc/inittab.

Сценарий класса build выполняется в ходе установки и удаления пакета. Параметр install передается файлу, если сценарий выполняется в ходе установки. В сценарии класса build обратите внимание на то, что действия по установке определяются посредством проверки этого параметра.

Для изменения файла /etc/inittab с помощью класса build необходимо выполнить следующие задачи.

Данное решение устраняет недостатки, описанные в практических примерах Изменение файла с помощью стандартных классов и сценариев действий над классами и Изменение файла с помощью класса sed и сценария postinstall. Требуется лишь один короткий файл (помимо файлов pkginfo и prototype). Этот файл работает с несколькими экземплярами пакета, поскольку используется параметр PKGINST, а сценарий postinstall не требуется, так как команду init q можно выполнить из сценария класса build.

Файлы практических примеров

Файл pkginfo

PKG=case6
NAME=Case Study #6
CATEGORY=applications
BASEDIR=/opt
ARCH=SPARC
VERSION=Version 1d05
CLASSES=build

Файл prototype

i pkginfo
e build /etc/inittab ? ? ?

Файл Build

# PKGINST parameter provided by installation service
# remove all entries from the existing table that
# are associated with this PKGINST
sed -e "/^[^:]*:[^:]*:[^:]*:[^#]*#$PKGINST$/d" /etc/inittab ||
exit 2
if [ "$1" = install ]
then
# add the following entry to the table
echo "rb:023456:wait:/usr/robot/bin/setup #$PKGINST" ||
exit 2
fi
/sbin/init q ||
exit 2
exit 0