Existuje řada míst, kde se v jedné síti najde víc počítačů s jedním stejným nebo velmi podobným operačním systémem. Ať už to jsou firmy, školy nebo domácnosti, v každém případě by v takové situaci docházelo k duplicitnímu stahování dat a tím zdržování uživatelů a zatěžování linek.
V takové situaci asi napadne každého administrátora: Proč vlastně stahovat při aktualizaci ty balíčky pětkrát (nebo pětsetkrát)? Samozřejmě ho zároveň napadne udělat si místní zrcadlo, ze kterého pak budou koncové stanice stahovat balíčky rychlostí blesku a nebudou vytěžovat linku a servery distributora.
Zrcadlo, zrcadlo, kdo je na světě nejdebianovatější?
Klasické zrcadlo je příjemné v tom, že obsahuje všechny balíky z centrálního repositáře, které by uživatel mohl chtít. Bohužel to ale znamená, že je třeba mu vyhradit 40 GB místa pro každou architekturu a verzi systému. Pokud tedy v síti máme Debian, Ubuntu, Mint, to vše v 32 a 64 bitových verzích a ještě různého stáří, narůstá celková velikost zrcadla do obřích velikostí.
Dalším problémem je, že pak ty stovky gigabajtů dat musíme udržovat, pravidelně se nám tak stahují aktualizace ke všemu, co v repositářích je. Výsledek je pak ten, že uživatelé 80 % těchto balíčků nikdy nevyužijí. Já například používám asi 6 % balíčků z Debianu. Zbytek by na kompletním zrcadle ležel zbytečně.
Keš! Á áá! Saviour of the Universe…
Řešením je kešovací server, který namísto kompletního repositáře se všemi balíky udržuje jen ty soubory, které už předtím některý z klientů stahoval. Server funguje jako proxy a okamžitě vyřizuje všechny požadavky na stažení balíčků, které si navíc ukládá pro pozdější použití. První klient, žádající o konkrétní balíček, jej tak dostává stejnou rychlostí, jako by jej stahoval přímo z internetu. Všichni ostatní pak stahují jen po lokální síti. Výsledkem je menší zátěž na linku i na disky serveru, protože se v nich udržuje jen několik gigabajtů balíčků pro každý repositář. Výhodou také je, že jeden server může obsloužit všechny distribuce používající deb balíčky – Debian, Ubuntu, Mint a další.
Další nespornou výhodou je univerzálnost takové keše. Zatímco klasická lokální zrcadla udržují jen balíčky z předem zvolených serverů, keš umí stáhnout balíčky odkudkoliv. Pokud tak většina uživatelů využívá například repositář Medibuntu, nemusí s tím správce keše nijak předem počítat a vše bude správně fungovat.
Implementací takového serveru je samozřejmě celá řada: dříve byl v Debianu balíček apt-proxy
, který je ale s vydáním Squeeze považován za zastaralý. Místo toho můžete využít approx
, apt-cacher
nebo apt-cacher-ng
. Já jsem si vybral poslední zmíněný, protože klasický apt-cacher je podstatně náročnější na systémové zdroje a mimo jiné má v závislostech asi patnáct různých knihoven. Apt-cacher-ng vznikl jako jeho odlehčená náhrada. Umí totéž, ale je výrazně menší a jednodušší.
Já na server, keš na mě
Zprovoznění samotného serveru na síti je velmi jednoduché. Na požadovaném stroji stačí nainstalovat příslušný balíček:
$ sudo aptitude install apt-cacher-ng
Konfigurační soubor najdete v adresáři /etc/apt-cacher-ng/acng.conf
. V něm můžete nastavit, do jakého adresáře si bude server ukládat nakešované soubory, kam bude logovat nebo na jakém portu poběží. Je také možno nastavit, po kolika dnech (standardně čtyřech) se z keše smaže soubor, na který už neodkazuje žádný index soubor na serverech. Tyto hodnoty můžete s klidem nechat v přednastaveném stavu.
Já jsem měl při prvním nastavování serveru problém se zapnutým remapingem repositářů. Ten umí upravovat cesty dle požadavků admina serverů. Bohužel v předinstalovaném konfiguračním souboru mi příklady rozbíjely cesty a nefungovalo to. Doporučuji proto příslušnou pasáž v souboru zakomentovat.
Teď ještě zbývá nastavit klienty, aby proxy využívali. Existují dvě možnosti: buďto můžete změnit URL všech repositářů, nebo stačí na jednom místě zapnout využívání proxy. Zvolil jsem pohodlnější druhou možnost. V adresáři /etc/apt/apt.conf.d/
stačí vytvořit soubor 01proxy
(nebo podobně) a do něj zapsat:
Acquire::http { Proxy "http://192.168.1.107:3142"; };
IP adresu samozřejmě upravte, port je standardně nastaven na 3142
. Pokud používáte Synaptic, upravte si jeho nastavení. Stačí navštívit Nastavení → Nastavení → Síť a zapnout proxy.
Použití a statistiky
Od této chvíle stačí normálně používat balíčkovací systém tak, jak jsme zvyklí. Vše by mělo normálně fungovat, při stahování balíčků byste si měli jen všimnout, že se stahují z lokálního serveru plnou rychlostí sítě.
Apt-cacher-ng má ještě další zajímavou vlastnost – umožňuje přes webové rozhraní nastavovat několik drobností, ale především zobrazovat statistiky o svém provozu. Do webového prohlížeče stačí zadat IP adresu serveru s příslušným portem (3142). Dozvíte se, jak máte nastavit klientské stanice a na konci výpisu narazíte na odkaz na statistiky.
Ten standardně vede na acng-report.html
, kde si můžete nechat spočítat, jak úspěšný server je, kolik požadavků obsloužil z keše a kolik vám ušetřil dat na lince. Navíc zde můžete nastavovat detaily chování expirace balíčků či naimportovat balíčky z jiných systémových adresářů. Toto rozhraní je možné chránit heslem, které zapíšete do souboru /etc/apt-cacher-ng/security.conf
.
Jednoduché a funkční
Výhodou tohoto přístupu je, že je naprosto nenáročný a přitom je velmi efektivní. Instalace serveru trvá pár minut a kromě méně zatížené linky získáte také nadšené uživatele, kterým aktualizace pojedou jako po másle. Mít vlastní apt kešovací server se vyplatí už při dvou počítačích v jedné domácnosti, které používají stejný systém. Tedy za předpokladu, že vám doma běží nějaký ten servřík. Pro firmy a školy je to naprostá nezbytnost.