Kernel je nejdůležitější částí systému a je třeba mít vždy nějaký stoprocentně funkční. Proto se jeho aktualizace nedělají přepisem starší verze novou, ale nainstaluje se další vedle, takže máte v případě potíží možnost vrátit se k předchozímu funkčnímu, který najdete v bootovací nabídce Grubu (případně jiného zavaděče). Jenže kernely se hromadí, každé cca tři týdny je nová verze, a to může znamenat dohromady gigabajty na systémovém disku.
V Ubuntu je prozatím problém řešen tak, že postinstalační skript každé nové verze kernelu spustí skript
/etc/kernel/postinst.d/apt-auto-removal
ten si zjistí, který kernel vyvolal jeho spuštění, který aktuálně běží, nejnovější a předchozí verzi a podle toho vybere nejméně dva kernely, které zapíše do seznamu nedotknutelných v
/etc/apt/apt.conf.d/01autoremove-kernels
Typicky jsou v seznamu poslední dvě verze. Příkaz apt-get autoremove pak při hledání balíků, které byly instalovány automaticky jako závislost balíku jiného a současně je již v závislostech žádný instalovaný balík nemá, tento seznam použije a zmíněné verze k odstranění nenabídne, i kdyby vyhovovaly.
Tohle je všechno pěkné, má to ovšem jednu zásadní vadu na kráse. Když děláte aktualizace přes Software Updater, tedy klikacího správce aktualizací, který je v Ubuntu, instalované balíky s kernelem jsou chybně označeny jako manuálně instalované a apt je proto k automatické odinstalaci nenabídne. Nastavením na manuální instalaci pomocí příkazu apt-mark, si naopak můžete konkrétní kernel pojistit proti odstranění.
Tak jako tak, správce aktualizací stále nenabízí klikátko, které by umožnilo čistku provést i běžnému uživateli, který se bojí terminálu, teprve se diskutuje o tom, zda a jak. Tomu pak stejně nezbývá, než nainstalovat nějaký z alternativních čističů, jako je Ubuntu Tweak, které na nějaké flagy balíků nehledí.
Pokud tedy máte nějaké ty staré špatně značené kernely a autoremove je nechce odinstalovat, můžete to napravit následovně:
apt-mark showmanual | egrep '^linux-(image|headers)' | xargs sudo apt-mark auto
sudo apt-get autoremove --purge
sudo apt-get autoremove --purge
Sice v drtivé většině případů dělám aktualizaci systému přes terminál, ale co kdyby.. Nabízí se udělat si na to nějaký alias, který nejprve prožene přes balíky kernelů apt-mark a pak teprve spustí autoremove. Myslím, že ar ještě mezi aliasy nemám:
alias ar="apt-mark showmanual | egrep '^linux-(image|headers)' | xargs sudo apt-mark auto ; sudo apt-get autoremove --purge"
Já na odtraňování starších kernelů používám Ubuntu Tweak a zatím s tím nebyl žádný problém :-)
OdpovědětVymazatJá se s tím vždycky jednou za 3-6 měsíců na**ru a pustím synaptic, vyhledám nainstalované kernely dle verzí + kouknu na místní balíky a udělám pořádek. S tím jak občas zruší nějaké PPA je třeba jednou za čas. Zmání mají vyexportované moje zdroje, takže udělám pořádek u sebe, hodím si případné úpravy místních balíků do scriptu a pak jim smažu a naixportuju zase moje balíky. Zatím mi to funguje u všech asi 10 PC, který takhle u známých mám a je s tím minimální práce.
OdpovědětVymazatNo taky jsem to dělal ručně, než mě někdo na fóru postrčil k tomu, abych se na tu problematiku podíval podrobněji. Autoremove je rozhodně nejjednodušší možnost, ale nakonec jsem stejně zjistil, že ten seznam kernelů, které se mají podržet v systému, je mnohdy nerespektován a autoremove smaže všechny, krom posledního. Na jednom systému seznam funguje, na druhém ne a jediný rozdíl je v architektuře 64bit/32bit, což nedává smysl. Osobně mi to je fuk, stejně vždy používám poslední verzi kernelu a kdybych zjistil problém, tak si prostě tu funkční podržím přepisem flagu na manual. Ale zajímalo by mě, v čem je problém, jen se mi tím nechce ztrácet čas :)
Vymazat