Swaret (2) - lokálne repozitáre

24.03.2006 14:58 | Články | Eduard Drusa
Minule sme si ukázali, ako využiť nástroj Swaret na zjednodušenie inštalácie balíkov v Slackware Linuxe. V prípade, že máme potrebu aktualizovať viacero počítačov naraz, je však tento postup nevhodný, pretože zaťažuje sieť a vyžaduje vykonávanie rovnakého postupu na viacerých počítačoch. Tento nedostatok sa dá riešiť pomocou doplnku swaret-tools.

Swaret-tools je sada nástrojov, ktoré umožňujú vytvoriť a spravovať lokálny repozitár. Lokálny repozitár môže slúžiť pre potreby lokálnej siete, alebo môže byť verejne prístupným repozitárom. Zavedením lokálneho repozitára možno znížiť množstvo prenášaných dát potrebných na aktualizáciu viacerých staníc, vzniká možnosť automatickej aktualizácie a v neposlednom rade získavame kontrolu nad tým, čo sa kde inštaluje.

Čo potrebujeme?

Ak už máme na počítačoch, ktoré by sme chceli upgradovať z lokálneho repozitára, Swaret, musíme sa len rozhodnúť, ktorý z týchto počítačov premeníme na lokálny repozitár. Obvykle je to hlavný sieťový server, alebo počítač s najlepšou konektivitou v rámci siete. Na vytvorenie lokálneho repozitára na tomto počítači budeme potrebovať balík nástrojov swaret-tools a spôsob, ktorým budeme obsah tohto repozitára poskytovať na sieti. Môže to byť FTP, Samba, alebo NFS. Swaret si rozumie so všetkými menovanými. Balík swaret-tools sa dá získať na domovskej stránke projektu Swaret, v sekcii Download. Swaret-tools na rozdiel od samotného Swaretu nie sú natívnym balíkom pre Slackware Linux, takže nie je možné inštaláciu vykonať nástrojom pkgtool, ani samotným Swaretom. Najjednoduchším spôsobom, ako swaret-tools nainštalovať, je vybaliť obsah stiahnutého súboru do dočasného adresára a následne spustiť skript install. Na tento úkon je potrebné mať práva root-a, pretože swaret-tools sa inštaluje do systémových adresárov. Po inštalácii vzniknú dva nástroje: libmaker a repos. Nástroj repos slúži na generovanie všetkých súborov, ktoré sú potrebné pre korektnú použiteľnosť repozitára, zatiaľ čo nástroj libmaker slúži na zrýchlenie podpory riešenia závislostí.

Zakladáme repozitár

Lokálny repozitár nie je vlastne nič viac, než po sieti prístupný adresár, ktorý obsahuje súbory, ktoré umožňujú jeho použitie Swaretom. Swaret sa pri používaní repozitára spolieha na nasledovné súbory:

  • CHECKSUMS.md5
  • FILELIST.TXT
  • PACKAGES.TXT
  • MANIFEST.bz2

Tieto súbory možno nájsť ako na inštalačných médiách, tak aj na mirroroch oficiálneho FTP Slackware Linuxu. Obsahujú popis balíkov, ktoré sa v repozitári (na médiu) nachádzajú. V prípade, že niektorý zo súborov CHECKSUMS.md5, alebo FILELIST.TXT chýba v koreňovom adresári repozitára, repozitár sa stáva nepoužiteľným. Súbory PACKAGES.TXT a MANIFEST.bz2 nie sú životne potrebné, avšak ak ich repozitár neobsahuje, Swaret stráca časť svojej funkčnosti. Súbor PACKAGES.TXT obsahuje popisy balíkov, ktoré sa v repozitári nachádzajú. Swaret dokáže tieto popisy zobrazovať, alebo v nich vyhľadávať. Súbor MANIFEST.bz2 je dôležitý pri riešení závislostí, nakoľko obsahuje zoznam súborov zahrnutých v jednotlivých balíkoch a umožňuje Swaretu zistiť, v ktorom balíku môže nájsť knižnicu, ktorá je potrebná pre korektný beh inštalovaného programu. V prípade, že tento súbor v repozitári chýba, Swaret nie je schopný nájsť balík obsahujúci vyžadovanú knižnicu. Repozitár ako taký nemá nič spoločné s nástrojom Swaret. Swaret do repozitára nevie automaticky ukladať stiahnuté balíky, ani ho po inštalácii nového balíka automaticky aktualizovať. Absencia tejto funkcie je daná tým, že repozitári sa nemusia nachádzať nutne len balíky stiahnuté pomocou Swaretu, ale napríklad aj iné balíky pre Slackware Linux.

