Neden apt-get autoremove benim eski çekirdeğimi çıkarmıyor?


53

Önyükleme bölümüm SSD'de olduğundan, yüklü olan yaklaşık 8 çekirdek sürümünden daha fazlasına yer kalmaz ve sonunda önyükleme bölümüm eski sürümlerle dolu olduğundan bazı çekirdek güncelleştirmeleri yüklenemez. Eski sürümlerin nasıl kaldırılacağı (süreci otomatikleştirmek de dahil olmak üzere) hakkında birçok soru var, ama sorum basitçe: Neden apt-get autoremovebunları otomatik olarak algılayıp kaldırmıyor ve bunu yapabilmemin bir yolu var mı? Demek istediğim, apt-getonları yine de yüklüyor mu, bu yüzden onlar hakkında bir şey biliyor, peki neden tüm eski sürümleri bırakmayı tercih ediyor?



1
Autoremove gelmez çoğu koşul altında eski çekirdeklerini çıkarıp. Çekirdekler birikir, çünkü sistem otomatik olarak otomatik olarak mafsalları çalıştırmaz. Bu katılımsız yükseltmelerde bir ayardır ve değiştirilebilir. Autoremove, önceden sıraya alınmış apt eylemleri (yeni bir çekirdek yüklemek gibi) başarısız olduğunda (yetersiz alan nedeniyle) eski çekirdekleri kaldıramaz. Bkz bugs.launchpad.net/bugs/1357093 gözetimsiz-yükseltmeleri için bir yama için olacak otomatik eski çekirdeklerini çıkararak başlayın.
user535733

Yanıtlar:


36

Nedenini cevaplamak için, dosyaya bakın /etc/apt/apt.conf.d/01autoremove-kernels

görüntü tanımını buraya girin

Görebildiğiniz gibi, apt'nin başka bir (script) dosya tarafından söylendiği gibi, çekirdekleri hiçbir zaman otorize etmemesi söylenir /etc/kernel/postinst.d/apt-auto-removal. Ve işte burada:

görüntü tanımını buraya girin

Seçilen 2 çekirdeği, örneğin ilk ve geçerli olanı el ile yüklerseniz, apt-autoremove yalnızca el ile yüklemediğiniz eski sürümleri kaldıracaktır, bu nedenle her zaman bu 2 seçeneğin yanı sıra en son sürüm ne olursa olsun olacaktır.

Güncelleme:

Gelen /etc/kernel/postinst.d/apt-auto-removalbu bölüm vardır:

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

Bu nedenle, 01autoremove-kernelsdosyanın çıktısını karşılaştırırsanız, uname -ro anda çalışan çekirdeğin ve en son öncesindeki çekirdeğin bu komut dosyası tarafından asla kaldırılmayacağının farkına varacaksınız. Çıktılan başka bir dosya var /etc/apt/apt.conf.d/01autoremove, burada satırlar var:

    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";
  };

Böylece bunları yorumlayabilirsiniz, ve apt-autoremoveunutma olsa da , çekirdekleri otomatik olarak çıkarmanıza izin verir - bunu kendi sorumluluğunuzda yapın


1
Çok ilginç! Benim /etc/apt/apt.conf.d/01autoremove-kernelssatırlarımın birçok çizgisi var, ama hepsi arasında sadece iki versiyonu var: 3.13.0. {39,43}. Ancak dpkg -l linux-*dört sürümü, 3.13.0. {39,40,41,43} listeliyor, yani /etc/apt/apt.conf.d/01autoremove-kernelsbu orta sürümleri saklamaktan başka bir şey değil mi?
BlueBomber

1
TL: DR: 01autoremoveİstediğiniz dosya 01autoremove-kernels, muhtemelen sadece bir koruma, bu yüzden apt şu anda yüklü olan çekirdeği ve en son sürümleri kaldırmıyor (en yeni vidaların çıkarılması durumunda)
Sergiy Kolodyazhnyy

1
Yanlış okuduğum sürece 01autoremove, sadece bağımlılık paketlerinin otomatik olarak kaldırılmasına karşı koruyorlar linux-image-extra. Bunu değiştirmek, otomatik hareket edilip edilmemesini etkilememelidir linux-image-3.16.0-31-generic. İçindeki kalıpların hiçbiri, otomatik olarak kaldırılmasını istediğimiz paket adlarıyla eşleşmiyor.
Peter Cordes

1
@PeterCordes İçindeki satırları kaldırmayın veya yorum yapmayın /etc/apt/apt.conf.d/01autoremove. Bu, eski sürüm sürümlü çekirdek paketlerini otomatik olarak almanıza yardımcı olmaz, ancak istenmeyen etkileri olabilir. Dosya otomatik taşıma karşı koruma sağlamaz, linux-image-extraancak NeverAutoRemovebölümdeki normal ifadelerle eşleşen paketler .
jarno

2
@BlueBomber, apt-get autoremovelistede bulunmayan çekirdekleri çıkarmamasının nedeni /etc/apt/apt.conf.d/01autoremove-kernels, bu çekirdeklerin elle kurulmuş olarak işaretlenmesidir; Benim bkz cevabı .
jarno

8

Benim için en son (X) ubuntu'yu (15.10) kurmaya yardımcı oldu. Daha önceki sürümlerde, çekirdek paketleri en azından Yazılım Güncelleyici kullanılarak kuruluysa manuel olarak yüklenmiş olarak işaretlenebilir, böylece sudo apt-get autoremove --purgebunları silemez. Bu konuyla ilgili hata raporları var: Hata # 1175637 , Hata # 1439769

Daha önce sürümde, otomatik olarak yüklü çekirdek paketlerini işaretlemek için deneyebilirsiniz sudo apt-mark auto $(apt-mark showmanual | grep -E "^linux-([[:alpha:]]+-)+[[:digit:].]+-[^-]+(|-.+)$")ve çalıştırmak sudo apt-get autoremove --purgeo değişiklik olup olmadığını görmek için daha sonra. Komut hala /etc/apt/apt.conf.d/01autoremove-kernels gösterilen çekirdekleri paketlerini kaldırmak olmamalı ama çalıştırmak için en güvenli olduğu apt-get autoremoveile --dry-runilk seçenek.


Ah, autoremove komut bakınız, çok fazla çekirdeklerini çıkarıp eğilimindedir Hata # 1440608
Jarno

1
apt-markP: Ben 10 kez upvote isterdim, benim için hile yaptı
Mike Gleason jr Couturier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.