Hlavní navigace

Poznejte své Gentoo (2)

Jaroslav Kotěšovec

První seznámení už máme za sebou. Dnes zúročíme, co jsme se minule dozvěděli. Budeme instalovat, upgradovat, trošku uklízet a vše, co s tím souvisí.

Instalace programů

Nejdříve si uděláme malé shrnutí, jakým způsobem zhruba emerge uvažuje při instalaci balíčku.

emerge vždy řeší závislosti na základě nastavení USE. Nebere v úvahu, jak byl program zkompilován, proto je důležité udržovat systém zkompilovaný podle aktuálního nastavení. Viz kapitolu „Synchronizace U­SE“.

  • pokusí se najít ebuild odpovídajícího jména
  • zjistí, jestli není blokován jiným programem – ne všechny programy mohou být společně nainstalováný v systému, např. xorg vs. xfree
  • najde nejnovější verzi, která odpovídá nastavení ACCEPT_KEYWORDS a zároveň není zamaskována – tímto mechanismem jsou instalovány všechny programy (samozřejme i závislosti)
  • začne řešit závislosti. Pokud závisí na programu, který nemůže být nainstalován (obvykle bývá problém s tím, že jste nastavili testing keyword (např. ~x86) pro instalovaný program a některé jeho závislosti jsou také testing), musíte všechny tyto závislosti stejným způsobem přidat do package.keywords. Analogicky to platí pro maskované ebuildy
  • nainstaluje závislosti
  • nainstaluje požadovaný program a zapíše si ho do souboru /var/lib/porta­ge/world, o kterém se budeme bavit při upgradování a pročišťování systému. Ještě si to trošku zkomplikujeme. Pokud bychom použili zápis, kde určíme verzi (např. emerge =mplayer-1.0_pre4-r5), tak se do world souboru nepřipíše. Cílem bylo zřejmě, aby nám zůstala v systému vysněná verze i po upgradu. Jenže při pročišťování systému by došlo k odinstalování. To je jen další důvod proč používat package.mask.

Pokud se nějaký bod nepodaří splnit, vypíše emerge většinou poměrně jasnou chybovou hlášku, která vám napoví, v čem je problém. Dobrý přehled o dostupných verzích a o jejich zamaskovanosti můžete získat opět přes etcat(1), který najdete v gentoolkitu ( emerge gentoolkit).

etcat -v xorg-x11   (1)

Upgradování systému

V Gentoo vycházejí pravidelně čtyřikrát (od nového roku jen dvakrát) do roka pouze stages, LiveCD a packageCD, které slouží k instalaci. Každý den do portage přibývají nové programy a nové verze. Je pouze na vás, jestli se rozhodnete upgradovat každý den/týden/měsíc, nebo budete jen záplatovat. Kompletní upgrade s sebou přináší potenciální problémy, proto je na produkčním stroji lepší se držet jen bezpečnostních záplat. Podíváme se na jednotlivé volby, které upgrade ovlivňují.

Proč jsou u všech následujících příkladů použity přepínače -a a -v? Přepínač -a nejdříve vypíše, co se bude dít, a pak se vás zeptá, jestli se vším souhlasíte, a -v  způsobí upovídanější výstup – uvidíte USE flagy apod. Ještě se občas hodí přidat přepínač -t, který vám zobrazí, jaké programy si vynutily instalaci nebo upgrade nového programu. Pokud chce emerge při upgradu instalovat nové programy, je to ideální způsob, jak zjistit, který program si je vyžádal.

emerge -avU world

Záměrně uvádím -U jako první, protože je poměrně oblíbený a přitom se nemá používat. Dřívější způsob, jak si instalovat některé testing programy, byl ACCEPT_KEYWORDS=~x86 emerge program, ale, jak už jsme si vysvětlili, při upgradu bude emerge chtít program downgradovat zpět na nemaskovanou verzi. Proto se využívalo přepínače -U, který zabraňuje, aby došlo k jakémukoli downgradu. Ještě vás trochu postraším, abyste rychle začali používat packa­ge.keywords.

Mějme program breaker, který má v portage k dispozici dvě verze, 2.4 stable a 2.5 testing. Nainstalujeme si verzi 2.5 pomocí ACCEPT_KEYWORDS=~x86 emerge breaker

  • … jenže ve verzi 2.5 byla objevena zásadní bezpečnostní chyba, která je opravena ve verzi 2.5.1. emerge -U  však na tuto verzi neupgraduje, protože mu nebylo řečeno, že má používat testing verze, ale pouze, že nemá downgradovat.
  • … časem se zjistí, že breaker 2.5 může něco poškodit a je označen jako nefunkční (-x86). Jenže emerge má zakázáno downgradovat, tak vám zákeřný breaker 2.5 zůstane v systému.

emerge -avu world

