Задать вопрос
@Drovosek01

Почему .pkg перемещает мои файлы, если у него нет скриптов?

Потихоньку разбираюсь в том, как создавать .pkg-файлы в macOS и наткнулся на странную особенность при работе созданных pkg-файлов. После работы они перемещают файлы, которые были указаны в качестве их наполнения.

А теперь подробнее:

Я создаю пакет с помощью pkgbuild или productbuild и использую аргумент --root чтобы указать папке с файлами, которые я хочу запаковать в пакет.
pkgbuild --identifier com.example.anything --root FolderWithFiles --install-location /tmp/other/folder/again test.pkg

либо
productbuild --identifier com.example.anything --root FolderWithFiles /tmp/other/folder/again test.pkg


После выполнения любой из этих команд у меня создается файл test.pkg.
Затем я запускаю этот test.pkg и стандартно нажимаю Далее... Далее.. Установить, ввожу пароль и вижу сообщение о том, что все установилось без проблем.

НО

после этого файлы, которые были в папке, указанной в --root, то есть в папке "FolderWithFiles" - они перемещаются по пути установки, то есть в /tmp/other/folder/again.

Например, если в папке "FolderWithFiles" у меня было приложение "MyBestCalculator.app", то после работы test.pkg в папке "FolderWithFiles" будет пусто, а вот в папке по пути "/tmp/other/folder/again" появится "MyBestCalculator.app"
Если я "MyBestCalculator.app" из папки "/tmp/other/folder/again" перемещу на рабочий стол, то есть в ~/Desktop, а потом снова запущу test.pkg, то после его работы на рабочем столе не будет "MyBestCalculator.app", но вот в "/tmp/other/folder/again" он снова появится.

Какого фига?
То ли я дурак, то ли лыжи не едут.

Внутри test.pkg есть необходимые файлы, зачем он перемещает файлы которые использовались для его наполнения?

Если я правильно понимаю, в ходе своей работы pkg-файл должен распаковать файлы из своей внутренностей и выполнить preinstall и postinstall скрипты, заложенные в него.
Я при создании пакета не указывал путь ни к каким скриптам. Почему он тогда не просто распаковывает файлы, а манипулирует другими файлами в файловой системе?
Это где-то задокументировано?
  • Вопрос задан
  • 34 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
@Drovosek01 Автор вопроса
Я разобрался в нюансах и нашел ответ на вопрос.

Ситуация следующая:
Если при создании пакетов, например такими командами
pkgbuild --identifier com.example.anything --root FolderWithFiles --install-location /tmp/other/folder/again test.pkg

или
productbuild --identifier com.example.anything --root FolderWithFiles /tmp/other/folder/again test.pkg

В папке "FolderWithFiles" будет лежать какое-либо приложение (или каталог в формате bundle), то утилиты pkgbuild и productbuild проанализируют эти приложения и в создаваемый пакет test.pkg добавят значение из CFBundleIdentifier приложения в папке "FolderWithFiles" в файле PackgeInfo

И при установке test.pkg он по инструкции из PackageInfo "внутри самого себя" - будет искать приложение с таким же CFBundleIdentifier, что указан в PackageInfo и удалит его.

Если в общих чертах, то будет именно так, но если подробнее, то есть дополнительные нюансы.

Вот пример пакета, который удалит Telegram.app из системы:
https://mega.nz/file/F4FTUCyL#y3uS1AopYYJ9vy6aYVF4...
https://krakenfiles.com/view/ugpywEQcxA/file.html
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы