[Разработка под MacOS] Создаем установочные пакеты для macOS средствами системы
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
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
===========
Похожие новости:
- [Open source, JavaScript, Программирование, Серверное администрирование] zx – bash скрипты на javascript
- [Oracle, SQL, Администрирование баз данных, DevOps] Немного CI/CD магии: настраиваем доставку скриптов миграции базы данных с использованием GitLab и Liquibase
- [*nix, Разработка под MacOS] macOS 12 Monterey — новая ОС от Apple
- [Разработка под iOS, Разработка под MacOS] Что ждать разработчику от WWDC 2021
- [Разработка под iOS, Разработка под MacOS, Гаджеты, Софт, IT-компании] iOS 15, iPadOS 15 и другие новинки WWDC 2021
- [Настройка Linux, *nix, Интерфейсы, Настольные компьютеры] Почему клавиатура всегда быстрее мыши
- [Информационная безопасность, Разработка под MacOS, Настольные компьютеры, Процессоры] В Apple M1 нашли уязвимость M1RACLES — возможна скрытая передача данных между приложениями, вплоть до видеопотока
- [Обработка изображений, Разработка под MacOS, Настольные компьютеры] Анимированное изображение в формате GIF на x86 занимает 360 МБ ОЗУ, на Apple Silicon — почему-то 35.51 ГБ со свапом
- [Разработка под iOS, Разработка мобильных приложений, Разработка под MacOS, IT-компании] Разработчик рассказал, сколько ему принесло место в рейтинге приложений магазинов iOS и Mac: около 60$
- [Настройка Linux, Системное администрирование, *nix] Неожиданные подвохи при перенаправлениях оболочки в $((i++)) (перевод)
Теги для поиска: #_razrabotka_pod_macos (Разработка под MacOS), #_pkg, #_pkgbuild, #_scripting, #_bash, #_razrabotka_pod_macos (
Разработка под MacOS
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 01:17
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Disclaimer: приведенные здесь методы успешно работают в macOS Mojave, Catalina и Big Sur, но для боевых систем рекомендуется всегда проводить собственные тесты собранных пакетов.Как-то так вышло, что раньше я довольно скептически относился к macOS, поскольку не имел возможности поработать с ней в более-менее устоявшейся корпоративной среде (т.е. не когда на всю компанию в 500-600 человек есть 2 мака, и те у генерального с его замом, да еще и с виндой в буткемпе). Но несколько лет назад мне повезло познакомиться с очень масштабной гетерогенной средой, показавшей, что в современных компаниях macOS не только успешно сосуществует с привычной Windows, но иногда и превалирует над ней в общей доле клиентских машин.Позднее я оказался в другой компании, где отсутствовали привычные инструменты управления парком (а непривычные оказались недоступны из-за серьезных ограничений для региональных подразделений, в одно из которых я и входил). Проводить настройку и устанавливать софт "руками" я не люблю практически с самого начала своей карьеры – отлаженный сценарий экономит время и нервы, поэтому я начал искать варианты установки ПО на macOS.Часть приложений распространяется в формате PKG – это пакет, сформированный специально для обработки приложением Installer, позволяющий провести установку как из графического интерфейса, так и из консоли (например, так: installer -pkg $pkgfile -target /Applications). В идеале хотелось бы иметь пакеты в таком формате для всего стандартного ПО, распространяемого на клиентские машины, к этому и будем стремиться.К сожалению, существенная часть ПО распространяется в виде DMG-образов, позволяющих просто примонтировать скачанный файл-образ и скопировать подготовленное приложение (обычно в формате .app) в каталог /Applications. К счастью, перепаковать такое приложение практически не составляет труда:
#!/bin/bash
ntp="time.euro.apple.com" sudo /usr/sbin/systemsetup -setusingnetworktime on sudo /usr/sbin/systemsetup -setnetworktimeserver "$ntp" exit 0 sudo pkgbuild --identifier com.package.name --nopayload --scripts /path/to/scripts/ "/path/to/your_package.pkg" (в качестве идентификатора по идее надо указывать что-то, что позволит однозначно определить назначение пакета, пути по традиции указываем полные).В большинстве случаев я рекомендовал бы использовать более привычные, распространенные инструменты администрирования, но в случае их отсутствия, надеюсь, эти решения помогут вам хоть немного упростить некоторые рутинные процессы. =========== Источник: habr.com =========== Похожие новости:
Разработка под MacOS ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 01:17
Часовой пояс: UTC + 5