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

Поле 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..