Kategória: Debian Linux

Zmenené: 11. august 2010

Vlastné úložisko balíkov

Balíkovací systém Debianu je založený na programoch ako dpkg, sady nástrojov apt a aptitude. Šikovný je aj GUI pre apt, zvaný synaptic. Aby však pracovali celkom podľa našich predstáv, je potrebné im povedať, kde majú hľadať balíky s programami. Ak vám nepostačuje predvolené nastavenie, tu je viac.

V tomto článku sa rozpíšem o tom, ako si lepšie nastaviť balíkovací systém Debianu. Dočítate sa ako manuálne nainštalovať balík, aj s rizikami, ktoré to v sebe skrýva. Potom sa dozviete ako sa týmto rizikám vyhnúť a zjednodušiť si prácu.

Najprv teda popis rizík manuálnej inštalácie, ktoré môžu začiatočníka odradiť od skúšaniu nových programov, a to by bola škoda.

Manuálna inštalácia balíka

Predstavte si, že ste niekde na internete konečne našli program, ktorý potrebujete. Myslíte, že máte vyhraté, ale beda. Napriek tomu, že v úložisku Debianu sú tisíce programov, ten Váš tam nie je.

Nie, nebudem popisovať inštaláciu programu zo zdrojových kódov, predstavme si lepšiu variantu, a to, že tvorca programu poskytuje na svojich stránkach aj pripravené balíky pre Debian. Spoznáte ich podľa toho, že majú príponu .deb. Stiahnuť takýto balík nie je problém, ale ako ho nainštalovať?

Slúži na to nástroj dpkg – správca balíkov pre Debian (debian package manager). Jeho použitie ukážem na príklade inštalácie programu Lazarus (čo je grafický vývojový nástroj pre programovanie v Pascale). Na stránkach Lazarus je k dispozícii aj balík pre Debian – lazarus_0.9.24-0_i386.deb. Tento súbor stiahnite, povedzme, do domovského adresára. Nainštalovať ho môžete pomocou príkazu:

cd ~
dpkg-ilazarus_0.9.24-0_i386.deb

Ak máte šťastie, balík sa nainštaluje a funguje. Píšem, ak máte šťastie, pretože dpkg je nástroj na prácu s balíkami na najnižšej úrovni. Nedokáže skontrolovať závislosti balíkov, ani existenciu nainštalovanej staršej verzie programu.

Ak šťastie nemáte, dpkg zahlási pri inštalácii chybu a program nespustíte. Ešte vždy môžete mať šťastie. Program môže vyžadovať balíky, ktoré sa nachádzajú v úložisku balíkov Debianu, a tak môžete na opravu poškodených závislosti použiť aptitude, či synaptic, teda na doinštalovanie chýbajúcich balíkov.

Ak šťastie nemáte, musíte buď chýbajúce balíky hľadať na internete a ručne ich nainštalovať, alebo sa zvoleného programu vzdať.

Až vás nový program prestane baviť, nesplní vaše očakávania alebo chcete nainštalovať jeho novú verziu (dpkg nekontroluje ani staršie verzie programu, a dokáže nainštalovať jeden program dvakrát), nastane čas na jeho odinštalovanie. Odinštalovanie možno urobiť dvomi spôsobmi:

  • odinštalovanie balíka (-r), ktoré ponechá konfiguračné súbory a pri opätovnej inštalácii máte program k dispozícii aj s pôvodnými nastaveniami,
  • úplné odstránenie balíka (-R), ktoré odstráni aj konfiguračné súbory.

Na rozdiel od inštalácie, pri odinštalácii sa nezadáva meno súboru s balíkom, ale len meno balíka. Pre náš príklad s Lazarom teda zadám:

dpkg -r lazarus

prípadne:

dpkg -R lazarus

Čiže, na záver to zhrniem. Na prácu so súbormi .deb možno použiť nástroj dpkg. Jeho použitie však v sebe skrýva riziko nesplnených závislostí, či nainštalovanej staršej verzie programu.

Lokálne úložisko balíkov

Vytvorenie

Teraz skúsim iný spôsob. Vytvorím si lokálne úložisko balíkov a nastavím balíkovací systém, aby ho používal. Takto odstránim problémy so sledovaním závislostí, kedže mi to umožní používať nadstavby dpkgapt-get, aptitude alebo aj synaptic. Na vytvorenie lokálneho úložiska balíkov je dobré vytvoriť si samostatný adresár (prípadne viac adresárov), v ktorom budú všetky balíky umiestnené, nech sa mi len tak nepletú v súborovom systéme. Vytvorím si, povedzme, adresár /usr/local/repozitar:

mkdir/usr/src/repozitar

