Принудительное удаление нежелательных пакетов linux-image-extra*
Короче говоря, я застрял с несколькими нежелательными, полуконфигурированными пакетами изображений, от которых я пытаюсь избавиться:
$ 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
Они по-прежнему считаются наполовину установленными (даже если они не содержат файлов, что подтверждается dpkg -L
...)
Более того, зависимости теперь нарушены, так как повторная очистка на этом этапе вызывает жалобу на отсутствующие файлы / папки в /boot
И в /lib/modules
, I tried to place dummy files at the expected locations, as suggested here, but in the end I run into the original errors. The following, I believe, is the crucial excerpt:
[...]
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
[...]
After trying, unsuccessfully, a supposedly nuclear option:
sudo dpkg --remove --force-remove-reinstreq package_name
У меня кончились идеи.
3 ответа
При условии:
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
связанные программы должны вернуться к нормальной жизни
Я использую следующее в скрипте 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
Дела ls /boot
должен показать некоторые vmlinuz-X.XX.XX
файлы. Делать apt-get purge linux-image-X.XX.XX-generic
для каждого, но НЕ УДАЛЯЙТЕ ядро, которое вы используете. Вы можете проверить, какой из них uname -r
,