Kategória: Debian Linux

Zmenené: 1. apríl 2012

Úložisko balíkov – reprepro

Už dosť dávno som tu zverejnil postup na vytvorenie vlastného (lokálneho) úložiska balíkov Vlastné úložisko balíkov. Spomínaný postup už dlhšiu dobu nepoužívam, pretože po objavení nástroja reprepro ho považujem za zbytočne pracný, tak poskytujem návod nový.

Motivácia

Pýtate sa načo to je dobré? No, ak nepoužívate ani jeden balík, ktorý nie je v žiadnom úložisku (repositary), či už oficiálnom alebo nie, asi lokálne úložisko nepotrebujete. Ak však používate takýchto balíkov viac, iste viete, že sa tieto balíky v správcovi balíkov (aptitude) objavujú v samostatnej časti, označenej Zastarané a lokálne vytvorené balíky. Podľa mňa je táto časť zvolená nešťastne, pretože nerozlišuje, či je to balík, ktorý z distribúcie vypadol alebo v nej nikdy nebol, ale faktom je, že systém balíkov v Debiane nemá možnosť tieto dva stavy rozlíšiť. Ako môžete sami vidieť na nasledujúcom obrázku, tých balíkov môže byť viac a najmä vo vetvách testing, či unstable (kde je pohyb balíkov značný), to môže spôsobovať chaos:

Zastarané a lokálne balíky v aptitude

Práve vytvorením lokálneho úložiska si tieto dva stavy rozlíšite, pretože v spomenutej časti ostanú naozaj len zastarané balíky, čo poskytne jednoduchú možnosť pátrať po tom, prečo balík zastaral (a prípadne hľadať náhradu).

Ďalej v článku popíšem vytvorenie lokálneho úložiska, jeho podpísanie, prácu s ním i jeho zahrnutie do systému APT, a to všetko pomocou nástroja reprepro, ktorý používam aj na správu môjho verejného úložiska, len s trošku pokročilejším nastavením, pretože obsahuje dve distribúcie, dve architektúry i dve vetvy…

Vytvorenie úložiska

Samotné vytvorenie úložiska pozostáva z niekoľkých krokov, ktoré považujem za jasné a priamočiare.

Vytvorenie adresára

Začnite tým, že si niekde v systéme pripravíte adresár, kde bude úložisko napĺňané balíkmi. Ja na tento účel používam adresár /usr/src/localrepo, ale nikto neurčuje kde to má byť a pokojne môžete použiť aj adresár v domovskom adresári. Takže, prvý krok je vytvorenie spomínaného adresára a vstúpenie do neho:

mkdir /usr/src/localrepo
cd /usr/src/localrepo

Nastavenie úložiska

Nastavenie úložiska je v súbore conf/distributions. Bez dlhého otáľania teda treba vytvoriť adresár conf a v ňom (zatiaľ) prázdny súbor distributions (len pripomeniem, že posledný príkaz zmenil pracovný adresár do adresára úložiska):

mkdir conf
touch conf/distributions

Teraz možno začať napĺňať konfiguračný súbor potrebnými údajmi, nie je ich veľa a ako príklad použijem obsah môjho:

Suite: local
Codename: testing
Components: main
Architectures: amd64
Description: Moje lokálne balíky
SignWith: GPG_KEY_ID
DebIndices: Packages Release .
Contents: .

Ako sami vidíte, konfiguračné voľby sú zadávané v tvare MENO:HODNOTA. Teraz k jednotlivým voľbám, ktoré nepredstavujú úplný popis možnosti, ale len základné minimum:

  • Suite – označenie vetvy, možno použiť oficiálne mená (stable, testing, wheezy, squeezy a pod) alebo (odporúčam) vlastné meno, čím si zjednodušíte hľadanie lokálnych balíkov v systéme APT (bude to symbolický odkaz na Codename);
  • Codename – názov distribúcie Debianu, pre ktorú sú balíky určené, pričom ani tu nemusí ísť o oficiálny názov;
  • Components – zoznam sekcií v úložisku (napr.: main contrib non-free);
  • Architectures – zoznam architektúr v úložisku (použite svoju architektúru);
  • DebIndices a Contents – tieto dve voľby riadia formát generovaných súborov Packages a Contents, uvedené nastavenie generuje nekomprimované súbory (.), môžete použiť aj súbory komprimované pomocou gzip (.gz), a/alebo pomocou bzip (.bz2);
  • SignWith – obsahuje ID kľúča GPG, ktorým bude podpísané úložisko (secure-apt), viz nižšie (ak ešte nemáte ID kľúča, túto voľbu zatiaľ vynechajte).

Ďalšie podrobnosti hľadajte v dokumentácii reprepro (/usr/share/doc/reprepro/manual.html).

Inicializácia úložiska

Po pripravení konfiguračného súboru je potrebné incializovať (vytvoriť) spomínaný symbolický odkaz, o to sa postará príkaz v podobe:

reprepro -Vb . createsymlinks

Kde:

  • voľba -V nastavuje podrobný výpis činnosti a nie je povinná;
  • voľba -b udáva adresár úložiska (tu bodka ako tento adresár)

V prípade, že ste urobili zmeny v konfigurácii (najmä premenovali Suite alebo Codename) je potrebné znova vytvoriť symbolické odkazy a odstrániť staré, vtedy pridajte voľbu –delete.

Ak používate len jedno úložisko môžete si ušetriť prácu s neustálym zadávaním cesty nastavením premennej prostredia:

export REPREPRO_BASE_DIR=/usr/src/localrepo

Týmto je úložisko pripravené a možno ho začať používať.

Práca s úložiskom

