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

Формат файла prototype

Ниже приведен пример формата каждой строки в файле prototype:


partftypeclasspathmajorminormodeownergroup

part

Необязательное числовое поле, позволяющее сгруппировать объекты пакета в части. Значение по умолчанию - 1. 

ftype

Поле, состоящее из одного символа, указывающего на тип объекта. См. раздел Поле ftype.

class

Класс установки, к которому принадлежит объект. См. раздел Поле class.

path

Абсолютное или относительное имя пути, указывающее, в каком месте целевой системы будет находиться объект пакета. См. раздел Поле path.

major

Старший номер устройства для специальных блочных или символьных устройств. 

minor

Младший номер устройства для специальных блочных или символьных устройств. 

mode

Восьмеричный режим объекта (например, 0644). См. раздел Поле mode.

owner

Владелец объекта (например, bin или root). См. раздел Поле owner.

group

Группа, к которой принадлежит объект (например, bin или sys). См. раздел Поле group.

Обычно определяются только поля ftype, class, path, mode, ownergroup. Эти поля описаны в следующих разделах. Для получения дополнительной информации по этим полям см. справочную страницу prototype(4).

Поле ftype

Поле ftype или тип файла является односимвольным полем, обозначающим тип файла объекта пакета. Допустимые типы файлов представлены в следующей ниже таблице.

Таблица 2–3 Допустимые типы файлов в файле prototype

Допустимое значение типа файла 

Описание типа файла 

f

Стандартный исполняемый файл или файл данных 

e

Файл, который изменяется во время установки или удаления (может быть общим для нескольких пакетов) 

v

Непостоянный файл (содержимое которого будет меняться, например, файл журнала) 

d

Каталог 

x

Монопольный каталог, доступный только этому пакету (может содержать незарегистрированные журналы или информацию базы данных) 

l

Ссылочный файл 

p

Именованный канал 

c

Специальное символьное устройство 

b

Специальное блочное устройство 

i

Информационный файл или сценарий установки 

s

Символическая ссылка 

Поле class

Поле class именует класс, к которому принадлежит объект. Использование классов является необязательной функцией для разработки пакета. Более подробно эта функция рассматривается в разделе Создание сценариев действий над классами.

Если классы не используются, объект принадлежит к классу none. При выполнении команды pkgmk для сборки пакета команда вставляет параметр CLASSES=none в файл pkginfo. У файлов типа i поле class должно быть пустым.

Поле path

Поле path используется для определения местонахождения объекта пакета в целевой системе. Указать местоположение файла можно с помощью абсолютного (например, /usr/bin/mail) или относительного имени пути (например, bin/mail). Использование абсолютного имени пути означает, что местоположение объекта в целевой системе определяется пакетом и не может быть изменено. Объекты пакета с относительными именами пути являются перемещаемыми.

Перемещаемому объекту не требуется абсолютного пути в целевой системе. Вместо этого его местоположение определяется в ходе процесса установки.

Перемещаемыми могут быть отдельные объекты или все объекты пакета. Перед написанием сценария установки или созданием файла prototype необходимо решить, будут ли объекты пакета иметь фиксированное местоположение (например, сценарии запуска в каталоге /etc) или перемещаемое .

Существуют два типа перемещаемых объектов: коллективно перемещаемые и индивидуально перемещаемые.

Коллективно перемещаемые объекты

Коллективно перемещаемые объекты расположены в месте, связанном с общей установочной базой, называемой базовым каталогом . Базовый каталог определяется в файле pkginfo с помощью параметра BASEDIR. Например, перемещаемый объект tests/generic в файле prototype требует, чтобы в файле pkginfo по умолчанию был установлен параметрBASEDIR. Пример:


BASEDIR=/opt

В данном примере после установки объекта он будет расположен в каталоге /opt/tests/generic.


Примечание –

Единственным каталогом, куда можно устанавливать программное обеспечение, не являющееся базовым ПО Solaris, это каталог /opt.


По возможности старайтесь использовать коллективно перемещаемые объекты. В общем случае основная часть пакета может быть перемещаемой, а несколько файлов (например, файлы в каталогах /etc или /var) могут быть указаны как абсолютные. Однако, если пакет содержит множество различных перемещений, рекомендуется разделить пакет на несколько пакетов с явно указанными значениями BASEDIR в соответствующих файлах pkginfo.

Индивидуально перемещаемые объекты

Индивидуально перемещаемые объекты, в отличие от коллективно перемещаемых, не ограничены размещением в одном и том же каталоге. Для определения индивидуально перемещаемого объекта необходимо указать установочную переменную в поле path файла prototype. После определения установочной переменной нужно создать сценарий request, запрашивающий установщик о расположении перемещаемого базового каталога, или сценарий checkinstall для получения имени пути из данных файловой системы. Для получения дополнительной информации по сценарию request см. раздел Создание сценария request , а информация по сценарию checkinstall находится в разделе Сбор данных о файловой системе.


Внимание – Внимание –

Управлять индивидуально перемещаемыми объектами сложно. Использование индивидуально перемещаемых объектов может привести к большому разнесению компонентов пакета, которые будет сложно изолировать при установке нескольких версий или архитектур пакета. По возможности старайтесь использовать коллективно перемещаемые объекты.


Параметрические имена путей

Параметрическое имя пути - это имя пути, содержащее спецификацию переменной. Например, /opt/$PKGINST/filename является параметрическим именем пути, поскольку включает спецификацию переменной $PKGINST. Значение спецификации переменной по умолчанию должно быть определено в файле pkginfo. Позднее это значение может быть изменено сценариями request или checkinstall.

