Slackware Linux - csomagkezelés 1. rész

A Slackware Linux mint a többi Linux disztribúció tartalmaz a csomagkezeléshez nélkülözhetetlen eszközöket. A régebbi időkben a csomagok kiterjesztése .tgz volt, de az utóbbi időben ez változott és már .txz az alapértelmezett. A csomagkezelő a pkgtools névre hallgat. Ez tartalmaz több elemet, mint a csomagok telepítéséhez használt installpkg, frissítéshez az upgradepkg, eltávolításhoz removepkg és saját csomag készítéséhez a makepkg sh alapú szkriptfájlokat. Igen, a Slackware csomagkezelés alapja sh szkriptekben van megírva. Ezt ellenőrízhetjük a /sbin/ könyvtárban lévő szkriptek tanulmányozása alapján. A telepített csomagok információi a /var/log/packages könyvtárban helyezkednek el. További használt könyvtárak: /var/log/scripts, /var/log/removed-packages, /var/log/removed-scripts.

Tehát minden adott ahhoz hogy tudjunk csomagokat telepíteni, frissíteni, eltávolítani. Egy valamit azonban nem tud: függőséget kezelni! Tudom most sokan akik deb, rpm rendszereken nőttek fel most a szívükhöz kapnak. Azonban nem ilyen vészes a helyzet :) A Slackware alapfilozófiája szerint minden csomag ami a rendszerhez szükséges adott a megfelelő könyvtárakban. Egy alap telepítés során az alábbi könyvtárak találhatóak a telepítő lemezen: a/ ap/ d/ e/ f/ k/ kde/ kdei/ l/ n/ t/ tcl/ x/ xap/ xfce/ y/. Ahhoz, hogy egy működő rendszert tudjunk telepíteni legfontosabb az a/ ami a base (alap) csomagokat tartalmazza, az n/ network (hálózat) kezeléséhez szükséges.

A csomagok felépítése nagyban eltér a deb és rpm rendszereken használtakhoz képest. Itt minden program egy csomag. Nincs külön szedve bin lib dev részekre. Minden egyes csomag tartalmazza az összes futtatható állományát, konfigurációkat, adatokat, libeket és a fordításhoz szükséges fájlokat (/usr/include/...). Ennek köszönhetően a csomag nincs szétaprózva, tehát ha a gtk2 csomagot feltelepítettem akkor ha fordítani szeretnék bármilyen gtk2-öt használó programot, akkor az ehhez szükséges fájlokat mind megtalálom nem kell külön keresni a fejlesztéshez szükséges csomagot. Ennek természetesen az az eredménye, hogy minden csomag jóval nagyobb, viszont a csomagok száma jóval kisebb mint a már említett rendszereken.

Egy slackware csomag felépítése tehát mindent tartalmaz amit a program fejlesztői szükségesnek látnak nem csak a minimális futtatáshoz hanem a későbbi fejlesztésekhez is. A csomagok szabványos eszközökkel szétbonthatóak, átnézhetőek. Elég a tar parancsot ismerni hozzá ;-)

Nézzük egy konkrét példát a csomag felépítésére:
A pkgtools csomag felépítése:


install/
install/doinst.sh
install/slack-desc
sbin/
sbin/explodepkg
sbin/installpkg
sbin/makepkg
sbin/pkgtool
sbin/removepkg
sbin/upgradepkg
usr/
usr/man/
usr/man/man8/
usr/man/man8/explodepkg.8.gz
usr/man/man8/installpkg.8.gz
usr/man/man8/makepkg.8.gz
usr/man/man8/pkgtool.8.gz
usr/man/man8/removepkg.8.gz
usr/man/man8/upgradepkg.8.gz
var/
var/log/
var/log/setup/
var/log/setup/setup.70.install-kernel
var/log/setup/setup.80.make-bootdisk
var/log/setup/setup.htmlview
var/log/setup/setup.services
var/log/setup/tmp/

Az install könyvtár minden esetben a csomagkezelőhöz tartozó információkat tartalmazza, a többi könyvtár és fájl a helyére kerül a fájlrendszeren belül. Egy csomagtelepítés közben a pkgtools ellenőrzi az install/ könyvtárban lévő fájlokat. Átnézi a már rendszerben lévőeket és összehasonlítja a csomagban lévővel. Egy frissítés közben minden esetben összeszedi azokat a fájlokat és könyvtárakat amire már nem lesz szükség. Ezeket törölni fogja telepítés után. Az install/ könyvtáron belül a slack-desc fájl tartalmazza a csomag leírását. Ez nem kötelező elem, de ajánlott! Enélkül is lehet élni, de nem érdemes :-) A doinst.sh szkript pedig telepítés után fog lefutni. Ez rakja helyére a szimbolikus linkeket és hajt végre több változtatást is ha szükséges. Ez hasonló a debian által használt pre-inst, post-inst szkriptekhez.

Fontos megjegyezni, hogy nem mindent végez el a csomagkezelő! Egy kernel frissítés után a lilo vagy grub frissítést magunknak kell elvégezni különben kereshetünk egy másik rendszert hogy helyreállítsuk az elrontott rendszerbetöltőt. Lilo használata esetén minden esetben érdemes kernel frissítés után a lilo -v parancsot kiadni.

