1.45 2005-05-09
Vítejte do Portage

Portage je pravděpodobně jedna z nejvýznamnějších inovací v oblasti správy softwaru. Díky své vysoké flexibilitě a širokému rozsahu možností je často pokládáno za nejlepší dostupný nástroj pro správu softwaru pod Linuxem.

Portage je celé napsáno ve skriptovacích jazycích Pythonu a Bash, a proto i otevřené vůči uživatelům.

Většina uživatelů se s Portage setká prostřednictvím nástroje emerge. Tato kapitola nesupluje jeho manuálovou stránku, ve které najdete kompletní popis možností:

$ man emerge
Strom Portage Ebuildy

Mluvíme-li o balíčcích, často myslíme softwarové produkty dostupné přes strom Portage, strukturu obsahující sbírku ebuildů, souborů obsahujících všechny informace potřebné ke správě softwaru (instalace, vyhledávání,...). Ve výchozím nastavení jsou tyto soubory uloženy v /usr/portage.

Kdykoli požádáte Portage, aby podniklo nějakou akci, použije ebuildy z Vašeho systému jako základ. Proto je důležité, abyste je pravidelně aktualizovali, aby Portage vědělo o nových verzích, bezpečnostních aktualizacích atd.

Aktualizace stromu Portage

Strom Portage je obvykle aktualizován přes rsync, rychlý nástroj pro inkrementální synchronizaci. Celý proces je jednoduchý, protože příkaz emerge sám zavolá rsync:

# emerge --sync

Nelze-li kvůli omezení firewallem použít rsync, stále můžete aktualizovat pomocí denně vytvářených snapshotů stromu. Nástroj emerge-webrsync automaticky stáhne a nainstaluje poslední dostupnou verzi:

# emerge-webrsync
Správa softwaru Vyhledávání softwaru

Pro vyhledávání ve stromu Portage můžete rovněž použít příkaz emerge. emerge --search vrátí jména balíčků, jejichž název alespoň částečně odpovídá zadanému výrazu.

Například pro zobrazení všech balíčků obsahujících v názvu "pdf":

$ emerge --search pdf

Chcete-li prohledávat i popisy, můžete použít volbu --searchdesc (nebo -S):

$ emerge --searchdesc pdf

Podíváte-li se na výstup, uvidíte, že podává velké množství informací. Vše je jasně popsáno, proto nebudeme vysvětlovat, co která řádka znamená:

*  net-print/cups-pdf
      Latest version available: 1.5.2
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 15 kB
      Homepage:    http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
      Description: Provides a virtual printer for CUPS to produce PDF files.
      License:     GPL-2
Instalace softwaru

Když naleznete balíček, který se Vám líbí, můžete ho snadno nainstalovat pomocí emerge; jednoduše zadáte jeho jméno. Například pokud Vás zaujal gnumeric:

# emerge gnumeric

Protože mnoho aplikací závisí na jiných, pokus o jejich instalaci může způsobit i jejich instalaci. Není však žádný důvod k obavám, Portage se o závislosti postará samo. Chcete-li vědět, co by Portage nainstalovalo "navíc", přidejte volbu --pretend, například takto:

# emerge --pretend gnumeric

Požádáte-li Portage o instalaci konkrétního balíčku, je-li potřeba, samo stáhne potřebné zdrojové kódy z Internetu, uloží je (ve výchozím nastavení) do /usr/portage/distfiles, rozbalí, zkompiluje a nainstaluje je. Chcete-li, aby proběhlo pouze stažení a ne samotná instalace, přidejte volbu --fetchonly:

# emerge --fetchonly gnumeric
Odebrání softwaru

Když chcete ze svého systému odebrat softwarový balíček, použijte příkaz emerge --unmerge, který odebere všechny soubory patřící danému balíčku kromě konfiguračních souborů, pokud od instalace došlo k jejich změně. Tyto soubory jsou v systému ponechány pro případ, že byste se v budoucnu rozhodli balíček znovu nainstalovat.

Avšak zde je na místě velké varování - Portage nekontroluje, zda balíček, který chcete odebrat, není vyžadován jako závislost jiného balíčku. Varování však dostanete, pokusíte-li se odebrat důležitý balíček nutný pro chod systému.

# emerge --unmerge gnumeric

