Zrychlení emerge --sync TIP

Z Gentoo Linux Wiki

Přejít na: navigace, hledání

Obsah

[editovat] image:Popis.png Ú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] image:instalace.png 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] image:problemy.png 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
V jiných jazycích