No se puede limpiar un arranque completo debido a dependencias no satisfechas

43

Recibí un mensaje de error que explica que mi / boot está lleno. intentar limpiar los archivos de imagen antiguos siempre parece fallar debido a errores de disco lleno o errores de dependencia. ¿Podría alguien explicarme dónde me estoy equivocando?

$ 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

solía

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

Llegar

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

Luego, elige la primera imagen para eliminar

$ 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).
Philip Howard
fuente
Edite su pregunta y el resultado de sudo apt-get autoremovey ls /boot.
muru
Prueba la respuesta de Phrog. Use el uname -rcomando para averiguar la versión actual de su núcleo e intente eliminar un núcleo que no sea ese.
muru

Respuestas:

64

En tal caso, usaría la dpkgherramienta para forzar la eliminación de algunos paquetes del núcleo. Esto no se sugiere para uso común y es un poco peligroso , pero en tal caso con dependencias insatisfechas podría ayudar.

En primer lugar, ubique el núcleo en el que se inicia el sistema. El que está cargado actualmente. Abra una terminal (CTRL + ALT + T) y emita el siguiente comando

uname -r

Le mostrará el núcleo cargado, NO debe intentar eliminar este.

Luego emita el comando

ls /boot 

devolverá todas las imágenes instaladas. Elija uno o dos e intente eliminarlos. Intenta forzarlos a eliminarlos / purgarlos. Por ejemplo

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

Puede hacer lo mismo con otras imágenes para liberar espacio.

Luego puede intentar instalar los paquetes que faltan, o

sudo apt-get install -f 

para intentar resolver las dependencias.

Finalmente, emita el comando "limpiar núcleos antiguos"

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

El comando anterior eliminará TODOS los núcleos, excepto el que está cargado actualmente.

Debido a que tiene una partición separada / de arranque, tenga en cuenta que necesitará rastrear su espacio y limpiar a menudo (la frecuencia depende del espacio de / arranque)

NickTux
fuente
1
Hola, cuando trato de eliminarlos recibo un error sudo dpkg --force-all -P abi-3.13.0-32-generic dpkg: advertencia: ignorando la solicitud de eliminar abi-3.13.0-32-generic que no es instalado
Philip Howard
99
Esto funcionó para mí, con una modificación: después de quitar imágenes del núcleo con dpkg, tuve que correr sudo apt-get -f autoremovepara llegar apt-geta dejar de quejarse de las dependencias no satisfechas. De lo contrario, sudo apt-get -f installaparentemente seguí intentando reinstalar todas las imágenes del kernel con las que había eliminado dpkg, que obviamente solo se /bootvolvieron a llenar .
mdunsmuir
44
Después de la purga apt-get -f autoremoveforzada y el comentario anterior en @mdunsmuir, todavía quiere instalar todos los núcleos antiguos durante cualquiera de las operaciones de limpieza anteriores. ¿Hay alguna manera de decirle que ignore las dependencias no relacionadas y elimine un solo núcleo antiguo completo?
NKijak
3
Me gustaría agregar que también tuve que desinstalar los extras con sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic. De lo contrario, estos extras aún dependen de la imagen real y la -fbandera hará que la imagen se reinstale y luego se quede sin espacio en disco.
Ghostkeeper
1
@LonnieBest estoy de acuerdo. Por el contrario, Arch Linux solo tiene una alternativa. Fedora tampoco parece tener este problema.
Franklin Yu
5

Esto es lo que funcionó para mí en Ubuntu 16.04.

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade
msa
fuente
Este método funcionó para mi.
Bok
2

Listar todos los núcleos:

dpkg --list 'linux-image*'

Mostrar el kernel actual:

uname -r

Listar todos los núcleos, EXCEPTO el actual:

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

Asegúrese de que su núcleo actual no esté en esa lista.

Eliminar todos los núcleos EXCEPTO el actual:

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

Borrar otras cosas:

sudo apt-get autoremove
Hemant Thorat
fuente
Si aún le da un error de espacio en el disco de arranque para instalar / desinstalar archivos, elimine directamente una de las imágenes antiguas del directorio / boot, ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; NOTA: Revise la imagen actual del kernel nuevamente antes de eliminar cualquier imagen.
Hemant Thorat
Todavía se queja de que tiene dependencias insatisfechas
Matiss Jurgelis