Příručka:AMD64/Práce/Portage
Portage vás vítá
Portage je jednou s nejpozoruhodnějších inovací Gentoo na poli správy softwaru. Díky své velké flexibilitě a obrovskému množstvím funkcí je často pokládána za nejlepší nástroj pro správu softwaru dostupný pro Linux.
Portage je celá napsaná v Pythonu a Bashi a je tak pro uživatele plně transparentní, jelikož se jedná o skriptovací jazyky.
Většina uživatelů bude s Portage pracovat prostřednictvím nástroje emerge. Cílem této kapitoly není duplikovat informace dostupné v manuálové stránce emerge. Pro vyčerpávající přehled voleb emerge se prosím podívejte na manuálovou stránku:
user $
man emerge
Repozitář Gentoo
Ebuildy
Pokud dokumentace Gentoo hovoří o balíčcích, má tím na mysli softwarové tituly dostupné uživatelům Gentoo skrze repozitář Gentoo. Ten obsahuje sbírku ebuildů, souborů, které obsahují veškeré informace, které Portage potřebuje k nakládání s programy (instalaci, vyhledávání, dotazování atd.). Ve výchozím stavu se soubory ebuildů nacházejí v /var/db/repos/gentoo.
Kdykoli je Portage dán požadavek na provedení akce, která se týká softwaru, použije ebuildy v systému, jako výchozí bod. Proto je třeba pravidelně aktualizovat ebuildy v systému, tak, aby Portage věděl o novém softwaru, bezpečnostních aktualizacích atd.
Aktualizace repozitáře Gentoo
Repozitář Gentoo se aktualizuje příkazem rsync, utilitou pro rychlý přírůstkový přenos souborů. Aktualizace je opravdu jednoduchá, jelikož příkaz emerge poskytuje rozhraní pro rsync.
root #
emerge --sync
Někdy se však vyskytnou omezení daná firewallem, která znemožní příkazu rsync navázat spojení se zrcadly. V takovém případě aktualizujte repozitář Gentoo přes každodenně generovaný snímek stromu Portage. Nástroj emerge-webrsync automaticky stáhne a nainstaluje poslední snímek do systému:
root #
emerge-webrsync
Nakládání se softwarem
Vyhledání softwaru
Způsobů jak vyhledávat software ve repozitáře Gentoo je mnoho. Jednou z cest je využití samotného programu emerge. V základu příkaz emerge --search vrátí názvy balíčků, jejichž název odpovídá (buď úplně, nebo i částečně) danému vyhledávacímu dotazu.
Například k vyhledání všech balíčků, které mají v názvu "pdf":
user $
emerge --search pdf
Pokud chcete prohledávat také popisy, použijte volbu --searchdesc
(nebo také -S
):
user $
emerge --searchdesc pdf
Všimněte si, že výstup vrací mnoho informací. jednotlivá pole jsou jasně označena, tudíž nebudeme více vysvětlovat jejich význam:
* 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
Pokud jsme žádaný software našli, dělí nás od jeho instalace již jen jeden příkaz. Pro nainstalování gnumeric je to například:
root #
emerge --ask app-office/gnumeric
Jelikož mnoho aplikací závisí jedna na druhé, jakýkoli pokus o instalaci určitého softwaru může vést také k instalaci několik závislostí. Nebojte, Portage si se závislostmi poradí. Abyste zjistili, co Portage nainstaluje, použijte volbu --pretend
. Například:
root #
emerge --pretend gnumeric
To do the same, but interactively choose whether or not to proceed with the installation, add the --ask
flag:
root #
emerge --ask gnumeric
Během instalování balíčku Portage stáhne z internetu nezbytný zdrojový kód (je-li to potřeba) a uloží jej (ve výchozím stavu) do /var/cache/distfiles/. Potom jej rozbalí, zkompiluje a balíček nainstaluje. Chcete-li dát Portage instrukce, aby došlo pouze ke střžení zdrojových kódů bez jejich instalace, předejte příkazu emerge volbu --fetchonly
:
root #
emerge --fetchonly gnumeric
Nalezení dokumentace nainstalovaných balíčků
Spousta balíčků obsahuje vlastní dokumentaci. Někdy se to, zda bude dokumentace balíčku nainstalována nebo ne, určuje pomocí přepínače USE doc
. Ke zjištění, zda je přepínač USE doc
balíčkem používán, použijte příkaz emerge -vp category/package:
root #
emerge -vp media-libs/alsa-lib
These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild R ] media-libs/alsa-lib-1.1.3::gentoo USE="python -alisp -debug -doc" ABI_X86="(64) -32 (-x32)" PYTHON_TARGETS="python2_7" 0 KiB
Nejlepší je zapínat přepínač USE doc
pro každý balíček zvlášť pomocí souboru /etc/portage/package.use, tak aby byla instalována dokumentace jen pro balíčky, u kterých to chceme. Více informací si můžete přečíst v sekci o přepínačích USE.
Jakmile je balíček nainstalován, lze jeho dokumentaci většinou najít v podadresáři pojmenovaném po balíčku uvnitř adresáře /usr/share/doc:
user $
ls -l /usr/share/doc/alsa-lib-1.1.3
celkem 16 -rw-r--r-- 1 root root 3098 Bře 9 15:36 asoundrc.txt.bz2 -rw-r--r-- 1 root root 672 Bře 9 15:36 ChangeLog.bz2 -rw-r--r-- 1 root root 1083 Bře 9 15:36 NOTES.bz2 -rw-r--r-- 1 root root 220 Bře 9 15:36 TODO.bz2
Jistější postup jak vypsat nainstalované soubory dokumentace je použít equery s volbou --filter
. Příkaz equery se používá k dotazům na databází portage a je součástí balíčku app-portage/gentoolkit:
user $
equery files --filter=doc alsa-lib
* Searching for alsa-lib in media-libs ... * Contents of media-libs/alsa-lib-1.1.3: /usr/share/doc/alsa-lib-1.1.3/ChangeLog.bz2 /usr/share/doc/alsa-lib-1.1.3/NOTES.bz2 /usr/share/doc/alsa-lib-1.1.3/TODO.bz2 /usr/share/doc/alsa-lib-1.1.3/asoundrc.txt.bz2
Volba --filter
může být použita s ostatními pravidly ke zobrazení míst kam se instalují různé typy souborů. Další funkce si můžete nastudovat v man stránce equery: man 1 equery.
Odstranění softwaru
K odstranění softwaru ze systému použijte příkaz emerge --unmerge. Tím dáte Portage instrukce, aby odstranila soubory nainstalované daným balíčkem ze systému. Vyjímkou jsou konfigurační soubory aplikace, "pokud" byly uživatelem změněny. Ponechání konfiguračních souborů umožňuje uživateli, aby mohl pokračovat v práci s balíčkem bez nutnosti rekonfigurace, pokud by byl později znovu nainstalován.
root #
emerge --unmerge gnumeric
Pokud je balíček odstraněn ze systému, závislosti tohoto balíčku, které byly automaticky nainstalovány spolu s ním, jsou stále zachovány v systému. Aby Portage nalezl všechny závislosti, které mohou být nyní odstraněny, použijte funkci emerge --depclean
, která je popsána později.
Aktualizace systému
Abyste udrželi systém ve formě (nemluvě o instalaci nejnovějších bezpečnostních aktualizací), je třeba aktualizovat pravidelně systém. Jelikož Portage kontroluje pouze ebuildy v repozitáři Gentoo, první věcí, kterou musíte udělat, je aktualizace repozitáře Gentoo. Jakmile je repozitář Gentoo aktualizován, může být systém aktualizován pomocí emerge --update @world. V následujícím příkladu používáme také volbu --ask
, který říká Portage, aby zobrazil seznam balíčků, které chce aktualizovat a vyžádal potvrzení:
Portage po vyhledá novější verze instalovaných aplikací. Nicméně zkontroluje pouze verze aplikací, které byly explicitně nainstalovány (aplikace obsažené v /var/lib/portage/world) - nebude zevrubně kontrolovat jejich závislosti. Chcete-li aktualizovat zároveň i závislosti, použijte volbu --deep
:
root #
emerge --update --deep @world
Pokud jste v systému změnili nastavení USE, doporučuje se také přidat volbu --newuse
. Portage pak ověří, zda změna vyžaduje instalaci nových balíčků nebo překompilování již existujících:
root #
emerge --update --deep --with-bdeps=y --newuse @world
Metabalíčky
Některé balíčky ve repozitáři Gentoo nemají žádný reálný obsah, ale používají se k instalaci sestav balíčků. Například balíček kde-plasma/plasma-meta nainstaluje do systému kompletní desktop KDE Plasma tím, že vtáhne rozličné balíčky související s Plasmou jako závislosti.
Spuštění emerge --unmerge k odstranění takového balíku ze systému nebude mít žádný efekt, jelikož závislosti zůstanou v systému.
Portage obsahuje funkci k odstranění osiřelých závislostí, avšak jelikož je dostupnost softwaru dynamicky proměnná, je nejdříve nejdůležitější provést celkovou aktualizaci systému, včetně změn přepínačů USE. Potom lze spustit příkaz emerge --depclean k odstranění osiřelých závislostí. Jakmile je toto dokončeno, může být nutné znovu sestavit aplikace, které byly dynamicky propojené k nyní již odstraněnému softwaru, ale nadále ho již nepotřebují. Tato funkce byla do Portage nedávno přidána.
O vše se postarají následující tři příkazy:
root #
emerge --update --deep --newuse @world
root #
emerge --depclean
root #
revdep-rebuild
Licence
Počínaje Portage verze 2.1.7 je možné schválit nebo naopak odmítnout instalaci software na základě jeho licence. Všechny balíčky ve stromu obsahují ve svém ebuildu údaj o licenci (LICENSE). Příkaz emerge --search package/category zobrazí licenci balíčku.
Proměnná LICENCE v ebuildu je jen pomůckou pro vývojáře a uživatele Gentoo. Nejedná se o právní stanovisko a není žádná garance, že odpovídá skutečnému stavu. Nespoléhejte tedy na ni a zkontrolujte balíček pořádně sami, včetně všech souborů, které používáte.
If a discrepancy is found in the ebuild, please file a bug to suggest a change to the value(s) assigned to the ebuild's LICENSE variable.}}
Ve výchozím stavu Portage povoluje licence schválené Free Software Foundation, Open Source Initiative nebo ty, které se řídí definicí svobodného software.
Proměnná, která povoluje licence, se nazývá ACCEPT_LICENSE a může být nastavena v /etc/portage/make.conf. V následujícím příkladu je zobrazena její výchozí hodnota:
ACCEPT_LICENSE="-* @FREE"
S tímto nastavením buden možné nainstalovat balíčky pod svobodnou softwarovou nebo dokumentační licencí. Nesvobodný software nebude možné instalovat.
Proměnnou ACCEPT_LICENSE je možné nastavit globálně v /etc/portage/make.conf, nebo zvlášť specifikovat pro každý balíček v souboru /etc/portage/packages.license.
Abyste mohli například povolili licenci google-chrome balíčku www-client/google-chrome, vložte do /etc/portage/package.license následující:
www-client/google-chrome google-chrome
Tímto umožníte instalaci www-client/google-chrome, ale zamezíte instalaci balíčku www-plugins/chrome-binary-plugins, ačkoli mají stejnou licenci.
Or to allow the often-needed sys-kernel/linux-firmware:
# Accepting the license for linux-firmware
sys-kernel/linux-firmware linux-fw-redistributable
</div>
<div lang="en" dir="ltr" class="mw-content-ltr">
# Accepting any license that permits redistribution
sys-kernel/linux-firmware @BINARY-REDISTRIBUTABLE
Licence jsou uloženy v adresáři /usr/portage/licenses/ a skupiny licencí se nacházejí v souboru /usr/portage/profiles/license_groups. První údaj na každém řádku vyvedený ve "VELKÝCH" písmenech je názvem skupiny licencí, a všechny údaje za ním jsou názvy jednotlivých licencí
.
Skupiny licencí se v proměnné ACCEPT_LICENSE označují znakem @
. Je možné provést nastavení (které bylo předchozí výchozí volbou Portage) umožňující všechny licence vyjma End User Licence Agreement (EULAs), kteřé vyžadují přečtení a podpis akceptace. Abychom toho dosáhli, udělte souhlas se všemi licencemi (pomocí -*
) a pak odstraňte všechny licence ve skupině EULA následujícím způsobem:
ACCEPT_LICENSE="* -@EULA"
Vemte na vědomí, že tímto nastavením udělíte souhlas s nesvobodným softwarem a dokumentací.
Když si Portage stěžuje
Terminologie
Jak bylo řečeno dříve, Portage je extrémně silná a podporuje mnoho funkcí, které jiné nástroje správy softwaru nemají. Abyste vše pochopili, vysvětlíme několik aspektů Portage, aniž bychom zabíhali do přílišných detailů.
Portage umožňuje koexistenci několika verzí jednoho balíčku v systému. Zatímco ostatní distribuce se přiklání k tomu pojmenovávat balíčky podle těchto verzí (například freetype a freetype2), Portage používá techniku zvanou "SLOT"y. Ebuild deklaruje určitý SLOT své verze. Ebuildy s různými SLOTy mohou koexistovat v jednom systému. Například balíček freetype používá v ebuildech SLOT="1" a SLOT="2".
Existují také balíčky, které poskytují stejnou funkcionalitu, alejinou implementaci. Například metalogd, sysklogd a syslog-ng jsou systémové loggery. Aplikace, které spoléhají na dostupnost "systémového loggeru", nemohou například záviset na metalogd, jelikož volba kteréhokoli loggeru je stejně dobrá. Portage umí virtuální balíčky: všechny systémové loggery jsou na seznamu vzájemně se vylučujících závislostí virtuálního balíčku logovací služby v kategorii virtual tak, aby aplikace mohly záviset na balíčku virtual/logger. Je-li tento balíček instalován, natáhne s sebou logovací balíček jmenovaný v něm na prvním místě, pokud už není nainstalovaný jiný logovací balíček (v takovém případě je virtual uspokojen).
Software v repozitáři Gentoo může být umístěn v rozdílných větvích. Ve výchozím stavu systém akceptuje pouze balíčky, které Gentoo považuje za stabilní. Většina nových softwarových titulů bývá při svém zahrnutí přidána do testovací větve, což znamená, že je třeba provést další testování, než budou označeny za stabilní. Ačkoli jsou ebuildy tohoto softwaru v repozitáři Gentoo, Portage je nebude aktualizovat do doby, než budou přidány do stabilní větve.
Některý software je dostupná pouzte pro pár architektur. Nebo software funguje jenom na jiných architekturách nebo potřebuje víc testování nebo vývojář, který zahrnul software do repozitáře Gentoo nemá možnost ověřit, že balíček funguje na jiných architekturách.
Každá instalace Gentoo se také drží určeného profilu, který obsahuje, mimo další informace, seznam balíčků, které jsou vyžadovány k tomu, aby systém normálně fungoval.
Blokované balíčky
[blocks B ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)
- Error: The above package list contains packages which cannot be
* installed at the same time on the same system.
(x11-wm/i3-4.20.1:0/0::gentoo, ebuild scheduled for merge) pulled in by
x11-wm/i3
Ebuildy obsahují specifická pole, která informují Portage o svých závislostech. Jsou dvě možné závislosti: závislost sestavení, deklarovaná v proměnné DEPEND a závislosti běhu, obdobně deklarované v proměnné RDEPEND. Pokud jdna z těchto závislostí výslovně uvede, že je balíček nebo virtual nekompatibilní, vyvolá to blokaci.
Nakolik jsou novější verze Portage dostatečně chytré, aby obešly dorbné blokace bez uživatelského zásahu, občas je třeba takové blokace vyřešit ručně.
Vyřešení blokace vyžaduje, aby se uživatel rozhodl buď neinstalovat balíček nebo odinstalovat nejdříve balíček, který zapříčiňuje konflikt. V daném příkladu lze zvolit buď neinstalovat postfix nebo nejprve odebrat ssmtp.
Občas se objeví blokující balíčky se specifickými atomy, jako je <media-video/mplayer-1.0_rc1-r2
. V takovém případě může být blok odstraněn aktualizací blokujícího balíčku na novější verzi.
Je také možné, že se dva balíčky, které mají být teprve nainstalovány, navzájem blokují. V těchto vzácných případech se pokuste zjistit, pro je potřeba instalovat oba dva. Ve většině případů by měla postačovat instalace jen jednoho z nich. Pokud tomu tak není, nahlašte chybu Systému správy chybových hlášení Gentoo.
Maskované 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)
- games-fps/unreal-tournament-451 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)
- net-im/skype-2.1.0.81 (masked by: skype-eula license(s))
Když se pokoušíte nainstalovat balíček, který není dostupný pro daný systém, objeví se tato chyba maskování. Uživatelé by měli zkusit nainstalovat jinou, v systému dostupnou aplikaci nebo počkat, dokud nebude balíček dostupný. Zamaskování balíčku má vždy svůj důvod:
Důvody maskování | Description |
---|---|
klíčové slovo ~arch | Aplikace nebyla dostatečně otestována, aby mohla být umístěna do stabilní větve. Počkejte pár dnů nebo týdnů a zkuste to znova. |
klíčová slova -arch nebo -* | Aplikace nefunguje na vaší architektuře. Pokud máte za to, že na ní funguje, nahlašte chybu do naší Bugzilly. |
chybějící klíčové slovo | Aplikace zatím nebyla na vaší architektuře testována. Požádejte tým pro portování na architekturu, aby balíček otestoval nebo ji vyzkoušejte sami a nahlašte své poznatky do naší Bugzilly. |
package.mask | Bylo zjištěno, že balíček je poškozený, nestabilní nebo i něco horšího a bylo mu přiřazeno označení nepoužívat. |
profile | Bylo zjištěno, že balíček není vhodný pro současný profil. Pokud by byl nainstalován, může balíček rozbít systém nebo je jen nekompatibilní s právě používaným profilem. |
license | Licence balíčku není kompatibilní s hodnotou ACCEPT_LICENSE. Povolte jeho licenci nebo správnou skupinu licencí nastavením v /etc/portage/make.conf nebo /etc/portage/package.license |
Potřebné změny přepínače USE
The following USE changes are necessary to proceed:
#required by app-text/happypackage-2.0, required by happypackage (argument)
>=app-text/feelings-1.0.0 test
Chybová hláška se může zobrazit i takto, pokud není použitá volba --autounmask
:
emerge: there are no ebuilds built with USE flags to satisfy "app-text/feelings[test]".
!!! One of the following packages is required to complete your request:
- app-text/feelings-1.0.0 (Change USE: +test)
(dependency required by "app-text/happypackage-2.0" [ebuild])
(dependency required by "happypackage" [argument])
Takové varování nebo chyba nastanou pokud je vyžadována instalace balíčku, který nejenže závisí na jiném balíčku, ale také vyžaduje, aby byl tento balíček sestaven s určitým přepínačem USE (nebo sadou přepínačů USE). V daném případě je vyžadováno, aby byl balíček app-text/feelings sestaven s USE="test", ale tento přepínač USE nebyl v systému zapnut.
Řešení spočívá buď v přidání požadovaného USE přepínače mezi globální USE přepínače v /etc/portage/make.conf, nebo jeho nastavení pro daný balíček v /etc/portage/package.use.
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.
Instalovaná aplikace závisí na jiném balíčku, který není v systému dostupný. Zkontrolujte prosím Bugzillu, zda je problém nahlášen a pokud ne, nahlašte jej prosím. Pokud není v systému nastaveno mísení větví, nemělo by toto nastat a jde tedy o chybu.
Nejednoznačený název ebuildu
[ Results for search key : listen ]
[ Applications found : 2 ]
* dev-tinyos/listen [ Masked ]
Latest version available: 1.1.15
Latest version installed: [ Not Installed ]
Size of files: 10,032 kB
Homepage: http://www.tinyos.net/
Description: Raw listen for TinyOS
License: BSD
* media-sound/listen [ Masked ]
Latest version available: 0.6.3
Latest version installed: [ Not Installed ]
Size of files: 859 kB
Homepage: http://www.listen-project.org
Description: A Music player and management for GNOME
License: GPL-2
!!! The short ebuild name "listen" is ambiguous. Please specify
!!! one of the above fully-qualified ebuild names instead.
Zvolená instalovaná aplikace má název, který odpovídá více než jednomu balíčku. Řešením je zadat také název kategorie. Portage informuje uživatele o možných shodách, z nichž lze vybrat.
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) instalovaných balíčků na sobě vzájemně závisí a tudíž nemohou být nainstalovány. Jedná se nejspíše o chybu v jednom z balíčků v repozitáři Gentoo. Po nějakém čase resynchronizujte a zkuste to znovu. Přínosem může být také kontrola Bugzilly, abyste zjistili, zda je problém znám a pokud ne, nahlašte ho.
Stažení selhalo
!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered. Please see above for details.
Portage nemohla stáhnout zdrojové kódy dané aplikace a bude se snažit nainstalovat další aplikace (je-li to možné). Tato chyba může být způsobena zrcadlem, které není správně synchronizováno, nebo tím, že ebuild odkazuje na chybné umístění. Server, kde se zdrojové kódy nachází může být také z nějakých důvodů mimo provoz.
Za hodinu zkuste znova, zda problém přetrvává.
Ochrana profilu systému
!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.
Uživatel požaduje odebrání balíčku, který je součástí základních systémových balíčků. Profil ho uvádí jako vyžadovaný a neměl by tedy být odstraněn ze systému.
Chyba ověření přehledu
>>> checking ebuild checksums
!!! Digest verification failed:
Jedná se o známku toho, že je něco špatně s repozitářem Gentoo - často se jedná o chybu při zavádění ebuildu do repozitáře ebuildů Gentoo.
Pokud ověření přehledu selže, nepokoušejte se znovu zpracovat ebuild ručně. Spuštění ebuild foo manifest problém neodstraní, naopak ho může zhoršit.
Namísto toho počkejte hodinu nebo dvě, než se repozitář usadí. Je pravděpodobné, že byl problém ihned zaznamenán, ale může chvilku trvat, než se oprava objeví na zrcadlech rsync. Zkontrolujte Bugzillu a zjistěte, zda už někdo problém nahlásil nebo napište na #gentoo (webchat) (IRC). Pokud tomu tak není, nahlašte, že je v ebuildu chyba.
Jakmile bude chyba opravena, resnychronizujte repozitář ebuildů Gentoo, čímž stáhnete opravený přehled.
Dbejte na to, abyste nesynchronizovali repozitář ebuildů Gentoo více než jednou denně. Jak uvádíme v oficiální netiketě Gentoo (stejně jako u spouštění emerge --sync), uživatelům, kteří synchronizují příliš často, může být načas další synchronizování zablokováno. Pokud to není naprosto nezbytné, je nejlepší vyčkat se synchronizací po dobu 24 hodin, aby resynchronizace nepřetížila rsync zrcadla Gentoo.