Úvod
Pokud alespoň tušíte, jak něco funguje/pracuje, tak také víte, jak to můžete použít, co to vydrží a jak to napravit. Gentoo je samo o sobě výborný nástroj, který vám umožňuje si z opensource sestavit systém podle vašich přání a představ. Snad vám ho následující odstavce pomohou zase o trochu lépe poznat. Předpokládám jisté znalosti, které jste načerpali v handbooku, případně v článcích na abclinuxu.cz (1, 2) a root.cz (1,2). Také bude potřeba trochu soustředění a přemýšlení, abyste se nedostali do depedency hell.
Stručně si připomeneme některé pojmy, které budou potřeba.
Základní pojmy
Ebuild
V Gentoo nejsou klasické balíčky, ve kterých je uložen příslušný program a informace o verzi, závislostech, velikosti apod. Ebuild je skript, v němž se nacházejí nejen klasické informace (popis, licence, závislosti, keywordy), ale také informace o tom, odkud stáhnout zdrojové kódy, jak je rozbalit, nastavit, zkompilovat a nainstalovat. Pro každou verzi programu je pochopitelně samostatný ebuild. Prohlédněte si nějaký ebuild, abyste si udělali představu, jak to celé vypadá (např. /usr/portage/mail-client/ mutt/mutt-1.5.6-r4.ebuild
).
portage strom
Portage strom je adresářová struktura (v /usr/portage
), kde jsou především podle kategorií uloženy všechny ebuildy v jednotlivých adresářích. Nejlépe si to představíte, když si /usr/portage
trochu prozkoumáte. Obecně se ebuild nachází v /usr/portage/kategorie/ nazevprogramu/ nazevprogramu-verze.ebuild
. Portage strom obsahuje další soubory – profily, bezpečnostní oznámení, popisy k USE flagům apod. Všechny tyto soubory jsou v Portage stromu, protože se potřebují postupem času aktualizovat – o to se postará dobře známý emerge sync
.
USE
USE je jedna z nejvýznamnějších proměnných v Gentoo. Každý se s ní setkal již při samotné instalaci. Obsahuje jednotlivé USE flagy, podle kterých se vám při instalaci postupně systém formuje. Např. pokud si přidáte USE flag maildir
, tak ve všech programech, které to umožňují, se prostřednictvím ebuildu zapne podpora pro maildir. Ještě připomenu, že výchozí nastavení USE je definováno v instalačním profilu (konkrétně /etc/make.profile/make.defaults
). Pokud si chceme USE upravit podle svého, využijeme souboru /etc/make.conf
. Neupravujte make.defaults
– po synchronizaci portage stromu byste přišli o všechny změny! Do make.conf se píšou pouze rozdíly oproti make.defaults. Např. pokud napíšeme do make.conf
USE=imap -arts
, povolíme k výchozímu nastavení imap
a naopak zakážeme arts
.
KEYWORDS
KEYWORDS
je proměnná, podobně jako USE
. Je zapsaná v každém ebuildu. Např. KEYWORDS="x86 ~ppc -amd64"
znamená, že příslušný ebuild bez problémů funguje na architektuře x86 (stable), na ppc má drobné problémy nebo není dostatečně otestován (testing) a na amd64 nefunguje vůbec. U většiny programů je v portage několik verzí. Když přijde nová verze do portage, je obvykle označená jako testing (není to pravidlem), a pokud vše probíhá bez problémů, tak je brzo označena jako stable. Tento proces je samozřejmě invidivuální – programy jako gcc se musí poměrně dlouho testovat, než „přejdou“ do stable.
masked
V souboru /usr/portage/profiles/package.mask
(všimněte si, že je v portage stromu) je seznam ebuildů, které jsou tzv. maskovány (masked). Je to především upozornění na to, že něco není v pořádku – bezpečnostní chyba, vývojová verze, je problematický, potřebuje otestovat apod. U každého záznamu je popsáno, z jakého důvodu.
SLOT
Není výjimkou případ, kdy existují různé verze knihovny, u kterých je potřeba mít najednou v systému obě verze. Např. grafická knihovna gtk, u níž hodně aplikací využívá postarší jedničkovou řadu a novější aplikace už jedou na dvojkové. Ve většině distribucí se to řeší pomocí různých názvů – např. libgtk1 a libgtk2. V Gentoo to řeší tzv. SLOTy. Ve všech verzích jedničkové řady gtk je v ebuildu zapsáno SLOT=1
a analogicky u dvojkové řady SLOT=2
. Pointa je v tom, že z každého SLOTu může být nainstalována jedna verze. Dobře je to vidět např. z výpisu etcat -v gtk+
(etcat získáte – emerge gentoolkit
)
virtual
V závislostech si občas můžete všimnout, že něco závisí na programu v kategorii virtual, např. virtual/alsa, virtual/x11 apod. V Linuxu se často setkáváme s tím, že máme více programů, které vykonávají stejnou nebo podobnou činnost – dobrým příkladem jsou poštovní servery. Pokud nějaký program potřebuje ke své práci poštovní server, je mu jedno, jestli je to postfix, sendmail, nebo exim. V Gentoo je to řešeno pomocí kategorie virtual. Pokud máte např. nainstalovaný postfix a instalujete balíček závisející na virtual/mta, je závislost splněna a vše je v pořádku. Nemáte-li nainstalovaný žádný poštovní server, nainstaluje se výchozí, který je zapsán v příslušném instalačním profilu – společné pro všechny profily jsou v /usr/portage/profiles/base/virtuals
a ostatní podle architektury např. /usr/portage/profiles/ default-linux/x86/virtuals
. U virtual/mta je to např. mail-mta/ssmtp.
Syntaxe
Vydáme se názornou cestou a ukážeme si několik příkladů, jak můžeme při práci s emerge určit ebuild a jeho verzi.
U většiny operací si vystačíme s tím nejjednodušším zápisem, kde uvedeme pouze jméno programu (1). Problém může nastat, pokud má více programů v portage stejný název. Emerge nás upozorní a zobrazí nám jednotlivé možnosti (např. dev-libs/aterm a x11-terms/aterm). Pokud jsme chtěli nainstalovat terminál, jednoznačně ho identifikujeme pomocí kategorie(2). V novém portage (2.0.51) je nutné v /etc/portage/*
vždy uvádět kategorii. Pokud potřebujeme identifikovat konkrétní verzi balíčku, využijeme zápisu s „=“ (3), verze musí být samozřejmě dostupná v portage. K dispozici jsou i další operátory (4)(5), myslím, že jejich význam je zřejmý. Poslední, co nám emerge dává k dispozici, je dobře známá hvězdička (6) – v příkladu označuje knihovnu qt verze 3.2.3 včetně všech revizí (3.2.3-r1 apod.).
emerge mplayer (1)
emerge x11-terms/aterm (2)
=media-video/nvidia-glx-1.0.5336-r2 (3)
<=x11-wm/fluxbox-0.9.10 (4)
>=media-video/nvidia-kernel-5328-r1 (5)
=x11-libs/qt-3.2.3* (6)
/etc/portage
Adresář /etc/portage
zastřešuje několik užitečných konfigů. Nemáte-li /etc/portage
, rychle napište mkdir /etc/portage
. Kompletní výčet a popis všech možných souborů najdete v manuálových stránkách k portage. Podíváme se jen na ty nejdůležitější a nejpoužívanější.
package.use
V make.conf
jste si během instalace a následného používání postupně vyladili USE podle svých představ. Mimo jiné máte zapnuté gtk, ale u mplayeru nepoužívate grafickou nadstavbu a chcete si ho zkompilovat bez gtk nadstavby. Co s tím? Nabízí se několik možností. Dočasně v make.conf
gtk vymazat a nainstalovat mplayer – ale je to pracné a při upgradu mplayeru na to snadno zapomenete. Další možnost (často vídaná) je upravit USE na příkazovém řádku, USE=-gtk emerge mplayer
– tím jsme získali efektivní zápis, ale pořád je na nás, abychom si tuto výjimku pamatovali. Emerge nám umožňuje tento fakt zapsat do souboru package.use
(1), odkud si ho při každé akci přečte. Nejrychlejší způsob, jak tuto informaci dostat do package.use
, vidíte v dalším příkladu (2). Dejte si ale pozor, abyste neměli v package.use
víckrát uveden jeden program – bere se v úvahu jen poslední záznam. Samozřejme můžete využít pravidel z kapitoly o syntaxi (3) a toto nastavení určit jen pro konkretní verzi.
media-video/mplayer -gtk -gtk2 network aalib (1)
echo "media-video/mplayer -gtk -gtk2 network aalib" >> /etc/portage/package.use (2)
=media-video/mplayer-1.0_pre5-r2 -gtk -gtk2 network aalib (3)
package.keywords
Z proměnné ACCEPT_KEYWORDS
se emerge dozví, které keywordy může akceptovat při instalaci programů. Standardně je po instalaci ACCEPT_KEYWORDS
nastavena na příslušnou architekturu (stable) – např. ACCEPT_KEYWORDS=ppc
. V souboru /etc/make.profile/make.defaults
se o tom můžete přesvědčit. Pokud napíšete ACCEPT_KEYWORDS=~x86
do /etc/make.conf
, budou se instalovat i testing ebuildy. Osobně to nedoporučuji, protože si s tím naděláte zbytečné problémy. Pokud chcete mít u nějakého programu neustále nejnovější verzi, můžete nastavit keywordy pro konkrétní program. K tomu, jak už tušíte, slouží package.keywords
, u kterého platí stejné zákonitosti jako u package.use
. Pokud byste nainstalovali program pomocí ACCEPT_KEYWORDS=~x86 emerge program
, tak se vám sice nainstaluje testing mplayer, ale opět vzniká problém při upgradu, protože by emerge chtělo downgradovat mplayer, aby si odpovídalo nastavení keywordů.
Stačí zapsat do package.keywords
(1), že u mplayeru se má akceptovat i keyword ~x86 (2) a bude se instalovat vždy poslední testing verze. Pokud neuvedeme žádný keyword (3), je to ekvivalentní předchozímu případu, protože v package.keywords
je testing keyword výchozí. Možná se budete chtít držet co nejvíce stabilních (otestovaným) ebuildů, abyste se vyhnuli potížím, ale v testing verzi bude nějaká vlastnost, kterou potřebujete, tak si můžete ~x86 přiřadit jen pro konkrétní verzi (4) a k dalšímu upgradu dojde, až bude k dispozici nová stabilní verze.
echo "media-video/mplayer ~x86" >> /etc/portage/package.keywords (1)
media-video/mplayer ~x86 (2)
media-video/mplayer (3)
=media-video/mplayer-1.0_pre5* ~x86 (4)
package.unmask
Jak už název napovídá, je to naše obrana proti /usr/portage/profiles/package.mask
. Emerge
nám při pokusu o instalaci zamaskovaného programu vypíše, z jakého důvodu je maskovaný. Pokud jej přesto chcete odmaskovat, stačí jednoduše zapsat (1) do package.unmask
.
echo "app-office/mozilla-sunbird-bin" >> /etc/portage/package.unmask (1)
package.mask
Tento soubor nejčastěji využijete, pokud chcete mít nainstalovanou konkrétní verzi nějakého programu, nebo naopak, pokud se chcete nějaké verzi vyhnout. /etc/portage/package.mask
funguje stejným způsobem jako /usr/portage/profiles/package.mask
s tím rozdílem, že je určen pro vaše potřeby. O pár odstavců výše jsme si říkali, že konkrétní verzi můžete nainstalovat pomocí emerge =program-verze
, ale emerge si tuto informaci nepamatuje a při upgradu dochází k problému stejného charakteru jako u USE
a KEYWORDS
. Emerge bude chtít nainstalovat nejnovější verzi, kterou mu KEYWORDS
umožňují. Potřebujeme nějakým způsobem zakázat instalaci novější verze, než kterou chceme – zamaskujeme všechny novější verze (1)! Osobně obvykle doufám, že daný problém bude vyřešen v další verzi, tak maskuji jen tu problematickou (2) verzi a ve chvíli, kdy se v portage objeví nová, dojde k upgradu.
echo ">=media-video/mplayer-1.0_pre5" >> /etc/portage/package.mask (1)
echo "=media-video/nvidia-glx-1.0.6106*" >> /etc/portage/package.mask (2)