Balíčkový systém NetBSD

od lkundrak ( | )

Balíčkový systém NetBSD, pkgsrc, umožňuje jednoducho a jednotne zostavovať a spravovať inštalácie softvéru. Aj keď bol pôvodne určený pre NetBSD, pkgsrc je prenosný na množstvo ďalších UNIXových operačných systémov, vrátane distribúcií GNU/Linuxu, FreeBSD, OpenBSD, Solaris, či pochybný systém Windows s nadstavbou Services For UNIX.

Pkgsrc pozostáva zo sady programov na manipuláciu s binárnymi balíčkami a stromu so súbormi popisujúcimi zostavovanie balíčkov roztriedenými do kategórií. Toto je zásadný rozdiel v ponímaní balíčkov medzi systémami rodiny BSD a distribúciami GNU/Linuxu, v ktorých tradičných balíčkových systémoch (RPM, APT) je balíček oveľa samostatnejší od ostatných.

Binárne balíčky

Binárny balíček je v podstate tarball so stromom súborov patriacich balíčku a nejaké meta-data, ako popis balíčku, verzia operačného systému, pre ktorý bol balíček zostavený a závislosti balíčka.

Binárne balíčky inštaluje program pkg_add(1). Okrem lokálne dostupných balíčkov vie pkg_add(1) balíčky sťahovať protokolmi HTTP a FTP. V prípade, že mu nieje zadané kompletné meno, prehľadáva umiestnenia určené premennou prostredia PKG_PATH. Ak nie sú uspokojené závislosti balíčka, pokúsi sa pkg_add(1) potrebné balíčky doinštalovať.


# export PKG_PATH="\
ftp://ftp.NetBSD.org/pub/NetBSD/packages/3.0/i386/All;\
/usr/pkgsrc/packages"
# pkg_add a2ps

Informácie o nainštalovaných, ako aj nenainštalovaných balíčkoch poskytne pkg_info(1).

Nainštalovaný balíček sa dá odstrániť použizím pkg_delete(1). Pkgsrc si udržuje informácie o tom ktorý balíček bol nainštalovaný úmyselne, a ktorý automaticky ako závislosť, a pri odstraňovaní balíčka vie odstrániť aj závislosti, ktoré sú už nepotrebné. Súbory, ktoré patrili balíčku, ale boli zmenené ostávajú zachované -- pravdepodobne obsahujú nejaké užívateľove prispôsobenia, napríklad sú to konfiguračné súbory.

Ďalšou utilitkou, ktorá sa môže hodiť je pkg_admin(1). Dá sa ňou manipulovať priamo s databázov nainštalovaných balíčkov, čo môže byť možnosť ako ju opraviť v prípade poškodenia, alebo sa ňou dá overiť prítomnosť a integrita súborov nainštalovaných balíčkov.

Inštalácie zo zdrojových kódov

Pre zostavovanie balíčkov zo zdrojových kódov je nutné stiahnuť zdrojový strom pkgsrc z niektorého zo zrkadiel. Jednou možnosťou je stiahnuť tarball z ftp. Kvôli aktualizáciam je ale často lepšie stiahnuť a udržiavať strom aktuálny pomocou CVS.


$ export CVSROOT=:pserver:anoncvs@anoncvs.NetBSD.org:/cvsroot
$ cvs login
Logging in to :pserver:anoncvs@anoncvs.netbsd.org:2401/cvsroot
CVS password: anoncvs
$ cvs co -P pkgsrc

Medzi rozumné nápady patrí tiež nainštalovať comp.tgz pri inštalácií NetBSD.

Ak na cieľovej platforme nieje natívna pre pkgsrc (tj. NetBSD a DragonFly) je nutné spompilovať a nainštalovať utility kritické pre pkgsrc. To zariadi skript pkgsrc/bootstrap/bootstrap. Vo väčšine prípadov, na podporovaných platformách, ho stačí len spustiť a čakať.