Súbory, ktoré sú pomocou Swaretu inštalované do systému sú uložené v adresári /var/swaret, odkiaľ môžu byť premiestnené do repozitára.

Prvým krokom pri vytváraní repozitára je zvoliť si vhodne miesto pre jeho uloženie. Je potrebné dbať na to, že repozitár môže časom zaberať veľa miesta. Ak na zväzku dôjde miesto, môže sa stať, že celý repozitár sa stane nefunkčný z dôvodu neschopnosti vygenerovať potrebné súbory popisujúce repozitár. Ďalej je nutné tento priečinok sprístupniť zo siete. V Slackware Linuxe sa ako najjednoduchšie riešenie javí použitie FTP, nakoľko sa už v systéme nachádza a jedná sa o stabilnú službu. Nie je na škodu uviesť na konci názvu adresára obsahujúceho repozitár aj číslo verzie, pre ktorú je repozitár určený. Umožní to neskôr viesť viacero repozitárov pre rôzne verzie Slackware Linuxu na jednom repozitárovom serveri. Ja som si ako názov repozitára zvolil /var/repos/slackware-10.2.

Štruktúra adresárov vo vnútri repozitára je čisto na tom, kto repozitár zakladá, ale v prípade, že má repozitár slúžiť verejne, je vhodné dodržať adresárovú štruktúru podobnú adresárovej štruktúre oficiálnych repozitárov Slackware Linuxu. Pri vytváraní repozitára nie je vôbec nutné ukladať všetky balíky do koreňového adresára repozitára, ale je možné vytvárať podadresáre. Nástroj repos prechádza repozitár rekurzívne počas jeho katalogizácie. Je vhodné balíky roztriediť minimálne podľa typu aplikácie, alebo na upgrady, patche a iné.

Keď je repozitár a jeho štruktúra hotová, je možné ho naplniť balíkmi. Balíky možno získaľ mnohými cestami. Prvou z nich je stiahnutie z oficiálneho FTP Slackware Linuxu, ďalej je možné balíky stiahnuť voľne z internetu, alebo možno balík získať zo Swaretu. Pri pomenovaní súborov v repozitári je nutné (aj keď by sa to nemuselo zdať) pomenovať všetky balíky v súlade s konvenciami názvov balíkov pre Slackware Linux. Samotný nástroj repos vám vytvorí katalóg repozitára aj v prípade, že budete použivať atypické názvy, ale to je najrýchlejšou cestou k problémom pri upgrade a zisťovaní nových verzii. Preto je nutné sa držať konvencie, ktorá hovorí, že názov súboru by mal vyzerať nasledovne:

nazovbalika-verzia-architektura-build.tgz

nazovbalika a verzia určujú všeobecný názov balíka a jeho verziu. Architektura určuje, pre aku architektúru bol balík zostavený. Oficiálne balíky Slackware Linuxu sú vždy zostavované pre architektúru i486, preto každý balík obsahujúci binárne súbory nesie označenie -i486-. V prípade, že balík neobsahuje žiadne binárne súbory (jeho obsahom môžu byť zdrojové kódy, alebo skripty), použije sa miesto označenia architektúry slovo noarch, označujúce platformnú nezávislosť. Build označuje, o ktorú revíziu balíka ide. V prípade, že autor balíka narazí na chybu v jeho zostavení, môže vydať revidovaný build balíka bez toho, aby sa musela zvýšíť verzia programu. Zvýši sa číslo buildu a tým je možné odlíšiť ho ako revíziu balíka. Pri neoficiálnych repozitároch sa za číslo revízie zvykne pridávať aj niekoľkoznaková skratka autora balíka.

Vytvárame katalóg repozitára