Odinstalace balíčku neovlivní jeho závislosti, ty v systému zůstanou nainstalované. Pokud chcete, aby Portage nalezl všechny balíčky, které již nemají důvod v systému být, použijte volbu --depclean příkazu emerge, toto bude popsáno později.

Aktualizace systému

Aby byl Váš systém v dobrém stavu (o bezpečnostních aktualizacích ani nemluvě), je potřeba ho pravidelně aktualizovat. Protože Portage pracuje pouze s ebuildy ve Vašem místním stromu Portage, je potřeba nejprve aktualizovat jej. Zbytek systému se zaktualizuje pomocí emerge --update world:

# emerge --update world

Tento příkaz řekne Portage, aby se pokusilo nainstalovat novější verze od všech balíčků, jež máte nainstalované. Bude se však zabývat pouze těmi, které jste explicitně nainstalovali, ne jejich závislostmi. Budete-li chtít provést aktualizaci všech přítomných balíčků, přidejte parametr --deep:

# emerge --update --deep world

V případě, že jste nedávno změnili nastavení USE proměnných, pravděpodobně budete chtít přidat i parametr --newuse. Portage pozná změnu nastavení a překompiluje balíček podle něj balíček:

# emerge --update --deep --newuse world
Metabalíčky

Některé balíčky nemají žádný skutečný obsah, ale slouží k instalaci určité skupiny balíčků. Například balík kde nainstaluje kompletní prostředí KDE, protože má v závislostech uvedeny všechny potřebné balíčky.

Když byste chtěli takový balíček odinstalovat, emerge --unmerge Vám moc nepomůže, protože závislosti v systému zůstávají.

Portage samozřejmě umí najít a odstranit i takovéto osiřelé závislosti, ale protože se tyto závislosti dynamicky mění, je potřeba nejprve plně zaktualizovat systém, včetně následků případných změn USE proměnných. Poté již můžete spustit emerge --depclean pro odstranění balíčků, jež nejsou potřeba, a nakonec znovu přeložit balíčky, které jsou dynamicky linkovány s nyní odebraným softwarem, ale nevyžadují je.

Toho všeho dosáhnete těmito třemi příkazy:

# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild

revdep-rebuild je součástí balíčku gentoolkit; nezapomeňte si ho nainstalovat:

# emerge gentoolkit
Když si Portage stěžuje... O SLOTech, virtuálech, větvích, architekturách a profilech

Jak již bylo řečeno, Portage je mocný nástroj mající mnoho vlastností, které jiné nástroje pro správo softwaru postrádají. Pro lepší představu popíšeme některé jeho aspekty, aniž bychom zabíhali do větší hloubky.

S Portage není problém mít více verzí jednoho balíčku v systému najednou. Jiné distribuce často pojmenovávají své balíčky včetně verzí (jako například freetype a freetype2), Portage používá technologii SLOTů. Ebuild deklaruje, do kterého SLOTu daná verze patří, a ebuildy s různými SLOTy mohou existovat vedle sebe. Například ebuildy balíčku freetype mají SLOT="1" a SLOT="2".

Existují balíčky, poskytující ty samou funkce, avšak různými způsoby. Například metalogd, sysklogd a syslog-ng jsou systémové loggery, a proto uspokojí závislost aplikace vyžadující "syslog". Taková aplikace nemůže záviset například na balíčku metalogd, protože existují i jiné loggery. Proto přichází Portage s konceptem virtuálů - každý systémový logger poskytuje virtual/syslog, a proto mohou aplikace záviset právě na této hodnotě.

Software ve stromu Portage se může nacházet ve více větvích. Ve výchozím nastavení se Portage zabývá pouze softwarem, který Gentoo považuje za stabilní. Když je do stromu přidán nový balíček, jde většinou nejprve do testovací větve, což znamená, že před tím, než bude označen jako stabilní, musí projít více testy. Ebuildy jsou již sice součástí stromu, avšak Portage na ně nebude upgradovat, dokud nepřejdou do stabilní větve.

Některý software je dostupný pouze pro pár architektur, nebo na některých nefunguje, případně ještě vyžaduje testování. Je také možné, že vývojář, který balíček do stromu umístil, není schopen ověřit, zda je software funkční na jiných architekturách.

Každá instalace Gentoo se řídí určitým profilem, který obsahuje, kromě dalších informací, seznam balíčků nutných pro normální chod systému.

