Удаление deb-пакетов с некорректными pre- и post-скриптами
Иногда возникает ситуация (особенно на машине разработчика/мейнтейнера), когда deb-пакет нельзя ни корректно доустановить, ни удалить, поскольку сценарий prerm (postrm, preinst, postinst) содержит ошибки. Ключи в apt
и dpkg
, посвящённые сломанным пакетам (--force-remove-*
, -f
) тоже могут не помочь, поскольку в первую очередь разруливают битые зависимости между пакетами.
В этом случае эффективным может оказаться «лечение» на низком уровне. Наиболее радикальный метод предлагался на опеннете: просто зайти в /var/lib/dpkg/info
и удалить все файлы package-name.*, после чего удалить упоминания о пакете из /var/lib/dpkg/status
(подробности по ссылке). Однако в этом случае удалится лишь метаинформация о пакете, а вот хвосты в /usr
, /etc
и др. останутся, как отмечали в комментариях.
Мне помог похожий, но чуть более тонкий способ. Надо зафиксировать, какая именно ошибка возникает в сценарии и в каком именно сценарии (для корректного удаления в первую очередь нас интересуют .prerm и .postrm).
Далее мы заходим в /var/lib/dpkg/info
и просто исправляем package-name.prerm
или package-name.postrm
так, чтобы он отработал корректно. Например, если в .prerm удалялся несуществующий каталог без проверки на его существование, стираем или комментируем команду удаления.
После этого, как обычно, сносим пакет средствами dpkg -r
.
Перемещено hobbit из development