Impossibile pulire un avvio completo a causa di dipendenze non soddisfatte


43

Ho ricevuto un messaggio di errore che spiega che il mio / boot è pieno. il tentativo di ripulire i vecchi file di immagine sembra sempre non riuscire a causa di errori del disco o errori di dipendenza. Qualcuno potrebbe spiegare dove sto sbagliando.

$ 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

ero solito

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

ottenere

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

Quindi selezionando la prima immagine da rimuovere

$ 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).

Modifica la tua domanda e l'output di sudo apt-get autoremovee ls /boot.
Muru,

Prova la risposta di Phrog. Utilizzare il uname -rcomando per scoprire la versione corrente del kernel e provare a rimuovere un kernel diverso da quello.
Muru,

Risposte:


64

In tal caso, utilizzerei lo dpkgstrumento per forzare la rimozione di alcuni pacchetti del kernel. Questo non è suggerito per l'uso comune ed è un po 'pericoloso , ma in tal caso con dipendenze non soddisfatte potrebbe essere d'aiuto.

Prima di tutto individuare il kernel in cui è avviato il sistema. Quello che è attualmente caricato. Aprire un terminale (CTRL + ALT + T) ed emettere il seguente comando

uname -r

Ti mostrerà il kernel caricato, NON dovresti provare a rimuovere questo.

Quindi emettere il comando

ls /boot 

restituirà tutte le immagini installate. Scegli uno o due e prova a rimuoverli. Prova a forzare rimuoverli / eliminarli. Per esempio

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

Puoi fare lo stesso per altre immagini, al fine di liberare spazio.

Quindi puoi provare a installare i pacchetti mancanti o

sudo apt-get install -f 

per provare a risolvere le dipendenze.

Infine, emetti il ​​comando "ripulisci vecchi kernel"

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

Il comando sopra rimuoverà TUTTI i kernel tranne quello attualmente caricato.

Poiché hai una partizione / boot separata, tieni presente che dovrai tenere traccia del suo spazio e ripulirlo spesso (la frequenza dipende dallo spazio di / boot)


1
Salve, quando provo a rimuoverli, visualizzo un errore sudo dpkg --force-all -P abi-3.13.0-32-dpkg generico: avviso: ignorando la richiesta di rimozione di abi-3.13.0-32-generico che non è installato
Philip Howard,

9
Questo ha funzionato per me, con una modifica: dopo aver rimosso le immagini del kernel con dpkg, ho dovuto correre sudo apt-get -f autoremoveper arrivare apt-geta smettere di lamentarsi dipendenze non soddisfatte. Altrimenti, sudo apt-get -f installapparentemente continuava a provare a reinstallare tutte le immagini del kernel che avevo rimosso dpkg, che ovviamente si riempivano di /bootnuovo.
mdunsmuir,

4
Dopo l'eliminazione forzata e il apt-get -f autoremovecommento in @mdunsmuir sopra, desidera ancora installare tutti i vecchi kernel durante una delle operazioni di pulizia sopra. C'è un modo per dirgli semplicemente di ignorare le dipendenze non correlate e rimuovere un singolo vecchio kernel completo?
NKijak,

3
Vorrei aggiungere che ho anche dovuto disinstallare gli extra con sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic. Altrimenti, questi extra dipendono ancora dall'immagine reale e il -fflag causerebbe la reinstallazione dell'immagine e quindi lo spazio su disco.
Ghostkeeper

1
@LonnieBest Sono d'accordo. Al contrario, Arch Linux mantiene solo un fallback. Né Fedora sembra avere questo problema.
Franklin Yu,

5

Questo è ciò che ha funzionato per me su Ubuntu 16.04.

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

Questo metodo ha funzionato per me.
Bok,

2

Elenca tutti i kernel:

dpkg --list 'linux-image*'

Mostra il kernel corrente:

uname -r

Elenca tutti i kernel TRANNE quello corrente:

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

Assicurati che il tuo kernel corrente non sia in quella lista.

Rimuovi tutti i kernel TRANNE quello corrente:

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

Cancella altre cose:

sudo apt-get autoremove

Se ti dà ancora errore di spazio su disco di avvio per l'installazione / disinstallazione di file, rimuovi direttamente una delle vecchie immagini dalla directory / boot, ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; NOTA: rivedere nuovamente l'immagine del kernel corrente prima di eliminare qualsiasi immagine.
Hemant Thorat,

Si lamenta ancora che abbia dipendenze non soddisfatte
Matiss Jurgelis,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.