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

Создание пакетов с архивом класса

Пакетом с архивом класса, который является дополнением к двоичному интерфейсу приложений (ABI), называется пакет, в котором определенные наборы файлов были объединены в отдельные файлы или архивы и при необходимости сжаты или зашифрованы. Форматы архива класса увеличивают исходную скорость установки на величину до 30% и улучшают надежность в ходе установки пакетов и исправлений на потенциально активные файловые системы.

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

Структура каталога архивного пакета

Элементы пакета, показанные на рисунке ниже, представляет собой каталог, содержащий файлы пакета. Этот каталог должен называться так же, как и пакет.

Рисунок 6–1 Структура каталога пакета

На рисунке представлены пять подкаталогов, расположенные непосредственно под каталогом пакета: pkginfo, pkgmap, reloc, root и install. Показаны также их подкаталоги.

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

Элемент 

Описание 

pkginfo

Файл, описывающий пакет в целом, включая особые переменные среды и установочные команды 

pkgmap

Файл с описанием каждого устанавливаемого объекта, например, файла, каталога или канала 

reloc

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

root

Необязательный каталог, содержащий файлы, которые будут установлены относительно каталога root (корневые объекты)

install

Необязательный каталог, содержащий сценарии и другие вспомогательные файлы (за исключением файлов pkginfo и pkgmap, все файлы типа ftype i находятся здесь)

Формат архива класса позволяет разработчику пакета объединить файлы из каталогов reloc и root в архивы, которые могут быть сжаты, зашифрованы или иным образом обработаны с тем, чтобы увеличить скорость установки, уменьшить размер пакета или увеличить его безопасность.

Интерфейс ABI позволяет назначить любой файл пакета какому-либо классу. Все файлы определенного класса могут быть установлены на диск с помощью особого метода, определенного сценарием действия над классом. Этот особый метод может использовать программы, доступные на целевой системе, или программы, поставляемые с пакетом. Результирующий формат похож на стандартный формат интерфейса ABI. На следующем рисунке видно, что добавлен еще один каталог. Любые классы файлов, предназначенных для архивирования, просто объединяется в один файл и помещаются в каталог archive. Все архивированные файлы удаляются из каталогов reloc и root, а в каталог install помещается установочный сценарий действия над классом.

Рисунок 6–2 Структура каталогов архивного пакета

На рисунке показана та же самая структура каталога, что и на рисунке 6-1, с добавлением подкаталога архива (archive).

Ключевые слова, используемые в пакетах с архивом классов

Для поддержки этого нового формата архива класса, трем новым интерфейсам в виде ключевых слов присвоено особое значение в файле pkginfo. Эти ключевые слова используются для обозначения классов, требующих специального обращения. Формат каждой строки с ключевым словом таков: keyword=class1[class2 class3 ...]. Значения каждого ключевого слова определены в следующей таблице.

Ключевое слово 

Описание 

PKG_SRC_NOVERIFY

Сообщает команде pkgadd что не следует проверять существование и свойства файлов в поставляемых каталогах reloc или root пакета, если они принадлежат к именованному классу. Это требуется для всех заархивированных классов, поскольку эти файлы больше не содержатся в каталогах reloc или root. Они превратились в файл частного формата в каталоге archive.

PKG_DST_QKVERIFY

Файлы этого класса проверяются после установки с помощью быстрого алгоритма и почти не имеют текстового вывода. Функция быстрой проверки сначала правильно устанавливает атрибуты каждого файла, а затем проверяет, удачно ли прошла операция. Кроме того, существует тест на размер файла и время его изменения, результаты которого сравниваются с величинами, указанными в файле pkgmap. Проверка контрольной суммы не производится, и система восстановления после ошибки хуже, чем система, предлагаемая стандартным механизмом проверки. В случае отказа питания или сбоя диска в ходе установки содержимое может не соответствовать установленным файлам. Данное несоответствие всегда можно разрешить с помощью команды pkgrm.

PKG_CAS_PASSRELATIVE

Обычно установочный сценарий действия над классом получает из stdin (стандартного входного потока) список пар источник-адресат, который сообщает ему, какие файлы следует устанавливать. Классы, назначенные PKG_CAS_PASSRELATIVE, не получают пар источник-адресат. Вместо этого они получают список, первой записью в котором является расположение исходного пакета, а остальная часть списка - пути конечного каталога. Это сделано специально для упрощения процесса извлечения из архива. По положению исходного пакета можно найти архив в каталоге archive. После этого пути конечного каталога передаются в функцию, которая отвечает за извлечение содержимого архива. Каждый представленный путь конечного каталога является либо абсолютным, либо относительным по отношению к базовому каталогу в зависимости от того, располагался ли первоначально этот путь в каталоге root или reloc. При выборе этого варианта могут возникнуть сложности при объединении относительных и абсолютных путей в один класс.

Для каждого заархивированного класса требуется сценарий действия над классом. Это файл, содержащий команды интерпретатора sh, который выполняется командой pkgadd для фактической установки файлов из архива. Если сценарий действия над классом находится в каталоге install пакета, команда pkgadd передает всю ответственность за установку этому сценарию. Сценарий действия над классом выполняется с полномочиями администратора (пользователя root) и может помещать свои файлы практически в любое место целевой системы.


Примечание –

Единственное ключевое слово, являющееся абсолютно обязательным для создания пакета с архивом класса, - это PKG_SRC_NOVERIFY. Оставшиеся ключевые слова могут использоваться для увеличения скорости установки или для сохранения программного кода.


Утилита faspac

Утилита faspac преобразует стандартный пакет интерфейса ABI в формат архива класса, используемый в связанных пакетах. Эта утилита осуществляет архивирование с помощью cpio и сжатие с помощью compress. В результирующем пакете появляется дополнительный каталог верхнего уровня с названием archive. В этом каталоге будут находиться все архивы, названные по имени класса. В каталоге install будут находиться сценарии действий над классами, необходимые для распаковки каждого архива. Абсолютные пути не архивируются.

Вызов служебной программы faspac имеет следующий формат:


faspac [-m Archive Method] -a -s -q [-d Base Directory] /
[-x Exclude List] [List of Packages]

Каждый параметр команды faspac описан в следующей таблице.

Параметр 

Описание 

-m Способ архивирования

 

Указывает на способ архивирования или сжатия. По умолчанию для сжатия используется утилита bzip2. Для переключения на метод zip или unzip используйте параметр - m zip, либо (для cpio и compress) параметр -m cpio.

-a

Исправляет атрибуты (необходимы полномочия администратора (пользователя root)). 

-s

Означает перевод пакета в стандартный тип ABI. Данный параметр берет пакеты cpio или compresssed и переводит их в стандартный формат пакета интерфейса ABI. 

-q

Означает режим без выдачи сообщений. 

-d Базовый каталог

Указывает каталог, в котором все имеющиеся пакеты будут обрабатываться в соответствии с требованиями, указанными в командной строке. Этот параметр является взаимоисключающим с параметром List of Packages.

-x Список исключений

Выдает разделенный запятыми, кавычками или пробелами список пакетов, которые следует исключить из процесса обработки. 

Список пакетов

Выдает список пакетов, которые необходимо обработать.