Спецификация переменной должна стоять в начале или в конце имени пути или должна быть заключена между символами наклонной черты (/). Допускаются следующие формы параметрических имен пути.


$PARAM/tests
tests/$PARAM/generic
/tests/$PARAM

После того как спецификация переменной определена, путь может быть вычислен как абсолютный или перемещаемый. В примере ниже файл prototype содержит следующую запись:


f none $DIRLOC/tests/generic

Файл pkginfo содержит следующую запись:


DIRLOC=/myopt

Имя пути $DIRLOC/tests/generic приобретает вид абсолютного имени пути /myopt/tests/generic независимо от того, был ли установлен параметр BASEDIR в файле pkginfo.

В данном примере файл prototype идентичен одному из предыдущих примеров, а в файле pkginfo содержатся следующие записи:


DIRLOC=firstcut
BASEDIR=/opt

Имя пути $DIRLOC/tests/generic будет выражено в виде перемещаемого имени пути /opt/firstcut/tests/generic.

Для получения дополнительной информации о параметрических именах путей см. раздел Использование параметрических базовых каталогов.

Краткие замечания о расположении каталогов источника и приемника объекта

Поле path в файле prototype определяет расположение объекта в целевой системе. Если структура каталога не повторяет структуру, которую необходимо получить в целевой системе, то следует указать существующее местоположение объектов пакета в файле prototype. Для получения дополнительной информации о структурировании объектов в пакете см. раздел Упорядочение содержимого пакета.

Если структура области разработки отличается от желаемой структуры пакета, то можно использовать формат path1=path2 в поле path. В этом формате path1 означает расположение объекта в целевой системе, а path2 - расположение объектов в системе разработчика.

Этот же формат имени пути (path1=path2) можно использовать следующим образом: определить path1 в качестве перемещаемого имени объекта , а path2 - в качестве полного имени пути к этому объекту в системе разработчика.


Примечание –

path1 не должен содержать неопределенных переменных сборки, но может содержать неопределенные переменные установки. path2 не может содержать никаких неопределенных переменных, однако можно использовать переменные обоих типов. Для получения дополнительной информации о разнице между переменными установки, и переменными, создаваемыми в процессе сборки пакета, см. раздел Переменные среды пакета.


Для ссылок должен использоваться формат path1= path2, поскольку они создаются с помощью команды pkgadd. В общем случае путь path2 в ссылках никогда не должен быть абсолютным. Данный путь должен указываться относительно части пути path1, обозначающей каталог.

Вместо формата path1=path2 можно использовать команду !search. Для получения дополнительной информации см. раздел Указание пути поиска для команды pkgmk..

Поле mode

Поле mode может содержать восьмеричное число, знак вопроса (?) или спецификацию переменной. Восьмеричное число определяет режим объекта после его установки на целевую систему. Знак вопроса ? означает, что при установке объекта режим останется неизменным. Подразумевается, что объект с тем же именем уже существует в целевой системе.

Спецификация переменной в форме $mode означает, что данное поле будет установлено во время сборки пакета. Первая буква переменной должна быть строчной. Обратите внимание, что эта переменная должна быть определена во время сборки пакета либо в файле prototype, либо в качестве параметра команды pkgmk. Для получения дополнительной информации о разнице между переменными установки и переменными сборки пакета см. раздел Переменные среды пакета.

У файлов типа i (информационные файлы), l (жесткая ссылка) и s (символическая ссылка) это поле должно быть пустым.

Поле owner

Поле owner может содержать имя пользователя, знак вопроса (?) или спецификацию переменной. Имя пользователя не должно быть длиннее 14 символов и должно соответствовать имени, уже существующему в целевой системе (например, bin или root). Знак вопроса ? означает, что при установке объекта владелец (owner) останется неизменным. Подразумевается, что объект с тем же именем уже существует в целевой системе.

Спецификация переменной может быть указана в форме $ Owner или $owner, т.е. первая буква может быть как заглавной, так и строчной. Если переменная начинается со строчной буквы, то ее необходимо определить в период сборки пакета в файле prototype или в качестве параметра команды pkgmk. Если переменная начинается с заглавной буквы, то спецификация переменной будет внесена в файл pkginfo в качестве значения по умолчанию и может быть переопределена в ходе установки с помощью сценария request. Для получения дополнительной информации о разнице между переменными, создаваемыми в процессе установки, и переменными, создаваемыми в процессе сборки пакета, см. раздел Переменные среды пакета.

У файлов типа i (информационный файл) и lb (жесткая ссылка) это поле должно быть пустым.

Поле group

Поле group может содержать имя группы, знак вопроса (?) или спецификацию переменной. Имя группы не должно быть длиннее 14 символов и должно соответствовать имени, уже существующему в целевой системе (например, bin или sys). Знак вопроса ? означает, что при установке объекта группа (group) останется неизменной. Подразумевается, что объект с тем же именем уже существует в целевой системе.

Спецификация переменной может быть указана в форме $ Group или $group, т.е. первая буква переменной может быть как заглавной, так и строчной. Если переменная начинается со строчной буквы, то ее необходимо определить в период сборки пакета в файле prototype или в качестве параметра команды pkgmk. Если переменная начинается с заглавной буквы, то спецификация переменной будет внесена в файл pkginfo в качестве значения по умолчанию и может быть переопределена в ходе установки с помощью сценария request. Для получения дополнительной информации о разнице между переменными установки и переменными сборки пакета см. раздел Переменные среды пакета.

У файлов типа i (информационный файл) и l (жесткая ссылка) это поле должно быть пустым.