Blokované balíčky
[blocks B     ] gnome-base/bonobo-activation (from pkg gnome-base/libbonobo-2.4.0)
!!! Error: the gnome-base/bonobo-activation package conflicts with another package.
!!!        both can't be installed on the same system together.
!!!        Please use 'emerge --pretend' to determine blockers.

Ebuildy v sobě obsahují informaci, podle které Portage určuje závislosti. Jsou dva druhy závislostí: závislosti pro překlad, deklarované pomocí DEPEND, a závislosti pro běh programu, deklarované v sekci RDEPEND. Když jedna z nich označí balíček nebo virtuál jako nekompatibilní, nastane blokování.

Pro vyřešení blokování máte dvě možnosti - nový balíček nemusíte instalovat, a nebo odstraníte balík vytvářející konflikt. Ve výše uvedeném příkladu se buď můžete rozhodnout nenainstalovat libbonobo a nebo nejprve odstranit bonobo-activation.

Zamaskované balíčky
!!! all ebuilds that could satisfy "bootsplash" have been masked.
!!! possible candidates are:

- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
- dev-util/cvsd-1.0.2 (masked by: missing keyword)
- media-video/ati-gatos-4.3.0 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)

Když se pokusíte nainstalovat balíček, který není pro Váš systém dostupný, dočkáte se takovéto chyby. Měli byste buď nainstalovat jiný podobný balíček a nebo počkat, než ten Vámi vybraný bude dostupný. Vždy je důvod, proč je konkrétní balíček nedostupný:

  • ~arch keyword znamená, že balíček ještě není dostatečně otestovaný pro stabilní větev. Počkejte pár dní nebo týdnů a zkuste to znovu.
  • -arch keyword nebo -* keyword znamená, že aplikace nepracuje na Vaší architektuře. Věříte-li, že ano, vyplňte oznámení o chybě v naší bugzille.
  • missing keyword znamená, že aplikace ještě nebyla na Vaší architektuře testována. Zeptejte se týmu starajícího se o portování na danou architekturu, případně balíček rovnou vyzkoušejte a oznamte své výsledky přes naší bugzillu.
  • package.mask znamená, že je balíček poškozený, nestabilní nebo něco ještě horšího, a byl po zralé úvaze označen "nepoužívejte".
  • profile znamená, že balíček není vhodný pro Váš profil. Aplikace může poškodit Váš systém, pokud ji nainstalujete, a nebo prostě není s Vámi používaným profilem kompatibilní.
Chybějící závislosti
emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".

!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem.

Aplikace, kterou se pokoušíte nainstalovat, závisí na jiné, které na Vašem systému není dostupná. Prosím přesvědčte se, zda naše bugzilla o problému ví, a pokud ne, ohlaste ho, prosím. Pokud nekombinujete více větví, neměla by taková situace nastat a je to tudíž chyba.

Nejednoznačná jména ebuildů
!!! The short ebuild name "aterm" is ambiguous.  Please specify
!!! one of the following fully-qualified ebuild names instead:

    dev-libs/aterm
    x11-terms/aterm

Aplikace, kterou chcete nainstalovat, má stejné jméno, jako jiný balíček, a proto je potřeba, abyste uvedli i jméno kategorie. Portage Vám dá vybrat z možných řešení.

Kruhové závislosti
!!! Error: circular dependencies:

ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2

Dva (nebo více) balíčky, které chcete nainstalovat, na sobě navzájem závisí, a proto nemohou být nainstalovány. Toto je velmi pravděpodobně chyba ve stromu Portage, a proto prosím zkuste znovu sesynchronizovat svoji kopii z Internetu o chvíli později, a pokuste se instalaci opakovat. Také se můžete podívat do bugzilly, zda je problém znám, a pokud ne, ohlásit ho.

Selhání stažení
!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered.  Please see above for details.

Portage nebylo schopné stáhnout zdrojové kódy dané aplikace a bude pokračovat instalací dalšího softwaru (pokud to půjde). Tato chyba může být způsobena zrcadlem, které nebylo správně synchronizované, nebo ebuildem, který se pokouší stáhnout špatný soubor. Je také možné, že server, na kterém jsou soubory umístěny, je zrovna z nějakého důvodu nedostupný.

Zkuste to znovu za hodinu, problém pravděpodobně vymizí.

Ochrana profilem systému
!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.

Chcete odebrat balíček, který tvoří důležitou část systému. Je uveden v profilu jako vyžadovaný, a proto by neměl být ze systému odstraněn.