Помимо определения каждого объекта пакета в файле prototype, можно расширить его функциональность следующим образом.
Определить дополнительные объекты, которые будут создаваться во время установки пакета.
Создать ссылки во время установки.
Распределить пакеты по нескольким томам.
Организовать вложенные файлы prototype.
Установить значения по умолчанию для полей mode, owner и group.
Указать путь поиска для командыpkgmk.
Установить переменные среды.
В представленных ниже разделах содержится информация о том, как произвести указанные изменения.
С помощью файла prototype можно определять объекты, не поставляемые на распространяемом носителе. Если во время установки объекты требуемого типа не существуют, команда pkgadd создает эти объекты.
Для того чтобы указать, что объект будет создаваться на целевой системе, добавьте для него запись в файле prototype и укажите соответствующий тип файла.
Например, если на целевой системе необходимо создать каталог, отсутствующий на распространяемом носителе, следует добавить следующую запись в файл prototype:
d none /directory 0644 root other |
Для создания пустого файла на целевой системе запись для такого файла в файле prototype может принять следующий вид:
f none filename=/dev/null 0644 bin bin |
Единственными объектами, которые должны поставляться на распространяемом носителе, являются обычные файлы и сценарии редактирования (файлы типов e, v, f), а также каталоги, в которых они содержатся. Любые дополнительные объекты создаются без ссылки на поставляемые объекты, каталоги, именованные каналы, устройства, жесткие и символические ссылки.
Для создания ссылок во время установки пакета в записи файла prototype для ссылочного объекта укажите следующее:
Его тип в виде l (ссылка) или s (символическая ссылка).
Имя пути ссылочного объекта в формате path1=path2, где path1 - файл назначения, а path2 - исходный файл. В общем случае путь path2 в ссылках никогда не должен быть абсолютным. Данный путь должен указываться относительно части пути path1, обозначающей каталог. Например, запись в файле prototype, определяющая символическую ссылку, может выглядеть следующим образом:
s none etc/mount=../usr/etc/mount |
Создание относительных ссылок будет зависеть от способа установки пакета, то есть будет ли он установлен как абсолютный или перемещаемый пакет.
При сборке пакета с помощью команды pkgmk эта команда производит расчеты и действия, необходимые для упорядочения многотомного пакета. Многотомный пакет называется сегментированным пакетом.
Существует и другой способ указать, в какой части будет располагаться объект. Для этого следует воспользоваться необязательном полем part в файле prototype. Номер, указанный в этом поле, отменяет команду pkgmk и помещает компонент в часть, указанную в этом поле. Обратите внимание на то, что существует взаимно-однозначное соответствие между частями и томами для сменных носителей, отформатированных как файловые системы. Если тома были назначены разработчиком, при недостаточном количестве места на любом из томов команда pkgmk выдает ошибку.
Можно создать несколько файлов prototype, а затем включить их при помощи команды !include в один файл prototype. Вложение файлов может потребоваться для облегчения поддержки.
В следующем примере присутствуют три файла prototype. Редактируется главный файл (prototype). Два других файла (proto2 и proto3) включаются в этот файл.
!include /source-dir/proto2 !include /source-dir/proto3 |
Чтобы установить значения по умолчанию для полей mode, owner и group отдельных объектов пакета, необходимо вставить команду !default в файл prototype. Пример:
!default 0644 root other |
Действие команды !default начинается с места ее включения в файл и продолжается до его конца. Действие команды не распространяется на вложенные файлы.
Следует иметь в виду, что для каталогов (тип файла d) и редактируемых файлов (тип файла e), имеющихся в целевой системе (таких как /usr или /etc/vfstab), необходимо установить в значениях полей mode, owner и group в файле prototype вопросительный знак (?). Таким образом, не будут нарушены существующие параметры, измененные администратором сайта.
Если исходное расположение объектов пакета отличается от из расположения в целевой системе, и использование формата path1=path2, описанного в разделе Краткие замечания о расположении каталогов источника и приемника объекта, нежелательно, то можно использовать команду !search в файле prototype.
Например, если в домашнем каталоге был создан каталог pkgfiles, содержащий все информационные файлы и сценарии установки, то можно указать, что необходим поиск этого каталога при сборке пакета с помощью команды pkgmk.
Команда в файле prototype будет выглядеть следующим образом:
!search /home-dir/pkgfiles |
Запрос на поиск не распространяется на вложенные файлы. Кроме того, поиск ограничен определенными перечисленными каталогами. Рекурсивный поиск также не производится.
К файлу prototype можно добавлять команды и в следующей форме: !PARAM=value. Команды, представленные в такой форме, определяют переменные в существующей среде. При наличии нескольких файлов prototype действие этой команды распространяется на тот файл prototype , в котором она была определена.
Переменная PARAM может начинаться с заглавной или со строчной буквы. Если значение переменной PARAM неизвестно во время сборки пакета, то выполнение команды pkgmk прерывается, и выдается сообщение об ошибке. Для получения дополнительной информации о разнице между переменными установки и переменными сборки пакета см. раздел Переменные среды пакета.