Gentoo Logo

1.  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í:

Výpis kódu 1.1: Zobrazení manuálové stránky emerge

$ man emerge

1.  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:

Výpis kódu 1.1: Aktualizace stromu Portage

# 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:

Výpis kódu 1.1: Spuštění emerge-webrsync

# emerge-webrsync

1.  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":

Výpis kódu 1.1: Hledání balíčků pojmenovaných po pdf

$ emerge --search pdf

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

Výpis kódu 1.1: Hledání balíčků souvisejících s PDF

$ 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á:

Výpis kódu 1.1: Ukázka výstupu 'emerge --search'

*  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:

Výpis kódu 1.1: Instalujeme 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:

Výpis kódu 1.1: Jak by se nainstaloval gnumeric

# 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:

Výpis kódu 1.1: Stažení zdrojových kódů pro gnumeric

# emerge --fetchonly gnumeric

Dokumentace nainstalovaných balíčků

Mnoho balíčků je dodáváno s vlastní dokumentací, někdy pouze při použití USE proměnné doc. Její nastavení můžete ověřit pomocí příkazu emerge -vp <jméno balíčku>.

Výpis kódu 1.1: Kontrola USE proměnné doc

(alsa-lib je samozřejmě pouze příklad.)
# emerge -vp alsa-lib
[ebuild  N    ] media-libs/alsa-lib-1.0.9_rc3  +doc -jack 674 kB

USE proměnná doc může být nastavena buď globálně v souboru /etc/make.conf nebo pro konkrétní balíčky v souboru /etc/portage/package.use. Podrobnější informace o tomto tématu najdete v kapitole (USE proměnné).

Jakmile je balíček nainstalovaný, jeho dokumentace se většinou nalézá v podadresáři pojmenovaném podle balíčku uvnitř adresáře /usr/share/doc. Také si můžete zobrazit seznam všech nainstalovaných souborů pomocí nástroje equerybalíčku app-portage/gentoolkit.

Výpis kódu 1.1: Dokumentace balíčků

# ls -l /usr/share/doc/alsa-lib-1.0.9_rc3
total 28
-rw-r--r--  1 root root  669 May 17 21:54 ChangeLog.gz
-rw-r--r--  1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x  2 root root 8560 May 17 21:54 html
-rw-r--r--  1 root root  196 May 17 21:54 TODO.gz

(Volitelně můžete použít equery:)
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.9_rc3
* Contents of media-libs/alsa-lib-1.0.9_rc3:
/usr
/usr/bin
/usr/bin/alsalisp
(výstup zkrácen)

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.

Výpis kódu 1.1: Odstranění gnumeric ze 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. V následujícím příkladu navíc použijeme i přepínač --ask, který Portage požádá o zobrazení aktualizovaných balíčků a vyžádá si váš souhlas s dalším postupem:

Výpis kódu 1.1: Aktualizace systému

# emerge --update --ask 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:

Výpis kódu 1.1: Aktualizace celého systému

# emerge --update --deep world

Protože jsou bezpečnostní aktualizace vydávány i pro balíčky, které v systému nemáte nainstalovány přímo, ale jako závislosti jiných programů, je doporučeno občas tento příkaz spustit.

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 balíček podle něj překompiluje:

Výpis kódu 1.1: Úplná aktualizace

# 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:

Výpis kódu 1.1: Ostranění nepotřebných závislostí

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

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

Výpis kódu 1.1: Instalace balíčku gentoolkit

# emerge gentoolkit

1.  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ávu 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í shodné 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 je nepoužije, 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

Výpis kódu 1.1: Varování Portage o blokovaných balíčcích (s --pretend)

[blocks B     ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)

Výpis kódu 1.1: Varování Portage o blokovaných balíčcích (bez --pretend)

!!! Error: the mail-mta/postfix 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 postfix a nebo nejprve odstranit ssmtp.

Je také možné, že se mají nainstalovat dva balíčky, které se však navzájem blokují. Pokud tento případ nastane (což se neděje nijak často), měli byste zvážit, k čemu je potřebujete oba; pokud najdete nějaký důvod, budeme rádi, když nám jej ohlásíte prostřednictvím Bugzilly.

Zamaskované balíčky

Výpis kódu 1.1: Varování Portage o zamaskovaných balíčcích

!!! all ebuilds that could satisfy "bootsplash" have been masked.

Výpis kódu 1.1: Varování Portage o zamaskovaných balíčcích - důvod

!!! 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

Výpis kódu 1.1: Varování Portage o 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ů

Výpis kódu 1.1: Varování Portage o nejednoznačných jménech balíčků

!!! 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

Výpis kódu 1.1: Varování Portage o kruhových závislostech

!!! 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í

Výpis kódu 1.1: Varování Portage o 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

Výpis kódu 1.1: Varování Portage o ochraně balíčku profilem

!!! 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.

Aktualizace: 26. prosinec 2005

Poslední aktualizace původni verze tohoto dokumentu: 17. prosinec 2013

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.