Пакет различных типов файлов с помощью pkgbuild

Поэтому я упаковываю инструмент для принтера для нашей компании, состоящий из двух файлов .pkg (драйверы) и файла .app.

Сейчас я использую следующую команду для сборки пакета:

pkgbuild --root ./content --script ./scripts --identifier com.MyGreatCompany --version 0.1 --install-location /tmp/ ./PrinterTool.pkg

Таким образом, при установке пакета все содержимое помещается в каталог /tmp/. После этого скрипт после установки завершает установку следующим образом:

installer -verbose -pkg /private/tmp/PackageOne.pkg -target /
installer -verbose -pkg /private/tmp/PackageTwo.pkg -target /
/bin/rm -rf /Applications/Utilities/PrinterTool.app
/bin/mv -f /private/tmp/PrinterTool.app /Applications/Utilities/PrinterTool.app

Это работает. Первая попытка установки проходит успешно, но когда я пытаюсь переустановить тот же пакет, что-то идет не так. Файл .app не копируется в папку /tmp и, следовательно, не перемещается в папку Utilities.

Итак, я хотел бы знать две вещи:

  1. Есть ли объяснение, почему файл .app копируется только один раз?
  2. Это лучший способ упаковать несколько типов файлов? У меня такое ощущение, что помещать его в папку /tmp не нужно. По умолчанию файлы пакета помещаются в какую-то папку установщика /tmp, верно? Разве это не может быть рабочим каталогом, из которого будет запускаться постустановочный скрипт?

person Matter    schedule 16.02.2015    source источник


Ответы (1)


Да... так делать не хочется :D

Во-первых, вам не нужно создавать подпакеты, просто не делайте этого. В одном файле pkg может быть несколько пакетов. Используйте флаг --components для их определения (или создайте список свойств компонентов). Создайте всю свою файловую систему внутри вашего корневого каталога. Итак, в вашем случае у вас будет:

.../content/Applications/Utilities/PrinterTool.app
.../content/Library/...wherever.../driver-whatever.

Тогда ваш --install-location всего лишь /.

Если вам действительно нужно несколько пакетов (или просто так удобнее), вы можете использовать productbuild для их объединения. Вы можете передать несколько параметров --package, чтобы создать установщик с несколькими пакетами.

person Rob Napier    schedule 16.02.2015
comment
Хорошо, я понял. Это работает так же, как и packagemaker, просто укажите полный путь. Что касается подпакетов, они созданы не мной. Это пакеты драйверов, поставляемые вместе с принтером. Они должны быть установлены вместе с принтером. Так что единственный вариант, который у меня есть, - это использовать productbuild. Для пакетов я могу передать параметр --package, какой вариант использовать только для размещения файлов? - person Matter; 17.02.2015
comment
--component или --content, в зависимости от того, что вы делаете. Если это начинает усложняться, вы можете вместо этого создать список рассылки. Вы можете использовать параметр --synthesize, чтобы написать для вас базовый список дистрибутива (по сути, сохраняя все остальные параметры для вас) - person Rob Napier; 17.02.2015