web-dev-qa-db-fra.com

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

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. Quelqu'un pourrait-il 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

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

Puis choisir 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).
42
Philip Howard

Dans ce cas, j'utiliserais l'outil dpkg pour forcer la suppression de certains packages du noyau. Ceci n'est pas suggéré pour une utilisation courante et est un peu dangereux, mais dans ce cas avec des dépendances non satisfaites, cela pourrait aider.

Tout d’abord, localisez 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 devriez PAS essayer de le supprimer.

Puis lancez la commande

ls /boot 

il retournera toutes les images installées. Choisissez-en un ou deux et essayez de les enlever. Essayez de forcer les supprimer/les purger. Par exemple

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

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

Ensuite, vous pouvez essayer d’installer les paquets manquants, ou

Sudo apt-get install -f 

pour essayer de résoudre les dépendances.

Enfin, lancez la commande "cleanup old kernels"

 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 sauf celui qui est actuellement chargé.

Etant donné que vous avez une partition/boot séparée, gardez à l’esprit que vous devrez suivre son espace et le nettoyer souvent (la fréquence dépend de l’espace de/boot)

62
NickTux

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
5
msa

Lister tous les noyaux:

dpkg --list 'linux-image*'

Afficher le noyau actuel:

uname -r

Liste tous les noyaux SAUF courant:

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.

Supprimer tous les noyaux SAUF courant:

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 les autres trucs:

Sudo apt-get autoremove
2
Hemant Thorat