LINUX.ORG.RU

Удаление deb-пакетов с некорректными pre- и post-скриптами

 , ,


4

1

Иногда возникает ситуация (особенно на машине разработчика/мейнтейнера), когда 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

★★★★★

Проверено: Dimez ()
Последнее исправление: hobbit (всего исправлений: 3)
Ответ на: комментарий от Werenter

Я об этом думал. Но хитрость в том, что для корректно созданных пакетов описанная ситуация по идее просто не должна происходить. То есть формально да, это вопрос админский, а в реальности больше всего востребован теми, кто пакеты создаёт.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

По отзывам при обычном использовании дебиана проблема тоже регулярно встречается, поэтому для админов тоде актуально.

Werenter ★★☆
()
Ответ на: комментарий от hobbit

Тот, кто пакеты создает, откатится на снапшот. А вот описанная ситуация время от времени случается. Например, из-за некорректных зависимостей в postrm происходит вызов команды из уже удаленного пакета.

undef ★★★
()
Ответ на: комментарий от MoldAndLimeHoney

Сделай лучше, ноу проблем.

Мне тоже RPM нравится больше, чем DEB. Только одним RPM сыт не будешь, над ним нужен какой-нибудь dnf или zypper или… внезапно apt опять же, как у альта.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от Werenter

Я только за — но он для дома, для семьи. Для работы вряд ли.

hobbit ★★★★★
() автор топика

Ну описан механизм тестирования на проде и отладки на живых пользователях силами самих пользователей :)

gns ★★★★★
()

когда deb-пакет нельзя ни корректно доустановить, ни удалить

Что ж за пакеты такие? Неужто из оф. реп? Если франкенштейн, то ССЗБ.

а вот хвосты в /usr, /etc и др. останутся

Та проще уже влезть архиватором в такой пакет, посмотреть, что куда кладется и вручную все почистить. Слишком много телодвижений.

И да, нафига ставить черт-те что в систему?..

Gonzo ★★★★★
()
Последнее исправление: Gonzo (всего исправлений: 3)
Ответ на: комментарий от Gonzo

Первоначально эта заметка была в разделе «Разработка», и было понятно, откуда и нафига. :P

hobbit ★★★★★
() автор топика
Ответ на: комментарий от Gonzo

Нет, архиватором не проще. Пакет ещё надо удалить из базы dpkg, то есть dpkg вызывать всё равно придётся. Или ещё хуже - редактировать его базу вручную. Вариант, более-менее аналогичный твоему, но более простой это затереть prerm/postrm скрипты из /var/lib/dpkg/info, не вдаваясь в детали их работы, и сделать apt-get purge или его аналог dpkg. Итогом будет как раз удаление всего что было в архивах + чистка базы dpkg.

Но тут есть минус - в prerm/postrm может быть что-то существенное (например настройка подмен файлов другим пакетам или альтернатив), и тогда эти хвосты останутся. Чтоб их тоже затереть - придётся в любом случае разбираться в этих скриптах.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Пакет ещё надо удалить из базы dpkg

Та я вообще не про то. Нахрена было ставить это нечто? (пакетом я такое и назвать не могу). За 15 лет бубунты и дебиана (слава богу, в прошлом уже) я такого не встречал, хотя извращался с системой как только мог, и даже убивал с последующей переустановкой.

Gonzo ★★★★★
()
Ответ на: комментарий от Gonzo

Всмысле не про то? А это про что?

Та проще уже влезть архиватором в такой пакет, посмотреть, что куда кладется и вручную все почистить.

Я на это отвечал.

А насчёт «зачем ставить» - ну вот на лоре недавно даже кому-то подсказывал как пропустить битый pre/postrm скрипт, сломавший ему apt, обстоятельства не помню.

А во-вторых баги и в оф репах не исключены, мейнтейнеры не все идеальные и сценариев использования пакета может быть слишком много.

firkax ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.