[Разработка под MacOS] Создаем установочные пакеты для macOS средствами системы

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
24-Июн-2021 18:33


Disclaimer: приведенные здесь методы успешно работают в macOS Mojave, Catalina и Big Sur, но для боевых систем рекомендуется всегда проводить собственные тесты собранных пакетов.Как-то так вышло, что раньше я довольно скептически относился к macOS, поскольку не имел возможности поработать с ней в более-менее устоявшейся корпоративной среде (т.е. не когда на всю компанию в 500-600 человек есть 2 мака, и те у генерального с его замом, да еще и с виндой в буткемпе). Но несколько лет назад мне повезло познакомиться с очень масштабной гетерогенной средой, показавшей, что в современных компаниях macOS не только успешно сосуществует с привычной Windows, но иногда и превалирует над ней в общей доле клиентских машин.Позднее я оказался в другой компании, где отсутствовали привычные инструменты управления парком (а непривычные оказались недоступны из-за серьезных ограничений для региональных подразделений, в одно из которых я и входил). Проводить настройку и устанавливать софт "руками" я не люблю практически с самого начала своей карьеры – отлаженный сценарий экономит время и нервы, поэтому я начал искать варианты установки ПО на macOS.Часть приложений распространяется в формате PKG – это пакет, сформированный специально для обработки приложением Installer, позволяющий провести установку как из графического интерфейса, так и из консоли (например, так: installer -pkg $pkgfile -target /Applications). В идеале хотелось бы иметь пакеты в таком формате для всего стандартного ПО, распространяемого на клиентские машины, к этому и будем стремиться.К сожалению, существенная часть ПО распространяется в виде DMG-образов, позволяющих просто примонтировать скачанный файл-образ и скопировать подготовленное приложение (обычно в формате .app) в каталог /Applications. К счастью, перепаковать такое приложение практически не составляет труда:
  • монтируем dmg-образ;
  • копируем приложение к себе на машину (каталог не имеет большого значения, но лучше следовать канонам – стандартный каталог для приложений /Applications);
  • выполняем в терминале следующую команду:
    productbuild --component /path/to/YourApplication.app /Applications/ /path/to/YourApplication.pkg
    (сначала указываем путь к скопированному приложению, далее идет опция, говорящая, что установка из пакета будет проводиться в каталог /Applications, и в финале задаем путь к создаваемому пакету, рекомендую везде использовать полные пути)
В результате получаем установочный пакет, одинаково успешно ведущий себя как при графической, так и при консольной процедуре установки. Да, установку из DMG-образа вполне можно реализовать, монтируя образ через hdiutil и копируя приложение, но этот вариант показался мне менее универсальным.Иногда может потребоваться выполнить какие-то действия с системой, которые в обычных условиях можно было бы реализовать с помощью удаленного вызова или, например, shell-скриптов, но, предположим, что удаленного доступа к машине нет, а пользователь не горит желанием открывать консоль (если вообще знает, что это, ну и будем реалистами, ему и не надо). Система позволяет создавать подобие т.н. payload-free пакетов (в которые при желании можно все равно запихнуть некоторый payload) – в формируемом пакете основной интерес для нас будет представлять файл postinstall – тот же shell-скрипт, но выполняющийся в рамках работы с установочным пакетом.Создадим папку scripts(я предпочитаю создавать каталоги в местах, где точно обладаю необходимыми правами, например, домашний каталог и его дочерние папки), в нее необходимо поместить весь контент, который потребуется для выполнения сценария (например, если вы осуществляете настройку принтера на клиентской машине, в пакет можно включить файл драйвера .ppd).После того, как все необходимые файлы скопированы, открываем терминал, переходим с его помощью внутрь каталога scripts и выполняем команду pico postinstall. Откроется стандартный консольный текстовый редактор (обычно, если вы ничего не меняли, это будет nano), в редактор необходимо ввести или скопировать текст вашего сценария, для примера приведу сценарий, меняющий параметры времени/таймзоны:
#!/bin/bash
ntp="time.euro.apple.com"
sudo /usr/sbin/systemsetup -setusingnetworktime on
sudo /usr/sbin/systemsetup -setnetworktimeserver "$ntp"
exit 0
После заполнения сценария всеми необходимыми операциями нажимаем Ctrl+X для выхода из редактора (жмем Y на вопрос о сохранении изменений, разумеется), но из терминала не выходим. Скрипт должен считаться исполняемым, добавляем ему соответствующие права командой sudo chmod a+x postinstall (вводим пароль при необходимости).Создаем наш пакет следующей командой:
sudo pkgbuild --identifier com.package.name --nopayload --scripts /path/to/scripts/ "/path/to/your_package.pkg"
(в качестве идентификатора по идее надо указывать что-то, что позволит однозначно определить назначение пакета, пути по традиции указываем полные).В большинстве случаев я рекомендовал бы использовать более привычные, распространенные инструменты администрирования, но в случае их отсутствия, надеюсь, эти решения помогут вам хоть немного упростить некоторые рутинные процессы.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_razrabotka_pod_macos (Разработка под MacOS), #_pkg, #_pkgbuild, #_scripting, #_bash, #_razrabotka_pod_macos (
Разработка под MacOS
)
Профиль  ЛС 
Показать сообщения:     

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

Текущее время: 22-Ноя 06:28
Часовой пояс: UTC + 5