В данном практическом примере происходит изменение файла, существующего на целевом компьютере в ходе установки пакета. Здесь используется один из трех способов изменения файла. Два других способа описаны в разделах Изменение файла с помощью стандартных классов и сценариев действий над классами и Изменение файла с помощью класса sed и сценария postinstall. Изменяемый файл называется /etc/inittab.
В данном практическом примере показано, как использовать класс build. Для получения дополнительной информации о классе build см. раздел Сценарий класса build .
Данный подход к изменению /etc/inittab использует класс build. Сценарий класса build выполняется как сценарий интерпретатора команд, и результатом его выполнения становится новая версия исполняемого файла. Другими словами, файл данных /etc/inittab, поставляемый с этим пакетом, будет выполнен, и результатом этого выполнения станет файл /etc/inittab.
Сценарий класса build выполняется в ходе установки и удаления пакета. Параметр install передается файлу, если сценарий выполняется в ходе установки. В сценарии класса build обратите внимание на то, что действия по установке определяются посредством проверки этого параметра.
Для изменения файла /etc/inittab с помощью класса build необходимо выполнить следующие задачи.
Определить файл build в файле prototype.
Запись для файла build в файле prototype должна поместить последний в класс build и определить его тип как e (редактируемый). Убедитесь, что параметр CLASSES в файле pkginfo определен как build.
Создать сценарий класса build.
Приведенный в примере сценарий класса build делает следующее:
Изменяет файл /etc/inittab таким образом, чтобы позволить ему удалить любые существующие изменения этого пакета. Обратите внимание, что имя файла /etc/inittab жестко прописано в команде sed.
Если пакет устанавливается, добавляет новую строку к концу файла /etc/inittab. В этой строке дается комментарий с описанием происхождения данной записи.
Выполняет команду init q.
Данное решение устраняет недостатки, описанные в практических примерах Изменение файла с помощью стандартных классов и сценариев действий над классами и Изменение файла с помощью класса sed и сценария postinstall. Требуется лишь один короткий файл (помимо файлов pkginfo и prototype). Этот файл работает с несколькими экземплярами пакета, поскольку используется параметр PKGINST, а сценарий postinstall не требуется, так как команду init q можно выполнить из сценария класса build.
PKG=case6 NAME=Case Study #6 CATEGORY=applications BASEDIR=/opt ARCH=SPARC VERSION=Version 1d05 CLASSES=build |
i pkginfo e build /etc/inittab ? ? ? |
# 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 |