Az ap/ könyvtárban általánosságban olyan alkalmazások találhatóak amik nem szükségesek a rendszer futásához, de megkönnyítik a mindennapokat. Ezek mind konzolban futó programok. Itt található a slackpkg csomag is aminek segítségével akár hálózaton keresztül is tudjuk frissíteni a rendszerünket. Hasonlóan a Debian rendszereken meglévő apt-get programhoz. Lényeges különbség azonban, hogy egyszerre csak egy mirrort használhatunk, tehát nem lehet további forrásokat hozzáadni, és a függőségeket ez sem kezeli. Tulajdonképpen egy előtét program a pkgtools használatához.

A slackpkg használata előtt be kell állítani egy mirrort ahonnét szeretnénk a rendszerünket frissíteni. Ez a fájl a /etc/slackpkg/mirrors fájlban található. Érdemes egy hozzánk közel esőt választani. Én személy szerint a lengyel ftp.slackware.pl-t javaslom. A slackpkg használata nagyon egyszerű. Beállítod a mirrort, elindítod a csomagok állományának frissítését: slackpkg update, majd slackpkg upgrade-all. Érdemes áttanulmányozni a slackpkg szkriptet, de aki ismeri az apt-get felépítését ezt sem fogja nehezebbnek találni.

A slackpkg azonban nem csak abban segít, hogy csomagokat telepítsünk, hanem a megváltozott konfigurációs fájlokat is kezelni tudjuk segítségével. Ehhez csak el kell indítani egy frissítés után a slackpkg new-config parancsot. A Slackware csomagkezelő minden olyan csomagban ami a /etc alatt tartalmazza a saját konfigurációs fájljait alapértelmezetten nem cseréli le az új változatra. Egyszerűen az új konfigurációs állomány létrejön a régi mellett a .new kiterjesztéssel. A new-config ezeket a fájlokat keresi meg és utána mi magunk határozhatjuk meg, hogy mi legyen ezekkel a fájlokkal. Felülírhatjuk a régit, törölhetjük, összehasonlíthatunk. Például VirtualBox telepítése után alapból a /etc/rc.d/rc.local fájlban fogja beleírni magát, hogy rendszerindításkor lefusson. Ha a Slackware csomag új verziója tartalmazza az új rc.local fájlt akkor ha ezt felülcsapná egyből akkor rakhatnánk be kézzel újra, hogy fusson rendszerindítás után a vbox.

De nincs függőségkezelés! Nincs. Még mindig nincs. Azonban a Slackware ettől még nem használhatatlan. A /l könyvtár tartalmaz szinte minden libet ami szükséges a programok futtatásához. Itt található az Xfce-hez szükséges GTK könyvtár fájlok, a KDE futásához szükséges Qt könyvtár is. Aki frissen ismerkedik a rendszerrel annak érdemes a teljes /l könyvtárat felrakni. Későbbiekben amikor már ismered a rendszert könnyen tudsz szelektálni, hogy mi kell és mi nem. Ha egyszerűen csak használni akarod akkor feltelepíted mindet. Abból még nem volt baja senkinek.

Bármelyik programod ami úgy tűnik, hogy nem fut indítsd el egy terminálban. Ha itt kiírja, hogy mire van szüksége akkor megkeresed azt a csomagot ami az adott libet tartalmazza. Feltelepíted és a program futni fog. Ez általában csomagok frissítése után fordulhat elő. Amikor új csomagok kerülnek a rendszerbe. Frissítés előtt érdemes elolvasni a Changelog fáljt.

Egy ilyen részlet:


d/Cython-0.23.4-x86_64-1.txz: Added.
       Cython is required to build blueman.
kde/bluedevil-2.1.1-x86_64-3.txz: Rebuilt.
l/M2Crypto-0.22.5-x86_64-1.txz: Upgraded.
l/djvulibre-3.5.27-x86_64-1.txz: Upgraded.
l/fuse-2.9.4-x86_64-1.txz: Upgraded.
l/glibc-2.22-x86_64-3.txz: Rebuilt.
       Fixed empty /etc/nscd.conf.new. Thanks to Jakub Jankowski.
l/glibc-i18n-2.22-x86_64-3.txz: Rebuilt.
l/glibc-profile-2.22-x86_64-3.txz: Rebuilt.

A függőség kezelés nem léte miatt a Cython csomag nem fog feltelepedni magától. Természetesen rá tudod venni a slackpkg-t, hogy az új csomagokat is telepítse. Azonban alapértelmezés szerint nem teszi. Sőt ha egy csomag megváltozik azt sem figyeli. Jó példa erre a syslog -> syslog-ng csere. A 14.1 még a régebbi syslog csomagot tartalmazza, azonban a current ágban már a syslog-ng csomag van. A slackpkg segítségével ezt is le tudod cserélni, de nem alapértelmezetten!

Most már tudunk csomagokat telepíteni, frissíteni. A rendszerünk kész arra, hogy belakjuk. Mi történik azonban ha olyan csomagot szeretnénk ami nem a rendszerünk része? Erre ad választ a második rész. Hamarosan...

Hozzászólások

Köszi. (Én most azzal játszok, hogy a FreeBSD-féle bhyve alatt akarok felrakni egy Slackware-t, de mivel a bhyve elég sajátosan egy saját grubbal butulja el a VM-ben levő OS-eket, így azt kézzel megcsinálni nem teljesen triviális, ha valaki nem ismeri. Egyszer már sikerült valamikor tavaly év vége felé, tegnap megint nem. De egyszer ccsak megtanulom.)

Nagy köszönet! Olvasom, memorizálom, jegyzetelem!