Удаление программ в Mac OS установленных из пакетов .pkg

Мак ОС и установщики

Каждый, кто пересаживался на Mac OS был приятно удивлён, что во многих случаях установка программ на этой операционке сводится к простому «Перетащить программу в папку “Программы“» и всё. Дальше просто кликаешь по ней и она запускается. Я получал массу удовольствия от такого простого, дружелюбного и понятного подхода. Я чётко понимал: где я положил программу, там я её удалю и она попросту исчезнет. Лепота, да и только. Наверно многие были наслышаны о таком славном подходе в макоси. Но увы (или к счастью) нет ничего идеального и программы бывает нужно устанавливать и на маке, в полном смысле этого слова.

Меня это немного разочаровало в своё время, но до недавних пор это как-то не вызывало особых проблем, т.к. я пользовался нормальным софтом, который обычно поставлял с собой скрипты-деинсталляторы для .pkg пакетов. Но вот я решил установить программу FontForge для редактирования шрифтов, которая изначально разрабатывалась под идеологию linux и это моментально принесло с собой неразберху — FontForge.pkg начал методично размазывать себя по всевозможным папкам вместо того, чтобы попросту расположиться в “/Applications/FontForge.app”. Что ещё более усложнило ситуацию — у FontForge отсутствовал какой-либо деинсталлятор. Когда пришло время удалить FontForge я задался вполне резонным вопросом: как же всё же по-человечески удалить программу установленную из .pkg, которая не предлагает полноценного деинсталлятора? Я бы и руками был согласен всё почистить, но я попросту не знал куда pkg раскидал файлы по диску.

Теория

Поискав по мануалам я нашёл более-менее порядочный способ. Для этого приходится перейти на уровень консоли чтобы выполнить удаление этой и подобно установленных программ. Делется это при помощи консольной утилиты lsbom.

Так повелось, что основная часть данных об уже установленных пакетах, начиная с Mac OS 10.6, лежат в папке “/var/db/receipts/” в виде .bom (bill of materials) файлов. Часть же пакетов (с bom файлами внутри) лежат в старом месте “/Library/Receipts/” — это основное место для предыдущих версий mac os. Поскольку в версиях mac os до 10.6 файлы bom могли лежать в пакетах, то выглядело (и выглядит) это примерно так:

Начиная с 10.6, bom фалы в основном можно найти так:

Как уже наверно можно было догадаться, bom файл содержит данные о том, что было записано в файловую систему при инсталляции определённого пакета.

Практика

Наконец сами команды удаления установленного пакета с комментариями:

Возможные проблемы

Надо быть очень осторожным с этими командами т.к. они во-первых выполняются от имени root, а во-вторых в корне файловой системы. Перед подобным удалением установленного пакета лучше убедитесь, что lsbom в списке файлов случайно не укажет какой-нибудь путь, который будучи удалённым из корня приведёт к удалению системных файлов. Так же не пробуйте удалять системные пакеты от Apple — у вас начнутся проблемы с обновлением и ещё бог весть с чем.

Я конечно же знаю про стороннюю утилиту PackageAssistant, которая позволяет управлять пакетами в системе, но последнее обновление у неё датируется 2008 годом. Анализ её исходников мною только подтверждает, что она не подходит для Mac OS 10.6, поскольку ею обрабатываются bom файлы только пакетов лежащих в “/Library/Receipts”, а это, как я уже говорил, применимо только до 10.6.

P.S.: Вообще всё это вопрос добросовестности программистов на чьей ответственности лежит разработка инсталлятора (особенно учитывая факт, что Apple не предоставляет штатных gui средств для работы с установленными пакетами). Под остальными системами так же хватает безответственных программ, после которых систему можно сутками вычищать от хлама. От этого ни одна система не застрахована.

UPD: Как мне подсказали в каментах, можно так же воспользоваться другой консольный утилитой (она тоже не 100% панацея, но можно оба способа пробовать):

источник

Народ подсказывает:

pkgutil –remove pkgName спасет отца русской демократии(правда, не всегда)