Пакеты (.pkg) и мультипакеты (.mpkg) служат удобным и надежным способом распространения программного обеспечения для макоси. Сама идея пакетов не нова и не уникальна, знакомые с linux люди сразу могут назвать несколько аналогий: .rpm, .deb и т.д. и т.п.
Сам пакет является специальным образом сформированным архивом, в котором содержатся как файлы для установки, файлы описания и сценарии по установке, апгрейду и удалению пакета из системы.
Для установки системы используется стандартный системный Installer, который знает, как с пакетами обращаться, в том числе проверять, учитывать, складировать.
Еще одной полезной особенностью пакетов является факт, что в меню системного установщика есть пункт, позволяющий до фактического начала установки просмотреть список файлов пакета и понять, что-же и куда сейчас будет размещено.
К сожалению удалять пакеты стандартный установщик не умеет.
Как уже было сказано, системный установщик ведет базу данных по пакетам, которые он установил в системе. С этой базой разработчиков из Apple постоянно случается какой-то казус. Первоначально, в Tiger версии макоси база располагалась в общей библиотеке по адресу /Library/Receipts. Основу базы составляют файлы-слепки пакетов, которые имеют такое-же наименование, как и сам пакет, но по размерам гораздо меньше, так как в них нет файлов программ, а только информация о пакете и его составе, правах и прочее дополнительное инфо, необходимое для поддержки базы.
Многие любопытные пользователи в своих путешествиях по системе натыкались на каталог базы и, видя там пакеты и не понимая сути, удаляли их за ненадобностью, принимая за дубликаты. Такое ошибочное самоуправство приводило к тому, что многие важные системные операции, основанные на работе с базой пакетов, переставали работать. В качестве пострадавших можно назвать утилиту обновлений (System Update) или Дисковую утилиту. У последней отваливалась функция проверки и восстановления прав доступа.
Очевидно поэтому в 10.5 Leopard база перекочевала чуть дальше вглубь, в /Library/Receipts/db и доступ к ней обычному пользователю был закрыт на уровне прав файловой системы. Кроме того, вместо хранения отдельных файлов по каждому пакету стали использовать формат sqlite. В качестве бонуса все пользователи ощутили, насколько быстрее стала проходить операция проверки прав. А наличие единой sql базы по пакетам и файлам позволило использовать запросы sql для получения информации по пакетам и файлам в них.
В 10.6 Snow Leopard, без объявления войны, формат базы опять вернулся к пофайловому, правда местоположение базы вынесли в скрытый каталог /var/db/receipts , очевидно - от греха подальше.
И теперь от голой теории перейдем, так сказать, к естеству.
То, что стандартный установщик предоставляет минимум функционала, еще не отрицает возможность осуществления дополнительных операций с пакетами.
Во-первых, в стандартный комплект поставки системы входит консольная утилита pkgutil, основное назначение которой, как видно из названия, - это работа с пакетами, в полном объеме. Таким образом системный установщик можно назвать лишь красивой, но дешевой оберткой к этой утилите. Полный список возможностей утилиты, как всегда, можно получить при помощи вызова мануала по ней
man pkgutil
а пока покажем несколько наиболее расхожих сценариев.
Получим список установленных пакетов
pkgutil --pkgs
Список очень обширен, поэтому поищем то, что относится к Safari
pkgutil --pkgs | grep -i safari
Выведем список файлов, входящих в состав браузера
pkgutil --files com.apple.pkg.Safari
Удалим файлы, установленные при инсталляции плагина к Сафари
sudo pkgutil --unlink net.sourceforge.SafariAdBlock
Более продвинутый в графическом плане функционал предоставляет утилита Pacifist, которую часто используют для установки отдельных пакетов из набора или для просмотра содержимого пакетов.
Продожение нашего сериала воспоследует ...



1 коммент.:
Спасибо за отличную статью, добавил в избранное=)
Отправить комментарий