web-dev-qa-db-fra.com

Forcer la suppression des paquets non souhaités linux-image-extra *

Pour faire un histoire longue bref, je suis coincé avec une poignée de paquets d’images non désirés, à moitié configurés, que je tente de supprimer:

$ 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

Ces images sont en fait inutiles, car mon système 14.04 32 bits réside dans un conteneur OpenVZ, qui est seul responsable du noyau. Comme vous pouvez le voir, un plus ancien:

$ uname -r
2.6.32-042stab116.2

Ainsi, contrairement à la plupart des questions similaires sur la façon de supprimer les anciennes images du noyau après les mises à niveau de routine, ce que j'essaie de faire ici est de PURGER COMPLÈTEMENT TOUS CES 3.13 FORFAITS , qui ne devraient pas être là en premier lieu.


Voici un résumé de mes tentatives jusqu'à présent.

Essayer de supprimer/purger les paquets de la manière habituelle (apt-get, aptname__, aptitudename__, peu importe) ne semble pas fonctionner, en raison d'un cercle vicieux apparent.

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

Comme vous pouvez le voir dans le sortie , rien n'est réellement supprimé. Par contre, aptitudeparvient à aller un peu plus loin:

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

À la fin de ce processus , les *image-3.13*s sont partis, ainsi que les fichiers et dossiers correspondants normalement trouvés dans /boot et /lib/modules, mais les image-extras sont toujours signalés comme étant à moitié installés (même s'ils semblent contenir aucun fichier, comme vérifié par dpkg -L...)

De plus, les dépendances sont maintenant rompues, car répéter la purge à ce stade peut amener à se plaindre de fichiers/dossiers manquants dans /boot et /lib/modules. J'ai essayé de placer des fichiers factices aux emplacements prévus, comme suggéré ici , mais j'ai finalement rencontré les erreurs d'origine. Je crois que l'extrait crucial est le suivant:

[...]
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
[...]

Après avoir essayé sans succès un option supposée nucléaire :

Sudo dpkg --remove --force-remove-reinstreq package_name

J'ai manqué d'idées.

6
Giuseppe

Étant donné que:

  • le linux-image-3.13.0-XXX-generic a été purgé avec succès
  • les linux-image-extra-3.13.0-XXX-generic sont toujours signalés comme étant à moitié installés
  • aucun paquet actuellement installé ne dépend de ces image-extras
  • aucune de ces images ne devrait être là en premier lieu (puisque le noyau 2.6 est fourni par le conteneur Host OpenVZ)
  • aucune des tentatives traditionnelles ne réussit à nettoyer le système

Ensuite, une approche possible consiste à purger de force les entrées en suspens de la base de données dpkg, comme suggéré ici .

VEUILLEZ NOTER: il s’agit d’une opération peu scrupuleuse et potentiellement dangereuse.

  • recherchez tous les fichiers appartenant au paquet que vous voulez supprimer (essayez $ dpkg -L linux-image-extra-3.13.0-XXX-generic) et supprimez-les
  • ouvrez le fichier /var/lib/dpkg/status, localisez et supprimez le (s) bloc (s) de texte décrivant le (s) paquet (s) que vous voulez que dpkg oublie
  • faites très attention à la préservation des lignes vides entre les descripteurs de paquet, les espaces au début des lignes, etc. Ils disent que la base de données apt est impitoyable pour les fautes de frappe.
  • après avoir enregistré le fichier d'état, dpkg ainsi que tous les programmes associés à apt devraient revenir à la normale
2
Giuseppe

Faire ls /boot devrait montrer quelques fichiers vmlinuz-X.XX.XX. Faites apt-get purge linux-image-X.XX.XX-generic pour chacun, mais NE RELEVEZ PAS le noyau que vous utilisez. Vous pouvez vérifier lequel avec uname -r.

0
user595510

J'utilise ce qui suit dans un script bash pour tout détruire sauf le noyau actif:

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

C'est assez proche de ce que vous avez invoqué, mais peut-être que dpkg est la différence nécessaire.

L'ensemble des scripts sont ici si vous êtes intéressé:
https://github.com/mtompkins/linux-kernel-utilities

0
Mark