Estoy ejecutando Ubuntu 14.04.4 LTS y estoy intentando instalar un nuevo paquete usando apt-get. Desafortunadamente, cada vez que lo intento recibo mensajes como:
The following packages have unmet dependencies:
linux-image-extra-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
linux-image-generic-lts-utopic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
linux-signed-image-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic (= 3.16.0-70.90~14.04.1) but it is not going to be installed
Buscando en Google encontré queEsto puede deberse a la falta de espacio en la partición de arranque.(y efectivamente, df
se muestra /boot
al 100%). Sin embargo, cada vez que intento ejecutar los apt-get
comandos de la respuesta aceptada allí, aparece el mismo error que el anterior.
Buscando otra solución que no funcionó apt-get
, encontréesta publicación, que recomienda usar elementos como sudo dpkg --purge linux-image-4.2.0-15-generic
kernels antiguos y no utilizados.
dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)
(de la publicación mencionada anteriormente) muestra que tengo varios núcleos antiguos en el pi
estado (deseado purgado, el estado está instalado de acuerdo coneste)
uname -r
me dice que el kernel que estoy ejecutando es 3.16.0-62-generic, así que pensé que debería ser seguro eliminar estos kernels antiguos. Sin embargo, intentar hacerlo con cosas como sudo dpkg --purge linux-image-3.16.0-49-generic
resultados en:
dpkg: error processing package linux-image-3.16.0-49-generic (--purge):
dependency problems - not removing
Errors were encountered while processing:
linux-image-3.16.0-49-generic
¡Garr! Estoy al límite de mi ingenio y fuera de mi alcance (realmente no sé mucho sobre dpkg o apt-get), así que necesito ayuda.
Preguntas:
¿Por qué no puedo desinstalar los kernels antiguos
dpkg
?Si esa pregunta no se puede resolver directamente, supongo que en última instancia quiero saber:¿Qué debo hacer para llegar a un estado en el que pueda instalar nuevos paquetes nuevamente?
Otras cosas que he probado:
sudo apt-get autoremove
: da como resultado el error original sobre dependencias no satisfechassudo apt-get -f autoremove
: resulta en:
Descomprimiendo linux-image-3.16.0-70-generic (3.16.0-70.90~14.04.1) ... dpkg: error al procesar el archivo /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb (--unpack): no se pueden copiar los datos extraídos de './boot/vmlinuz-3.16.0-70-generic' a '/boot/vmlinuz-3.16.0-70-generic.dpkg-new': no se pudo escribir (no queda espacio en el dispositivo) No se ha escrito ningún informe de informe porque el mensaje de error indica un error de disco lleno dpkg-deb: error: la señal eliminó la pasta del subproceso (tubería rota) Examinando /etc/kernel/postrm.d . ejecutar-parts: ejecutando /etc/kernel/postrm.d/initramfs-tools 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic ejecutar-parts: ejecutando /etc/kernel/postrm.d/zz-update-grub 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic Se encontraron errores al procesar: /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb E: El subproceso /usr/bin/dpkg devolvió un código de error (1)
Nota: He migrado esta pregunta desde"Intercambio de pilas de Unix y Linux"
Respuesta1
Úselo uname -r
para mostrar su kernel actualmente en ejecución. NO BORRAR nada con este número de versión.
Puede encontrar a qué paquetes /boot
pertenecen los núcleos:
for i in /boot/vmlinuz* ; do
dpkg -S $i| egrep -v $(uname -r)
done
Puede eliminar estos paquetes consudo apt-get purge
Nombre del paquete ....
Puede encontrar más paquetes relacionados con los kernels que desea eliminar buscando otros paquetes con el mismo número de versión:
Para extraer los números de versión:
for i in /boot/vmlinuz* ; do
dpkg -S $i | egrep -v $(uname -r)
done |cut -d- -f3-4
Para buscar otros paquetes con los mismos números de versión:
for j in $(
for i in /boot/vmlinuz* ; do
dpkg -S $i| egrep -v $(uname -r)
done |cut -d- -f3-4 ) ;
do
dpkg -l "*$j*" | egrep '^ii|^rc'
done
Para automatizar la eliminación de todos los kernels distintos del kernel actual y todos los paquetes cuyas versiones coincidan con los kernels eliminados (Peligro, Wil Robinson):
Simplemente agregue
| awk '{print $2}' | xargs sudo apt-get --dry-run purge
al fragmento de código anterior. Cuando esté seguro de que hace lo que desea, elimine --dry-run
.
Si /boot
está tan lleno que no puede eliminar paquetes, puede hacer algo de espacio /boot
eliminando el /boot/initrd.img*
archivo más antiguo.