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.
Obsah článku
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 dpkg
– apt-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.