Perché apt-get autoremove non rimuove i miei vecchi kernel?


53

La mia partizione di avvio è su un SSD, quindi non ha spazio per più di circa 8 versioni del kernel installate, e alla fine alcuni aggiornamenti del kernel non verranno installati perché la mia partizione di avvio è piena di vecchie versioni. Ci sono molte domande là fuori su come rimuovere le vecchie versioni (anche su come automatizzare il processo), ma la mia domanda è semplicemente questa: perché non le apt-get autoremoverileva e le rimuove automaticamente, e c'è un modo per farlo ? Voglio dire, apt-getcosa li ha installati comunque, quindi li conosce, quindi perché sceglie di lasciare in giro tutte le vecchie versioni?



1
Autoremove non rimuove vecchi kernel nella maggior parte delle circostanze. I kernel si accumulano perché il sistema non esegue automaticamentemomove automaticamente per impostazione predefinita. Questa è un'impostazione per gli aggiornamenti non presidiati e può essere modificata. Autoremove non può rimuovere vecchi kernel quando le azioni apt precedentemente in coda (come l'installazione di un nuovo kernel) falliscono (a causa di spazio insufficiente). Vedere bugs.launchpad.net/bugs/1357093 per una patch per unattended-upgrades che si iniziare a rimuovere automaticamente i vecchi kernel.
user535733

Risposte:


36

Per rispondere al perché, consultare il file /etc/apt/apt.conf.d/01autoremove-kernels

inserisci qui la descrizione dell'immagine

Come si può vedere, apt viene detto di non autoremove i kernel, come detto da un altro file (copione), /etc/kernel/postinst.d/apt-auto-removal. Ed eccolo qui:

inserisci qui la descrizione dell'immagine

Se installi manualmente 2 kernel scelti, cioè il primo e quello attuale, apt-autoremove rimuoverà sempre e soltanto le versioni precedenti che non hai installato manualmente, quindi avrai sempre quelle 2 opzioni più qualunque sia l'ultima.

Aggiornare:

Nel /etc/kernel/postinst.d/apt-auto-removalc'è questa parte:

if [ "$latest_version" != "$installed_version" ] \
   || [ "$latest_version" != "$running_version" ] \
   || [ "$installed_version" != "$running_version" ]
then
        # We have at least two kernels that we have reason to think the
        # user wants, so don't save the second-newest version.
        previous_version=
fi

Quindi, se si confronta l'output del 01autoremove-kernelsfile e ci uname -rsi rende conto che il kernel attualmente in esecuzione e il più recente prima di esso, non vengono mai rimossi da quello script. Si scopre che c'è un altro file /etc/apt/apt.conf.d/01autoremove, dove ci sono linee:

    APT
    {
      NeverAutoRemove
      {
            "^firmware-linux.*";
            "^linux-firmware$";
      };
  VersionedKernelPackages
  {
        # linux kernels
        "linux-image";
        "linux-headers";
        "linux-image-extra";
        "linux-signed-image";
        # kfreebsd kernels
        "kfreebsd-image";
        "kfreebsd-headers";
        # hurd kernels
        "gnumach-image";
        # (out-of-tree) modules
        ".*-modules";
        ".*-kernel";
        "linux-backports-modules-.*";
        # tools
        "linux-tools";
  };

Quindi puoi commentarli e ti consentirà di rimuovere automaticamente i kernel con apt-autoremove, anche se ricorda: fallo a tuo rischio e pericolo


1
Molto interessante! My /etc/apt/apt.conf.d/01autoremove-kernelsha molte righe, ma solo due versioni tra tutte: 3.13.0. {39,43}. Ma dpkg -l linux-*elenca quattro versioni, 3.13.0. {39,40,41,43}, quindi qualcosa di diverso da quello di /etc/apt/apt.conf.d/01autoremove-kernelsmantenere quelle versioni intermedie in giro, giusto?
BlueBomber il

1
TL: DR: 01autoremoveè il file che vuoi, 01autoremove-kernelsprobabilmente è solo una protezione, quindi apt non rimuove il kernel attualmente installato e il più recente (nel caso in cui il più recente
rovini

1
A meno che non stia leggendo male 01autoremove, sta solo proteggendo dalla rimozione automatica dei pacchetti di dipendenza, come linux-image-extra. Modificarlo non dovrebbe influire sul fatto che venga o meno linux-image-3.16.0-31-genericrimosso automaticamente. Nessuno dei modelli in esso corrispondenti corrisponde ai nomi dei pacchetti che vogliamo vengano rimossi automaticamente.
Peter Cordes,

1
@PeterCordes Non rimuovere o commentare le righe /etc/apt/apt.conf.d/01autoremove. Questo non ti aiuta a rimuovere i pacchetti del kernel con versione precedente, ma può avere effetti indesiderati. Il file non protegge dalla rimozione automatica linux-image-extrama dai pacchetti che corrispondono alle espressioni regolari nella NeverAutoRemovesezione.
jarno,

2
@BlueBomber, il motivo per cui apt-get autoremovenon rimuove i kernel non elencati /etc/apt/apt.conf.d/01autoremove-kernelsè che quei kernel sono contrassegnati come installati manualmente; vedi la mia risposta .
jarno,

8

Per me ha aiutato a installare l'ultimo (X) Ubuntu (15.10). Nelle versioni precedenti i pacchetti del kernel possono essere contrassegnati come installati manualmente, almeno, se installati utilizzando Software Updater, in modo che sudo apt-get autoremove --purgenon possano eliminarli. Esistono segnalazioni di bug relative al problema: Bug # 1175637 , Bug # 1439769

Nella versione precedente, si poteva provare a contrassegnare i pacchetti del kernel installati automaticamente sudo apt-mark auto $(apt-mark showmanual | grep -E "^linux-([[:alpha:]]+-)+[[:digit:].]+-[^-]+(|-.+)$")ed eseguirli sudo apt-get autoremove --purgesuccessivamente per vedere se fa la differenza. Il comando non dovrebbe ancora rimuovere i pacchetti di kernel mostrati in /etc/apt/apt.conf.d/01autoremove-kernels, ma è più sicuro eseguirlo prima apt-get autoremovecon l' --dry-runopzione.


Oh, il comando autoremove tende a rimuovere troppi kernel, vedi Bug # 1440608
jarno

1
mi ha apt-markfatto il trucco, vorrei poter votare 10 volte: P
Mike Gleason jr Couturier,
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.