Zrychlení emerge --sync TIP
Z Gentoo Linux Wiki
Obsah |
[editovat]
Úvod
Tento článek vysvětluje jak vyjmout kategorie ebuildů při emerge --sync a tak ušetřit čas a objem stažených dat jak sobě tak serveru.
[editovat]
Nastavení synchronizace
Při synchronizaci stromu Portage používá portage prográmek s názvem rsync. Jeho účelem je synchronizovat skupinu souborů mezi vaším počítačem a serverem. Když chceme určit výjimku z této skupiny můžeme to učinit dvěma způsoby :
- --exclude=VÝJIMKA – tento způsob se používá když máme jen malý počet kritérií.
- --exclude-from=SOUBOR – zohledňuje soubor kritérií. Tento postup je doporučován a my se tímto způsobem budeme dále zabývat.
[editovat] Pravidla pro psaní souboru
Soubor kritérií je normální textový soubor s několika možnostmi.
- Na každý řádek píšeme jednu výjimku. Může to být název kategorie, adresáře či ebuildu, který se má vynechat při synchronizaci.
- Výjimky začínající "/" lomítkem se vztahují k adresáři, který je synchronizován (v našem případě /usr/portage) a ne k souborovému systému ve vašem počítači.
- Znaky "*" a "?" mají stejný význam jako v shellu.
- Dvě hvězdičky za sebou "**" doplňují jakékoli znaky v celé hloubce, kdežto jedna doplňuje znaky jen do následujícího lomítka "/".
- Názvy začínající "+" jsou bílé výjimky z naší černé listiny. Po znaménku "+" musí následovat mezera. Tyto výjimky musí být před svými kategoriemi (vysvětleno dále).
[editovat] Psaní souboru
Ve vašem oblíbeném textovém editoru vytvořte soubor /etc/portage/rsync_excludes. Při psaní musíte dávat pozor, abyste nevyjmuli ebuildy k programům nainstalovaných ve vašem počítači. K tomu nám pomůže se podívat do /var/db/pkg, kde najdete uspořádaný seznam vašich nainstalovaných součástí ve stylu stromu Portage. Pro názornost si uvedeme příklad :
| Soubor: /etc/portage/rsync_excludes |
+ eclass** # tento řádek je nezbytný pro spravné fungování emerge xfce* kde* # jsem uživatel Gnome games* # moc si nehraji media-radio media-tv sys-cluster # nemám rádio ani televizní kartu ani cluster gnustep-* sci-* rox-* |
Pokud bych však měl nainstalován vypalovací program K3B musel by zápis vypadat takhle :
+ kde-base/kde-env* + kde-base/kdelibs* kde-base/*
K3B má mimo jiných závislostí i kde-env a kdelibs z kde-base proto je musíme z této kategorie vyjmout. Tyto výjimky musí stát vždy před kategorií ze které jsou vyjímány.
[editovat] Co určitě ponechat
V adresáři /usr/portage byste určitě měli nechat adresáře pro správné fungováni Portage a celého systému. Jsou to tyto :
- /eclass
- /metadata
- /profiles
- /scripts
Pro jistotu je můžete přidat na začátek našeho souboru k již zmíněnému "+ eclass**".
+ eclass** + metadata** + profiles** + scripts**
[editovat] Testování
Po uložení souboru můžeme začít testovat. Vytvoříme si testovací adresář /root/portagetest a jako root zadáme následující příkaz :
# rsync -av --exclude-from=/etc/portage/rsync_excludes /usr/portage/ /root/portagetest
Tento příkaz synchronizuje váš strom Portage (/usr/portage) do testovacího adresáře (/root/portagetest) a zohlední přitom výjimky ze souboru (/etc/portage/rsync_excludes). Pokud se vám výsledek nelíbí poupravte soubor s výjimkami, smažte obsah testovacího adresáře a test opakujte.
[editovat] Nastavení v make.conf
Aby nám toto fungovalo i při příkazu emerge --sync musíme přidat do /etc/make.conf tento řádek :
Pro portage verze 2.1 a vyšší :
PORTAGE_RSYNC_EXTRA_OPTS="--exclude-from=/etc/portage/rsync_excludes"
Pro nižší verze :
RSYNC_EXCLUDEFROM=/etc/portage/rsync_excludes
[editovat] Vyčištění stromu Portage
Pokud si nechcete na disku ponechat skupiny ebuildů které jste vyjmuli, můžete je jednoduše smazat.
Třeba takhle :
| Smazání všech vynechaných kategorií |
#!/bin/sh
PORTDIR=`portageq portdir`
for DIR in `grep "^[^#]" /etc/portage/rsync_excludes | grep "^[^+]"`;
do
DIR="${PORTDIR}/${DIR}"
read -p "rm -r "${DIR}" ? [aN]: " POTVRD
if [[ ${POTVRD} == "a" ]]
then
rm -r ${DIR};
fi
done
emerge --sync
|
Smázne i chtěné - emerge --sync je následně stáhne.
V anglické verzi textu je ještě uváděn perlový skript (bere v úvahu pouze kategorie - ne adresáře balíčku apod):
perl -e 'while(<>) { chomp; s"/$""; print `find /usr/portage -wholename \*/$_ | xargs rm -rf ` unless /^#/; }' /etc/portage/rsync_excludes
[editovat]
Pomůcky
Pokud chcete sledovat změny v portage, pak můžete použít místo
emerge --sync
příkaz
esync
který po aktualizaci zobrazí všechny změny od vaší poslední synchronizace.
Pro úspěšné splnění tohoto příkazu musíte mít nainstalovaný balík app-portage/esearch.
# emerge esearch # eupdatedb