Práca s úložiskom zahŕňa základné operácie ako pridávanie a odoberanie balíkov. Užitočné môže byť vypísanie obsahu. V žiadnom prípade tu nepopisujem kompletné možnosti, ktoré sú naozaj široké a zameriam sa len na prácu s jednotlivými súbormi deb.

Pridanie súboru

O pridanie jedného súboru deb (binárneho balíka) sa postará príkaz vo forme:

reprepro -Vb . includedeb CODENAME /cesta/k/súboru/deb

Odstránenie súboru

Balík z úložiska odstránite pomocou príkazu vo forme:

reprepro -Vb . remove CODENAME meno_balíka

Výpis úložiska

Môžete si nechať vypísať všetky balíky v úložisku pomocou:

reprepro -b . list CODENAME

Alebo si môžete nechať vypísať informácie len o konkrétnom balíku:

reprepro -b . list CODENAME meno_balíka

Znova-vytvorenie súborov

Ako poslednú ukážku možností spomeniem vynútenie opätovného vygenerovania súborov Packages a Contents:

reprepro -Vb . rerunnotifiers

V prípade, že je potrebné opätovne vygenerovať aj ostatné súbory, pomôže príkaz export, ktorý oproti predchádzajúcemu vyžaduje aj zadanie mena distribúcie, napr.:

reprepro -Vb . export testing

Ďalšie voľby

K väčšine spomenutých príkazov možno pridať kopu ďalších volieb, za všetky spomeniem:

  • -C SUITE
  • -A architektúra
  • -S sekcia

Tieto voľby slúžia na bližšie špecifikovanie, v ktorej časti úložiska má program s balíkom pracovať. Pozornejšiemu čitateľovi iste neuniklo, že v tomto jednoduchom príklade (kde je len jedna architektúra, sekcia i komponent (suite) ich použitie stráca význam.

Pridanie úložiska

Po pridaní aspoň jedného súboru si môžete svoje novo-vytvorené úložisko pridať do APT, teda môžete ho pridať aj predtým, ale pred pridaním prvého súboru ešte nie sú vygenerované všetky potrebné časti. O pridanie sa postará jeden riadok v súbore /etc/apt/sources.list:

deb file:/usr/src/localrepo CODENAME COMPONENTS

Samozrejme, CODENAME a COMPONENTS nahraďte hodnotami z konfiguračného súboru a nezabudnite si nastaviť aj svoju cestu… Ostáva už len aktualizovať zoznam balíkov, napríklad pomocou:

aptitude update

Pokiaľ však svoje úložisko nepodpíšete, bude APT neustále na túto skutočnosť upozorňovať. Môžete síce tieto upozornenia na nepodpísané balíky vypnúť, prípadne aj ignorovať, ale prečo ho nepodpísať? Potrebujete na to kľúč GPG, ktorý si môžete veľmi jednoducho vygenerovať sami. Neposkytnem tu kompletný popis, pretože by to vydalo na samostatný článok, ale krátko zhrniem kroky…

Vygenerovanie kľúča

Na túto úlohu potrebujete mať nainštalovaný GNU Privacy guard, skrátene GnuPG. Na výber máte balíky gnupg a gnupg2 a pre potreby APT je jedno, ktorý si nainštalujete a použijete. Samotný kľúč vygenerujete pomocou príkazu:

gpg --gen-key

Spustením príkazu nasleduje séria otázok, myslím si, že väčšie problémy môže laikom spôsobovať len otázka na výber šifrovania, ale pre potreby podpísania lokálneho úložiska APT si môžete vybrať ktorúkoľvek z ponúkaných.

Po vygenerovaní kľúča je ho potrebné nastaviť jeho ID do konfiguračného súboru, ako také ID zistíte? Použijem príklad s kľúčom svojho verejného úložiska, ktorý si vypíšem pomocou príkazu:

gpg --list-keys
/home/slavko/.gnupg/pubring.gpg
-------------------------------
...
pub 2048R/FFF06A93 2010-03-31
uid Dedinčanov archív balíkov (Debian APT repositary) <email_prepísaný>
sub 2048R/E9C5D7EF 2010-03-31 [platnost skončí: 2012-03-30]
...

ID kľúča je zvýraznené tučným červeným písmom. V tomto prípade by položka konfigurácie reprepro vyzerala takto:

SignWith: E9C5D7EF

Ak pridáte ID kľúča po pridaní balíkov, jednoducho znova vygenerujte súbory pomocou príkazu:

reprepro -b. rerunnotifiers

Pridanie kľúča do APT

Aby aj systém APT vedel, že daný kľúč je bezpečný, je potrebné ho do APT pridať, tu pomôže príkaz apt-key:

gpg --armor --export E9C5D7EF | sudo apt-key add -
OK

Ak nemáte v systéme nastavené sudo, jednoducho ako bežný používateľ vyexportujte kľúč do súboru:

gpg --armor --export E9C5D7EF > /tmp/repo.key

Vyexportovaný súbor potom treba importovať do APT, ale už ako root:

apt-key add /tmp/repo.key
rm /tmp/repo.key

Záver

Nie každý potrebuje lokálne úložisko balíkov pre Debian, ale jeho nastavenie je prvým krokom k experimentom na vytvorenie verejného úložiska, čo je iste lepší spôsob poskytovania balíkov, ako len jednoduchý odkaz na stiahnutie súboru deb, pretože umožňuje používateľom poskytovať aktualizácie prostredníctvom APT.

Aby som si prácu s úložiskom zjednodušil (najmä skrátil písanie jednotlivých príkazov), tak som si často používané príkazy reprepro zapracoval do vlastného skriptu, ale to si musí každý urobiť podľa vlastného vkusu a potrieb…