Řekli jsme si, že program, který nainstalujeme, se zapíše do souboru /var/lib/porta­ge/world (dále jen world). Jsou tam pouze programy, které jsme při instalaci vypsali za emerge, nikoli jejich závislosti. Mechanismus při upgradu je poměrně jednoduchý. Procházejí se jednotlivé záznamy ve world a zjišťuje se, jaká verze v portage je zároveň nejnovější a odpovídá nastavení ACCEPT_KEYWORDS a package.mask. Pokud se nalezená verze liší od nainstalované, je upgradována nebo downgradována. Při instalaci nové verze se postupuje stejným způsobem, jaký jsme si popsali u instalace programu. Pokud je u nějaké závislosti k dispozici nová verze, je také upgradována.

Většina závislostí ale zůstane naprosto bez povšimnutí, protože program na nich závisející není upgradován – to může způsobit některé nechtěné efekty. Je důležité si uvědomit, že mezi závislostmi nejsou jen knihovny, ale i běžné programy, které ke své činnosti využívá jiný program.

Ukážeme si opět příklad, ze kterého by váš systém nemusel mít radost.

  • U nějaké knihovny se změní KEYWORDS nebo je zamaskována, ale emerge na to nezareaguje a nedojde k downgradu a zákeřná knihovna si dál vegetuje v systému.

emerge -avuD world

Chování při upgradu můžeme ovlivnit přepínačem --deep (-D). Název je poměrně výstižný – upgrade je prováděn do hloubky. Stejným způsobem jako u -u  se procházejí jednotlivé záznamy ve world, s tím rozdílem, že se u každého záznamu zabýváme i jeho závislostmi a závislostmi závislostí atd. Tak máme jistotu, že všechny programy/knihovny v systému odpovídají aktuálnímu stavu v portage stromu, a také, že všechny závislosti jsou nainstalovány. Pokud bychom pomocí emerge -C odinstalovali některou ze závislostí, bude ji emerge -avuD world chtít opět nainstalovat. Výjimku tvoří programy, které nejsou ve world a zároveň na nich nic nezávisí – ještě se k nim vrátím, až se jich budeme chtít zbavit.

Vzhledem k tomu, že jsou často upgradovány pouze závislosti (obvykle knihovny), je tento způsob nejvíce náchylný k poškození zpětných závislostí. Co je to a co s tím, si povíme v kapitole o následcích.

glsa-check

GLSA je zkratka pro Gentoo Linux Security Advisories – jsou to oznámení obsahující informace o bezpečnostní chybách a dozvíte se, jakým způsobem chybu odstranit, obvykle upgradem na novější verzi. GLSA jsou posílány do mailinglistu gentoo-announce. V gentoolkitu ( emerge -av gentoolkit) je program glsa-check, který tato oznámení parsuje, a můžete tak zjistit, jestli je ve vašem systému ještě nějaký program s bezpečnostní chybou. Tento nástroj je považován za experimentální, ale už dobře použitelný. Čte oznámení z portage stromu ( /usr/portage/metadata/glsa), proto je potřeba synchronizovat portage strom, aby měl glsa-check k dispozici nejnovější oznámení.

Pokud ho spustíte bez parametrů, zobrazí se vám nápověda. Můžete si nechat zobrazit všechny nezazáplatované díry (1), prohlédnout konkrétní oznámení (2). glsa-check navrhne (3), jak se chyby zbavit, a nebo si můžete rovnou nechat chybu opravit (4) – glsa-check předhodí emerge příslušný balíček a dojde k upgradu. Poslední příklad (5) se pokusí vyřešit všechny bezpečnostní díry v systému.

glsa-check -t all         (1)
glsa-check -d 200407-12   (2)
glsa-check -p 200407-12   (3)
glsa-check -f 200407-12   (4)
glsa-check -f all         (5) 

Tento nástroj nejspíš oceníte na produkčním stroji, kde půjdete cestou bezpečnostních záplat.

Následky a důsledky

Synchronizace USE

Časem se rozhodnete, že budete používat alsu, tak si logicky přidáte flag alsa do USE. Jenže všechny programy, které jste doposud nainstalovali a umí pracovat s alsou, jsou zkompilovány bez její podpory. Je tady samozřejme možnost si zkompilovat znovu celý systém - emerge -e world, ale mnohem efektivnější je najít pouze ty programy, které mají v USE  alsu. Vývojáři portage nám vyšli vstříc a v nové verzi (2.0.51) přibyla volba –newuse (1), která objeví programy, jež byly zkompilovány s jinými USE než je aktuálně nastaveno. Vzhledem k tomu, že nová USE může přibýt i s instalací některých programů, není od věci používat volbu –newuse pravidelně.

emerge -avuD --newuse world (1)

Poškozené zpětné závislosti

