46 votes

Impossible de nettoyer un /boot complet à cause de dépendances non satisfaites

J'ai reçu un message d'erreur expliquant que mon /boot est plein. Essayer de nettoyer les anciens fichiers image semble toujours échouer à cause d'erreurs de disque plein ou d'erreurs de dépendance. Pourrait-on m'expliquer où je me trompe ?

$ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run ‘apt-get -f install’ to correct these.
The following packages have unmet dependencies.
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
E: Unmet dependencies. Try using -f.

$ ls /boot
abi-3.13.0-32-generic         initrd.img-3.13.0-43-generic
abi-3.13.0-36-generic         lost+found
abi-3.13.0-37-generic         memtest86+.bin
abi-3.13.0-39-generic         memtest86+.elf
abi-3.13.0-40-generic         memtest86+_multiboot.bin
abi-3.13.0-43-generic         System.map-3.13.0-32-generic
config-3.13.0-32-generic      System.map-3.13.0-36-generic
config-3.13.0-36-generic      System.map-3.13.0-37-generic
config-3.13.0-37-generic      System.map-3.13.0-39-generic
config-3.13.0-39-generic      System.map-3.13.0-40-generic
config-3.13.0-40-generic      System.map-3.13.0-43-generic
config-3.13.0-43-generic      vmlinuz-3.13.0-32-generic
grub                          vmlinuz-3.13.0-36-generic
initrd.img-3.13.0-32-generic  vmlinuz-3.13.0-37-generic
initrd.img-3.13.0-36-generic  vmlinuz-3.13.0-39-generic
initrd.img-3.13.0-37-generic  vmlinuz-3.13.0-40-generic
initrd.img-3.13.0-39-generic  vmlinuz-3.13.0-43-generic
initrd.img-3.13.0-40-generic

J'ai utilisé

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve $kernelver

pour obtenir

linux-headers-3.13.0-32
linux-headers-3.13.0-32-generic
linux-headers-3.13.0-36
linux-headers-3.13.0-36-generic
linux-headers-3.13.0-37
linux-headers-3.13.0-37-generic
linux-headers-3.13.0-39
linux-headers-3.13.0-39-generic
linux-headers-3.13.0-40
linux-headers-3.13.0-40-generic
linux-headers-3.13.0-44
linux-headers-3.13.0-44-generic
linux-headers-3.13.0-45
linux-headers-3.13.0-45-generic
linux-image-3.13.0-32-generic
linux-image-3.13.0-36-generic
linux-image-3.13.0-37-generic
linux-image-3.13.0-39-generic
linux-image-3.13.0-40-generic

Choisir ensuite la première image à supprimer

$ sudo apt-get purge linux-image-3.13.0-32-generic
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies.
 linux-image-extra-3.13.0-32-generic : Depends: linux-image-3.13.0-32-generic but it is not going to be installed
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not going to be installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

67voto

NickTux Points 16549

Dans ce cas, j'utiliserais l'option dpkg pour forcer la suppression de certains paquets du noyau. Cette méthode n'est pas recommandée pour un usage courant et est un peu dangereuse. Mais dans ce cas, les dépendances non satisfaites peuvent être utiles.

Commencez par localiser le noyau dans lequel le système est démarré. Celui qui est actuellement chargé. Ouvrez un terminal (CTRL+ALT+T) et lancez la commande suivante

uname -r

Il vous montrera le noyau chargé, vous ne devez PAS essayer d'enlever celui-ci.

Puis lancez la commande

ls /boot 

il renverra toutes les images installées. Choisissez-en une ou deux et essayez de les supprimer. Essayez de les supprimer de force ou de les purger. Par exemple

sudo dpkg --force-all -P linux-image-3.13.0-32-generic

Vous pouvez faire de même pour d'autres images, afin de libérer de l'espace.

Vous pouvez ensuite essayer d'installer les paquets manquants, ou bien

sudo apt-get install -f 

pour essayer de résoudre les dépendances.

Enfin, lancez la commande "cleanup old kernels" (nettoyage des anciens noyaux)

 sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

La commande ci-dessus supprimera TOUS les noyaux à l'exception de celui qui est actuellement chargé.

Comme vous avez une partition /boot séparée, gardez à l'esprit que vous devrez surveiller son espace et la nettoyer souvent (la fréquence dépend de l'espace de /boot).

6voto

msa Points 61

C'est ce qui a fonctionné pour moi sur Ubuntu 16.04.

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade

2voto

Hemant Thorat Points 231

Lister tous les noyaux :

dpkg --list 'linux-image*'

Affiche le noyau actuel :

uname -r

Lister tous les noyaux SAUF actuelle :

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e '[0-9]'

Assurez-vous que votre noyau actuel ne figure pas sur cette liste.

Retirer tous les grains SAUF actuelle :

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

Effacer d'autres éléments :

sudo apt-get autoremove

Si l'erreur persiste, répétez les commandes suivantes pour supprimer les noyaux indésirables,

sudo dpkg --purge linux-image-X.X.X-XXX-generic linux-image-extra-X.X.X-XXX-generic linux-signed-image-X.X.X-XXX-generic
sudo dpkg --purge linux-image-Y.Y.Y-YYY-generic linux-image-extra-Y.Y.Y-YYY-generic linux-signed-image-Y.Y.Y-YYY-generic

sudo apt-get -f install

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

0voto

nehtor.t Points 1

Si vous travaillez avec des mises à jour non surveillées, ce problème se reproduira et vous voudrez peut-être le résoudre pour de bon.

Comme décrit dans le RemoveOldKernels sur le wiki de la communauté Ubuntu, vous pouvez configurer vos mises à jour sans surveillance pour qu'elles suppriment automatiquement les anciens noyaux en ajoutant la ligne suivante à votre fichier de configuration de mise à jour sans surveillance :

Unattended-Upgrade::Remove-Unused-Dependencies "true";

Important : assurez-vous que vous le voulez vraiment, car comme indiqué dans le wiki :

Il supprime également d'autres paquets inutiles, ce qui est ou n'est pas ce que vous souhaitez.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X