Home

понедельник, 19 октября 2009 г.

Установка и удаление приложений III

Третья часть сериала об установке и удалении приложений в  Mac OS X, в которой мы коснемся особенностей работы с пакетами, последней разновидностью типов операций.




Пакеты (.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 коммент.:

Den комментирует...

Спасибо за отличную статью, добавил в избранное=)

Отправить комментарий