Posledným krokom pre zostavenie repozitára je použitie nástroja repos na skatalogizovanie vytvoreného repozitára. Nástroj repos vytvorí všetky súbory potrebné na úspešné používanie repozitára. Pred jeho prvým použitím je ho však nutné nastaviť. Nastavenia nástroja repos sa ukladajú v súbore /etc/repos.conf. Obsahuje niekoľko nastavení, ktoré je potrebné špecifikovať.

REPOSDIR
Určuje cestu k štandardnému (default) repozitáru. V prípade, že v celom systéme máme len jeden repozitár, je potrebné ho uviesť sem, v prípade, že máme viacero repozitárov, primárny uvedieme do konfiguračného súboru a ostatné budeme špecifikovať z príkazového riadka.

REPOSTMP
Určuje cestu k dočasným súborom. Obvykle stačí uviesť /tmp.

QUIET
Určuje, či bude nástroj repos podávať hlásenia o svojej činnosti na štandardný výstup. V zásade nemá zmysel mať tieto správy zapnuté, pretože sa nič užitočného nedozviete. Pre potreby logovania sa však dajú hlásenia presmerovať do súboru pre neskoršie využitie. Ak chceme repos umlčať, nastavíme hodnotu tejto premennej na 1.

PARTIAL
V prípade, že túto premennú nastavíme na 1, bude repos iba skenovať pridané súbory, ktoré pridá do katalógu. Nebude zisťovať, či niektoré súbory z katalógu neboli odstránené. Užitočné pre repozitáre, ktoré sa nezbavujú starších verzií balíčkov. Pre takéto repozitáre zvolenie tejto možnosti urýchli vytvorenie katalógu.

EXPRESS
Umožňuje použitie súborov PACKAGES.TXT a MANIFEST.bz2 z iného zdroja. Užitočné v prípade, ak zakladáme mirror iného repozitára a máme zhodné balíky. Cestu ku vygenerovaným súborom určujú voľby PACKAGEFILE a MANIFESTFILE.

Pri prvotnom vytváraní repozitára treba voľbu PARTIAL nastaviť na 0 a správne uviesť cestu k repozitáru (v mojom prípade /var/repos/slackware-10.2). Ak je všetko nastavené správne, možno spustiť katalogizáciu repozitára.

# repos

Po chvíli behu nástroja repos (čas je silne závislý na počte a veľkosti balíkov a v prípade veľkých repozitárov sa môže pohybovať aj v rádoch minút) vzniknú v koreňovom adresári repozitára štyri súbory obsahujúce katalóg. Navyše však vznikne aj súbor libraries-repository. Čo tento súbor obsahuje? V prípade, že Swaret narazí na chýbajúce knižnice počas inštalácie balíka, hľadá v repozitári práve tento súbor. Súbor obsahuje informácie o tom, aké knižnice obsahujú jednotlivé balíky. V prípade, že po skončení katalogizácie repozitára je tento súbor prázdny, nemusí to znamenať, že katalogizácia zlyhala. Mohlo sa stať, že ani jeden balík v repozitári neobsahuje žiadne knižnice. Tento súbor nie je Swaretom požadovaný, avšak je dobré ho v repozitári mať, nakoľko výrazne urýchli riešenie závislostí balíkov.

Po ukončení katalogizácie je repozitár pripravený k práci. Je nutné k nemu umožniť prístup pomocou FTP, Samby, alebo NFS. V prípade FTP je možné použiť anonymný aj neanonymný prístup.

Nastavenie klientov

Klientské počítače je nutné nastaviť na spoluprácu s novým repozitárom. To sa vykonáva v konfiguračnom súbore samotného Swaretu, ktorým je obvykle /etc/swaret.conf. Nový repozitár sa dá určiť direktívou REPOS_ROOT napríklad takto:

REPOS_ROOT=Local%ftp://192.168.0.1/pub/repos/slackware-10.2

Je nutné dbať na to, aby direktíva REPOS_ROOT neobsahovala premennú $VERSION, nakoľko nedôjde k jej interpretácii. REPOS_ROOT musí určovať cestu ku koreňovému adresáru repozitára.

Ak plánujeme na klientskom počítači využívať iba služby nášho lokálneho repozitára, je vhodné odstrániť všetky ostatné direktívy REPOS_ROOT a ROOT.