Při upgradu knihovny na novou verzi se může stát, že dojde ke změnám, kvůli nimž je potřeba překompilovat programy, které ji využívají. Problém je právě v tom, že není dost dobře možné určit, kdy k tomu dojde. V gentoolkitu je utilitka revdep-rebuild (1), která se snaží hrubou silou najít tyto poškozené závislosti a překompiluje „postižené“ programy. V readme k programu revdep-rebuild se můžeme dočíst, že je to dočasné řešení, než bude portage podporovat zpětné závislosti. Uvidíme, jakým směrem se to bude dál vyvíjet. Překompilovávat vždy všechny programy závisející na nějaké knihovně by se také docela protáhlo.

Způsob, jak tento problém částečně minimalizovat, je nepoužívat přepínač -D. Knihovny se budou upgradovat jen, pokud se bude upgradovat nějaký program, který na nich závisí. Pokud se nad tím trošku zamyslíte, tak se tomu stejně úplně nevyhneme a také už víme, že použití emerge -u world není optimální.

revdep-rebuild -av (1)

Nepotřebné závislosti

Kde se v systému vzaly? Staly se obětí evoluce – nejsou dále potřeba. Program, který na nich závisel, je nepotřebuje nebo byl odinstalován. Už jsme si prozradili, že jsou vyřazeny i z procesu upgradování. emerge umí tyto závislosti najít a odstranit (1). Po spuštění se vám zobrazí dlouhé upozornění, ale pokud máte v pořádku world soubor, měly by se odinstalovat jen nepotřebné závislosti. Doporučuji použít utilitu regenworld (2), která na základě logovacího souboru /var/log/emerge.log dopíše případně chybějící záznamy. Také si pro jistotu projděte seznam odinstalovávaných programů, ať se vám neodinstaluje něco, co nechcete.

emerge depclean neumí dobře pracovat se SLOTy. Pokud máte nainstalováno víc verzí od jedné knihovny a je potřeba jen ta novější, depclean si nevšimne, že může odinstalovat tu starší verzi. V manuálových stránkách si můžete všimnout, že k pročišťování SLOTů slouží emerge prune, ale ten raději nepoužívejte, protože se nezabývá závislostmi a jednoduše v systému nechá jen verzi z nejvyššího slotu. Místo prune doporučuji použít bash script dep od Ecatmura, který na rozdíl od emerge prune dává pozor na závislosti. Script dep umí spoustu dalších věcí. Např. zobrazí vám zpětné závislosti (4) nebo se pokusí pročistit world (5). Princip je takový, že ve worldu najde všechny programy, na kterých už něco závisí, a navrhne je k odstranění. Jestli je to pro vás užitečné, záleží na tom, jak si udržujete world. Např. pokud překompilováváte knihovnu, měli byste používat parametr --oneshot (6), aby se nepřipsala do world a zůstala jen „závislostí“.

emerge -av depclean (1)
regenworld (2)
dep -P (3)
dep -r aalib (4)
dep -w  (5)
emerge -av --oneshot aalib (6) 

Shrnutí

Ani bych se nedivil, pokud je toho na vás moc. Asi jste si všimli, že velkou slabinou portage jsou zpětné závislosti. Při odinstalaci se neřeší, jestli bude ten program něčemu chybět, emerge prune také odinstalovává SLOTy hlava nehlava, také by mohly pomoct smést ze světa revdep-rebuild. Pro portage 2.1 je ve vývoji nový systém na řešení závislostí, pro který by zpětné závislosti neměly být problém, a život uživatelů by mohl být zase o něco příjemnější.

Pokusím se shrnout, jak by mohl vypadat kompletní upgrade desktopu.

Nejdříve musíme udělat samotný upgrade (1). Po úspěšném upgradu se opatrně zbavíme (2)(3) všech nepotřebných programů a knihoven. A na závěr překompilujeme programy, které mají problém se svými dynamickými knihovnami (4).

emerge -avuD --newuse world (1)
emerge -av depclean (2)
dep -P -a (3)
revdep-rebuild -av (4) 
Našli jste v článku chybu?

16. 3. 2008 1:37

unaven.sluncem (neregistrovaný)
Je to v baliku udept...

20. 4. 2005 14:50

j3nda (neregistrovaný)
ja nemyslel hned ze jsem guru :-) spis si pripadam jako BFA.
emerge je v posledni dobe dost vychytane, takze to zvladne vcelku sikovnejsi clovek.
...ale dik za pripominku, alespon se nebudu honosit nosem nahoru ;-)

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

120na80.cz: 5 nejčastějších mýtů o kondomech

5 nejčastějších mýtů o kondomech

Vitalia.cz: Vychytané vály a válečky na vánoční cukroví

Vychytané vály a válečky na vánoční cukroví

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

DigiZone.cz: Flix TV: dva set-top boxy za korunu

Flix TV: dva set-top boxy za korunu

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET