Принудительное удаление нежелательных пакетов linux-image-extra * - proUbuntu
6 голосов
/

Короче говоря, история , я застрял с несколькими нежелательными, полуконфигурированными пакетами изображений, от которых я пытаюсь избавиться:

$ dpkg -l |grep linux-im
iF  linux-image-3.13.0-100-generic       3.13.0-100.147 i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-101-generic       3.13.0-101.148 i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-92-generic        3.13.0-92.139  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-93-generic        3.13.0-93.140  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iF  linux-image-3.13.0-96-generic        3.13.0-96.143  i386 Linux kernel image for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-100-generic 3.13.0-100.147 i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-101-generic 3.13.0-101.148 i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-92-generic  3.13.0-92.139  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-93-generic  3.13.0-93.140  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP
iH  linux-image-extra-3.13.0-96-generic  3.13.0-96.143  i386 Linux kernel extra modules for version 3.13.0 on 32 bit x86 SMP

Эти образы фактически бесполезны, потому что моя 32-битная система 14.04 находится в контейнере OpenVZ, который несет полную ответственность за ядро. Как видите, гораздо старше:

$ uname -r
2.6.32-042stab116.2

Таким образом, в отличие от большинства подобных вопросов, посвященных тому, как удалить старые образы ядра после рутинных обновлений, я пытаюсь здесь сделать следующее: ПОЛНОСТЬЮ ПРОЧИТЬ ВСЕ ЭТИ 3.13 ПАКЕТЫ , которые не должно быть там во-первых.


Вот краткое изложение моих попыток.

Попытка удалить / очистить пакеты обычными способами (apt-get, apt, aptitude, это не имеет значения), похоже, не работает из-за видимого замкнутого круга.

sudo apt-get purge linux-image-3.13.0-100-generic linux-image-3.13.0-101-generic linux-image-3.13.0-92-generic linux-image-3.13.0-93-generic linux-image-3.13.0-96-generic linux-image-extra-3.13.0-100-generic linux-image-extra-3.13.0-101-generic linux-image-extra-3.13.0-92-generic linux-image-extra-3.13.0-93-generic linux-image-extra-3.13.0-96-generic

Как видно из вывода , на самом деле ничего не удаляется. С другой стороны, aptitude удается продвинуться немного дальше:

sudo aptitude purge linux-image-3.13.0-100-generic linux-image-3.13.0-101-generic linux-image-3.13.0-92-generic linux-image-3.13.0-93-generic linux-image-3.13.0-96-generic linux-image-extra-3.13.0-100-generic linux-image-extra-3.13.0-101-generic linux-image-extra-3.13.0-92-generic linux-image-extra-3.13.0-93-generic linux-image-extra-3.13.0-96-generic

В конце этого процесса , *image-3.13* s исчезли вместе с соответствующими файлами и папками, обычно находящимися в /boot и /lib/modules, но image-extra s по-прежнему сообщается как наполовину установленный (даже если они не содержат файлов, что подтверждено dpkg -L ...)

Более того, зависимости теперь нарушены, поскольку повторная очистка на этом этапе приводит к появлению жалоб на отсутствующие файлы / папки в /boot и /lib/modules. Я попытался разместить фиктивные файлы в ожидаемых местах, как предложил здесь , но в итоге я столкнулся с исходными ошибками. Следующее, я считаю, является ключевым отрывком:

[...]
Removing linux-image-extra-3.13.0-101-generic (3.13.0-101.148) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-101-generic /boot/vmlinuz-3.13.0-101-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-101-generic /boot/vmlinuz-3.13.0-101-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-101-generic
E: /usr/share/initramfs-tools/hooks/fixrtc failed with return 1.
update-initramfs: failed for /boot/initrd.img-3.13.0-101-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
dpkg: error processing package linux-image-extra-3.13.0-101-generic (--purge):
subprocess installed post-removal script returned error exit status 1
[...]

После неудачной попытки предположительно ядерного варианта :

sudo dpkg --remove --force-remove-reinstreq package_name

У меня кончились идеи.

Ответы [ 3 ]

2 голосов
/

Учитывая, что:

  • linux-image-3.13.0-XXX-generic были успешно удалены
  • linux-image-extra-3.13.0-XXX-generic все еще считаются наполовину установленными
  • никакие установленные в настоящее время пакеты не зависят от этих image-extra s
  • во-первых, ни один из этих образов не должен быть там (поскольку ядро ​​2.6 предоставляется контейнером OpenVZ хоста)
  • Ни одна из традиционных попыток не удалась очистить систему

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

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: это хакерская операция низкого уровня, потенциально опасная.

  • найдите все файлы, относящиеся к пакету, который вы хотите удалить (попробуйте $ dpkg -L linux-image-extra-3.13.0-XXX-generic) и удалите их
  • откройте файл /var/lib/dpkg/status, найдите и удалите блок (ы) текста, описывающего пакет (ы), о котором вы хотите, чтобы dpkg забыл о
  • Будьте особенно осторожны с сохранением пустых строк между дескрипторами пакетов, пробелами в начале строк и т. Д. Они говорят, что база данных apt не прощает опечаток.
  • после сохранения файла состояния, dpkg, а также все связанные с apt программы должны вернуться в нормальное состояние
0 голосов
/

Я использую следующее в скрипте bash для уничтожения всего, кроме активного ядра:

dpkg -l linux-* | awk '/^ii/{ print $2}' | grep -v -e "$(uname -r | cut -f1,2 -d"-")" | grep -e "[0-9]" | grep -E "(image|headers)" | xargs sudo apt-get -y purge

Это довольно близко к тому, что вы вызывали, но, возможно, dpkg является необходимой разницей.

Полный набор скриптов здесь, если вы заинтересованы:
https://github.com/mtompkins/linux-kernel-utilities

0 голосов
/

Выполнение ls /boot должно показать некоторые vmlinuz-X.XX.XX файлы. Сделайте apt-get purge linux-image-X.XX.XX-generic для каждого, но НЕ УДАЛЯЙТЕ ядро, которое вы используете. Вы можете проверить, какой из них с uname -r.

...