Do tohoto adresára umiestnim stiahnuté balíky a vygenerujem súbor Packages, ktorý obsahuje popisy balíkov, vrátane ich verzií a závislotí, a ktorému rozumie (vyžaduje ho) balíkovací systém. Súbor Packages vytvorím pomocou nástroja dpkg-scanpackges (balík dpkg-dev):

cd /usr/src/repozitar
dpkg-scanpackages . /dev/null > Packages

alebo pomocou nástroja apt-ftparchive (balík apt-utils):

apt-ftparchive packages . > Packages

prípadne je možné využiť kompresiu, napríklad pre apt-ftparchive (pre dpkg-scanpackages je to obdobné):

apt-ftparchive packages . | gzip -9c > Packages.gz

Všimnite si bodku vo všetkých podobách príkazu, označuje aktuálny adresár, preto je, pri generovaní súboru Packages*, potrebné byť v adresári z balíkmi. Týmto je úložisko hotové a pripravené na používanie.

Nastavenie

Teraz ešte musím oznámiť balíkovaciemu systému, že má používať nové úložisko. Nastavenie úložísk je v súbore /etc/apt/sources.list. Takže do tohoto súboru pridám definíciu svojho lokálneho úložiska balíkov, teda pridám riadok:

deb file:/usr/local/repozitar ./

Jedná sa o štandardný zápis do zoznamu úložísk, avšak ako protokol je zadaný súborový systém v danom adresári (file:/usr/local/repozitar) bez definície vety (./).

Podpísanie

Pri takto vytvorenom a nastavenom lokálnom úložisku nie je zatiaľ vyriešený jeden problém. A to problém bezpečnostný. Na predchádzanie problému s podhodenými nebezpečnými balíkmi zaviedli vývojári systém podpisovania balíkov, respektíve úložísk s balíkmi. APT poskytuje možnosť nastaviť ako bezpečné úložisko CD-ROM, ale toto zjednodušenie neposkytuje pre lokálne úložisko. Je preto potrebné lokálne úložisko podpísať a kľúč pridať do systému APT.

Začnem vytvorením kľúča (dajte pozor aby ste vytvorili kľúč sebe a nie rootovi), ak už kľúč máte, môžete rovno preskočiť k ďalšiemu kroku:

gpg --gen-key

Program gpg položí niekoľko otázok, z ktorých vyberiem:

  • zvoľte druh kľúča DSA a ElGama
  • dĺžku kľúča 2048
  • neobmedzenú dobu platnosti

Potom ešte heslo a osobné údaje. Po vygenerovaní kľúča je ho treba pridať do systému APT:

gpg --export --armor slavko | sudo apt-key add -

No a ostáva podpísať moje úložisko. K tomu je potrebné v adresári s úložiskom vygenerovať súbor Release (prípadne Release.gz), o čo sa znova postará nástroj apt-ftparchive:

cd /usr/src/repozitar
apt-ftparchive release . > Release

No a vygenerovaný súbor Release podpísať:

gpg --output Release.gpg -ba Release

Teraz mám úložisko podpísané, balíkovací systém pozná môj podpis, a tak balíky v úložisku hodnotí ako bezpečné. Aby však balíkovací systém začal moje lokálne úložisko aj používať, musím ešte aktualizovať zoznam balíkov pomocou:

aptitude update

A teraz už môžem Lazarus nainštalovať komfortne, pomocou aptitude alebo synaptic:

aptitude install lazarus

Záver

Pri každom pridaní/odobratí balíka z/do lokálneho úložiska je opäť treba vygenerovať nové súbory Packages, Release, podpísať ho a aktualizovať zoznam balíkov:

cd /usr/src/repozitar
dpkg-scanpackages . /dev/null > Packages
apt-ftparchive release . > Release
gpg --output Release.gpg -ba Release
aptitude update

Týmto spôsobom si ušetríte problémy so závislosťami, pretože môžete pracovať na vyššej úrovni balíkovacieho systému. Teda rovnako ako so štandardnými úložiskami. Ak vám však nejaký balík chýba, tak ani toto nepomôže.

Možno ešte jedna pripomienka, týkajúca sa apt-ftparchive, nech je to úplné. Vyššie spomínaným spôsobom je vygenerovaný úplne základný súbor Release. Ak k nemu chcete pridať aj nejakú podrobnosti o autorovi úložiska, môžete využiť konfiguračný súbor /etc/apt/apt-ftparchive.conf, v ktorom je možné definovať ďalšie podrobnosti, napríklad:

APT::FTPArchive::Release::Codename "lenny";
APT::FTPArchive::Release::Origin "Slavko";
APT::FTPArchive::Release::Label "moje balíky";
APT::FTPArchive::Release::Architectures "amd64 all";
APT::FTPArchive::Release::Suite "testing";

No a keďže taká aktualizácia úložiska vyžaduje tri kroky, používam na to jednoduchý skript, ale to už je na Vás.