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.