Následne je nutné spustiť aktualizáciu katalógov repozitárov na klientskom počítači príkazom:

# swaret --update

V tomto momente je klientský počítač pripravený na používanie lokálneho repozitára.

Udržiavanie repozitára

Repozitár, ktorý sme vytvorili, je určite užitočný. Avšak repozitár, ktorý sa neudržuje aktuálny, časom stráca svoj zmysel. Preto je nutné repozitár dopĺňať o nové balíky, aktualizácie a patche z iných zdrojov. Pri každom doplnení je nutné znova spustiť nástroj repos, ktorý vytvorí katalóg repozitára. Ak však do lokálneho repozitára iba pridávame balíky, je možné významne redukovať čas potrebný na vytvorenie katalógu repozitára nastavením voľby PARTIAL na hodnotu 1. To spôsobí, že repos bude hľadať iba nové balíky.

Je nutné dbať aj na to, aby boli aktuálne tieto katalógy aj na klientských počítačoch. Je vhodné do cronu umiestniť vykonávanie príkazu swaret --update na dobu, kedy počítač nie je veľmi využívaný, alebo pred každým volaním Swaretu ručne upgradovať katalógy na klientskom počítači.

Vykonávanie masovej automatickej aktualizácie systému

V prípade, že sa v sieti nachádza veľké množstvo počítačov, je určite nemysliteľné, aby sa aktualizácia robila ručne na každom z nich, hoci by sa aktualizácia vykonávala z lokálneho repozitára pomocou vzdialeného terminálu. Existuje však spôsob, ako pomocou lokálnych repozitárov túto úlohu plne automatizovať.

Predpokladom je vytvorenie dobre štruktúrovaného repozitára a pravidelné obnovovanie katalógu repozitára, ktorý bude obsahovať len balíky, ktoré chceme automaticky aktualizovať. Princíp spočíva v tom, že ak sa v repozitári nájde balík s vyšším číslom verzie, alebo vyšším číslom buildu (pričom verzia má prednosť pred buildom), počas upgrade systému bude automaticky stiahnutý a nainštalovaný. Takto je možné vytvárať repozitáre, ktoré budú obsahovať iba aktualizácie. Následne je možné nechať cronom každý deň (alebo v inom, vhodnejšom intervale) vykonať príkazy:

#swaret --update
#swaret --upgrade -a

Ak je na počítači v konfigurácii Swaretu uvedený len jeden lokálny repozitár, spôsobí to inštaláciu všetkých updatov z tohto repozitára, ktorého obsah môžeme kontrolovať.

Záver

Ukázali sme si, ako možno Swaret, ktorý je nesporne mocným nástrojom na aktualizáciu operačného systému Slackware Linux, premeniť s pomocou balíka nástrojov swaret-tools na mocný nástroj pre aktualizáciu počítačovej siete obsahujúcej viacero staníc s operačným systémom Slackware Linux. S pomocou nástrojov, ako sú cron a wget sa môže Swaret premeniť naozaj na veľmi výkonný nástroj správy operačného systému.

Keďže sa všeobecný popis Swaretu a práce s ním blíži k záveru, rozhodol som sa tretí diel napísať s ohľadom na vašu odozvu a chcel by som odpovedať na otázky, ktoré vás zaujímajú, poprípade vzať do úvahy vaše návrhy na doplnenie článku. Otázky môžete klásť do diskusie pod článkom, najčastejšie kladené otázky a návrhy sa pokúsim v nasledujúcom dieli doplniť a zodpovedať.

Seriál

    • Pochvala 27.03.2006 | 18:12
      Muse   Návštevník
      Super seriál, vďaka.
    • Slapt-get vs swaret 02.04.2006 | 00:34
      Martin   Návštevník
      Zaujímalo by ma možno porovnanie medzi slapt-get a swaretom, nejaký výpočet kladov a záporov.
    • moc to nepotrebujem 04.04.2006 | 19:48
      ops   Návštevník
      dobre, ale ja to pravdepodobne nebudem potrebovat
      • Re: moc to nepotrebujem 08.04.2006 | 22:06
        NIL   Návštevník
        A prave na teba cakali! Navrhujem zmazat clanok, pretoze pre dotycneho nadomnou je to nepotrebne.