V adresári pkgsrc sa nachádza okolo 50 podadresárov, z ktorých väčšina sú kategórie balíčkov. Ich podadresármi sú zase adresáre pre jednotlivé balíčky. V nich môžeme spúšťať make s rôznymi cieľmi. Najpoužívanejšie sú asi:

  • fetch - stiahne potrebné súbory do pkgsrc/distfiles
  • extract - rozbalí zdrojové kódy do podadresára work
  • build - skompiluje zdrojové kódy do spustiteľnej formy
  • install - nainštaluje spustiteľné súbory
  • package - vytvorí .tgz balíček v pkgsrc/packages
  • clean - zmaže zdrojové súbory a súbory vytvorené pri zostavovaní (adresár work)
  • deinstall - odstráni balíček pomocou pkg_delete
  • update - odinštaluje balíček a nahradí ho aktuálnou verziou
  • reinstall - balíčkom nahradí už nainštalovný balíček s rovnakým menom (napr. staršiu verziu)
  • replace - obdoba reinstall, bez riešenia závislostí (neodporúča sa, okrem upgradu pkgisntall samotného)

Samozrejme, že niektoré ciele navzájom na sebe závisia -- napríklad pred inštaláciou treba stiahnuť, rozbaliť a skompilovať zdrojové kódy. Ciele, ktoré vyžadujú privilégia superužívateľa používajú just-in-time su, čo znamená, že si heslo účtu root vypýtajú iba vtedy keď ho potrebujú, a s jeho privilégiami vykonávajú len to najnutnejšie. Takže taká bežná inštalácia môže vyzerať napríklad takto:


$ cd pkgsrc/print
$ make install

Vcelku jednoduché, nie?

Aktualizácie

V prípade, že zostavujeme zo zdrojových kódov, je základom udržovať aktuálny zdrojový strom pkgsrc. To urobíme najlepšie tak, že ho necháme v správe CVS a z času na čas zaktualizujeme cvs update. Potom môžeme buď v adresároch všetkých balíčkoch spustiť ručne make update, alebo použiť pkg_chk, napríklad s parametrom -u, na čo je potrebný pkgtools/pkg_chk.

pkg_chk umožňuje vykonávať zdrojové aj binárne aktualizácie. Slúži na to voľba -b. Binárne balíčky hľadá v pkgsrc/packages/All, alebo v adresári určenom premennou PACKAGES.

Vyhľadávanie balíčkov

Na hľadanie balíčkov podľa kľúčových slov by mal slúžiť cieľ search, kľúčové slovo pre vyhľadávanie by malo byť obsahom premennej key. Hľadaniu predchádza relatívne zdĺhavá indexácia (pravdepodobne viac ako hodinu), takže je zriedka užitočné ho používať.


$ cd pkgsrc
$ make search key=slovo

V prípade, že máte pripojenie k Internetu, je možné použiť perfektný www frontend na pkgsrc.se. Okrem samotného oficiálneho stromu pkgsrc vyhľadáva aj v ešte aj v balíčkoch pkgsrc-wip -- Work In Progress.

napísal Lukas-SVK, Ut, 2006-11-21 00:40

Neskusali ste pkgtools/pkgfind ? Vid man pkgfind ;)

napísal lkundrak, Ut, 2006-11-21 10:20

Nemôžem si pomôcť, ale mne príde totálne zbytočný. Nevidím žiadnu výhodu oproti trebárs grepu, okrem toho, že nakoľko nepoužíva žiadnu indexáciu je citeľne pomalší než trebárs pkgsrc.se.

napísal celeb, Ut, 2006-08-15 19:28

este som sa stretol s:

make reinstall - ak uz mate skompilovany package a chcete ho uz len naistalovat (napr. ak ste zabudli odinstalovat binarny balik pred make install) a

make replace - vtedy sa nehladi na zavislosti a package je nainstalovany "forced". Neodporuca sa!

napísal lkundrak, Pia, 2006-08-18 18:15

Hej, to je veľmi dobrý nápad. Pridal som.

napísal celeb, Ut, 2006-08-15 18:57

to "V prípade, že máte pripojenie k Internetu" by som dal prec, pkgsrc si inac neviem predstavit pouzivat.

napísal lkundrak, So, 2006-08-19 10:10

Ja pouzivam pkgsrc bezne bez connectu. Neviem, co by tomu mohlo prekazat.

© Copyright 2006 NetBSD.sk. Ďakujem za mnoho KeNNymu, xyzZovi a Furbymu. Design by Dewden Services.