7.2 RPM – a csomagkezelo

Az RPM (Red Hat Package Manager) szolgál a szoftvercsomagok kezelésére. A legfontosabb parancsai az rpm és az rpmbuild. A sokoldalú RPM-adatbázist lekérdezve részletes információt kaphatnak a felhasználók, a rendszergazdák és a csomagkészítok a telepített szoftverekrol.

Alapvetoen az rpm-nek ötféle muködési módja van: szoftvercsomagok telepítése, eltávolítása vagy frissítése; az RPM-adatbázis újraépítése; RPM-bázisok vagy egyedi RPM-archívumok lekérdezése; a csomagok integritásának ellenorzése; valamint a csomagok aláírása. Az rpmbuild parancs használható a tiszta forrásból származó csomagok eloállítására.

A telepítheto RPM-archívumok egy speciális bináris formátumot használnak. Az archívumok a telepítendo programfájlokból, valamint bizonyos, az rpm által a telepítés során használt, vagy dokumentációs célokból az RPM-adatbázisban tárolt metaadatokból állnak. Az RPM-archívumok szokásos kiterjesztése .rpm.

TANÁCS: Szoftverfejlesztoi csomagok

Egyes csomagok esetében a szoftverfejlesztéshez szükséges komponensek (könyvtárak, fejlécfájlok, beillesztendo fájlok stb.) külön csomagokba kerültek. Ezekre a fejlesztoi csomagokra csak akkor van szükség, ha saját maga kívánja lefordítani a szoftvert, például a legfrissebb GNOME csomagokat. Az ilyen csomagokat a nevükben található -devel karaktersorozat jelzi, mint például az alsa-devel, gimp-devel vagy a kdelibs3-devel.

7.2.1 A csomagok hitelességének ellenorzése

Az RPM-csomagok GnuPG-aláírással rendelkeznek. Az ujjlenyomatban használt kulcs:

1024D/9C800ACA 2000-10-19 SuSE Package Signing Key <build@suse.de>
Key fingerprint = 79C1 79B2 E1C8 20C1 890F  9994 A84E DAE8 9C80 0ACA

Az rpm --checksig csomagnév-1.2.3.rpm parancs használható egy RPM-csomag aláírásának ellenorzésére; arra, hogy valóban a SUSE-tól vagy más, megbízható forrásból származik-e. Ez különösen ajánlott az internetrol származó frissítocsomagok esetében. A SUSE nyilvános csomagaláírási kulcsa általában a /root/.gnupg/ könyvtárban található. A kulcs ezenfelül megtalálható az /usr/lib/rpm/gnupg/ könyvtárban is, hogy a normál felhasználók is ellenorizhessék az RPM-csomagok aláírását.

7.2.2 Csomagok kezelése: Telepítés, frissítés és eltávolítás

Általában egy RPM-archívum telepítése igen egyszeru: rpm -i csomag_neve.rpm. Ez a parancs telepíti a csomagot, de csak akkor, ha a függoségek teljesülnek és nincs ütközés más csomagokkal. Egy hibaüzenet keretében az rpm kéri, hogy a telepíteni kívánt csomagok teljesítsék a függoségi követelményeket. A háttérben az RPM-adatbázis garantálja, hogy ne lépjen fel semmilyen ütközés – egy adott fájl csak egy csomaghoz tartozhat. Különféle paraméterekkel az rpm kényszerítheto ezen alapértelmezések figyelmen kívül hagyására, de ezt csak szakértoknek ajánljuk. Egyébként a rendszer integritását veszélyezteti, illetve elofordulhat, hogy nem lesz képes frissíteni a rendszert.

A -U vagy --upgrade és -F vagy --freshen paraméterek használhatók a csomagok frissítésére, például: rpm -F csomag_neve.rpm. Ez a parancs törli a régi változat fájljait és azonnal telepíti az új fájlokat. A kétféle lehetoség közötti különbség az, hogy a -U telepít olyan csomagokat, amelyek korábban nem léteztek a rendszerben, a -F csupán a meglévo csomagokat frissíti. Frissítéskor az rpm a konfigurációs fájlokat is frissíti óvatosan, az alábbi stratégia alkalmazásával:

  • Ha a rendszergazda nem módosította a konfigurációs fájlt, akkor az rpm telepíti a megfelelo fájl új verzióját. A rendszergazda beavatkozására nincsen szükség.

  • Ha a rendszergazda módosította a konfigurációs fájlt a frissítés elott, akkor az rpm elmenti a fájlt .rpmorig vagy .rpmsave (tartalék fájl) kiterjesztéssel, és telepíti az új csomagban található változatot; de csak akkor, ha az eredetileg telepített fájl és az új változat eltéro. Ebben az esetben hasonlítsa össze az elmentett fájlt (.rpmorig vagy .rpmsave) az újonnan telepített fájllal és ha szükséges, végezze el az új fájlban a szükséges módosításokat. Ezután feltétlenül törölje az .rpmorig és.rpmsave fájlokat a jövobeni frissítések problémáinak elkerülése érdekében.

  • Az .rpmnew fájlok akkor jelennek meg, ha a konfigurációs fájl már létezik és ha a noreplace címke lett megadva a .spec fájlban.

Frissítés után az .rpmsave és .rpmnew fájlokat törölni kell az összehasonlítás után, hogy ne zavarják a késobbi frissítéseket. Az .rpmorig kiterjesztést akkor használja a program, ha a fájl korábban nem volt ismert az RPM-adatbázisban.

Ellenkezo esetben az .rpmsave név kerül alkalmazásra. Más szavakkal, az .rpmorig egy idegen formátumról RPM-re frissítés eredménye. Az .rpmsave egy régebbi RPM-rol egy újabb RPM-re frissítés eredménye. Az .rpmnew fájlokból nem derül ki, hogy a rendszergazda módosította-e a konfigurációs fájlt. Az ilyen fájlok listája a /var/adm/rpmconfigcheck helyen található. Egyes konfigurációs fájlok (például az /etc/httpd/httpd.conf) nem íródnak felül a folyamatos muködés fenntartása érdekében.

A -U kapcsoló nem egyenértéku a -e paraméterrel történo eltávolítással és a -i paraméterrel történo telepítéssel. Ahol csak lehet, inkább a -U paramétert használja.

Egy csomag eltávolításához írja be, hogy rpm -e csomag_neve. Az rpm csak akkor törli a csomagot, ha nincsenek feloldatlan függoségek. Elvileg lehetetlen például törölni a Tcl/Tk-t addig, amíg egy másik alkalmazás használja. Még ebben az esetben is, az RPM az adatbázistól kér segítséget. Ha az ilyen törlés – bármilyen okból és akár furcsa körülmények között is – lehetlennek bizonyul, még akkor is, ha semmilyen további függoség nincs, akkor célszeru lehet újraépíteni az RPM-adatbázist a --rebuilddb paraméter használatával..

7.2.3 Az RPM és a javítások

A rendszer muködési biztonságának garantálásához idorol idore frissítocsomagokat kell telepíteni a rendszeren. Korábban egy csomag egy hibáját csak a teljes csomag cseréjével lehett megoldani. A kis fájlokban hibákat tartalmazó nagy csomagok javításai feleslegesen nagy adatmennyiséget eredményeztek. A SUSE RPM azonban lehetové teszi az egyes csomagok foltozását.

A legfontosabb szempontokat a pine példáján keresztül mutatjuk be:

A javító RPM megfelelo-e a rendszerhez?

Ennek ellenorzéséhez eloször le kell kérdezni a csomag telepített verzióját. A pine esetében erre a következo parancs szolgál:

rpm -q pine
pine-4.44-188

Ezután ellenorizni kell, hogy a javító RPM megfelelo-e a pine adott verziójához:

rpm -qp --basedon pine-4.44-224.i586.patch.rpm 
pine = 4.44-188
pine = 4.44-195
pine = 4.44-207

Ez a javítás a pine háromféle verziójához jó. Mivel a telepített verzió is megtalálható a listában, a javítás telepítheto.

Milyen fájlokat cserél le a javítás?

A javítás által érintett fájlok egyszeruen megtekinthetok a javító RPM-ben. Az rpm -P paraméterével speciális javítási funkciók választhatók ki. A fájlok az alábbi paranccsal listázhatók:

rpm -qpPl pine-4.44-224.i586.patch.rpm
/etc/pine.conf
/etc/pine.conf.fixed
/usr/bin/pine

vagy ha a javítás már telepítve van, akkor az alábbival:

rpm -qPl pine
/etc/pine.conf
/etc/pine.conf.fixed
/usr/bin/pine
Hogyan történik a javító RPM telepítése a rendszerben?

A javító RPM-ek ugyanúgy használhatók, mint a szokásos RPM-ek. Az egyetlen különbség, hogy a javítandó RPM-nek már telepítve kell lennie.

Milyen javítások vannak telepítve a rendszeren és mely csomagokhoz?

A rendszeren telepített összes javítást az rpm -qPa parancs listázza ki. Ha csak egyetlen javítás van telepítve egy új rendszeren (mint a fenti példában), akkor a lista így néz ki:

rpm -qPa
pine-4.44-224

Ha késobb kíváncsi arra, hogy mely csomagverziók mikor lettek telepítve, ez is lekérdezheto az RPM-adatbázisból. A pine esetében ezt az információt a következo paranccsal lehet kiíratni:

rpm -q --basedon pine
pine = 4.44-188

További információk, így például az RPM javítási funkciójáról az rpm és az rpmbuild parancsok kézikönyvoldalain olvashatók.

7.2.4 Delta RPM-csomagok

A delta RPM-csomagok egy RPM-csomag régebbi és új változata közötti különbséget tartalmazzák. Egy delta RPM alkalmazása egy régi RPM-en egy teljesen új RPM-et fog eredményezni. Ha nincs meg a régi RPM-példány, a delta RPM a telepített RPM-mel is képes együttmuködni. A deltarpm csomagok még a javító RPM-eknél is kisebbek. Ez hasznos, ha a frissítocsomagokat az interneten keresztül kell elküldeni. A hátránya, hogy a delta RPM-ekkel végzett frissítési muveletek lényegesen jobban megterhelik a CPU-t, mint a sima és javító RPM-ek használata.

A prepdeltarpm, writedeltarpm és applydeltarpm bináris fájlok a delta RPM készlet (deltarpm csomag) részei. Ezek segítenek a delta RPM-csomagok elkészítésében és alkalmazásában. Az alábbi parancsokkal készítheto egy new.delta.rpm. A következo parancs feltételezi, hogy az old.rpm és new.rpm rendelkezésre áll:

prepdeltarpm -s seq -i info old.rpm > old.cpio
prepdeltarpm -f new.rpm > new.cpio
xdelta delta -0 old.cpio new.cpio delta
writedeltarpm new.rpm delta info new.delta.rpm

Végül távolítsa el az old.cpio, new.cpio és delta ideiglenes munkafájlokat.

Az applydeltarpm használatával eloállítható az új RPM, akár a fájlrendszerbol is, ha a régi csomag már telepítve van:

applydeltarpm new.delta.rpm new.rpm

Vagy pedig a -r paraméter használatával származtatható a régi RPM-bol, a fájlrendszer elérése nélkül:

applydeltarpm -r old.rpm new.delta.rpm new.rpm

A muszaki részletek az /usr/share/doc/csomagok/deltarpm/README fájlban olvashatók.

7.2.5 RPM-lekérdezések

A -q paraméter megadása esetén az rpm rpm lekérdezéseket indít. Megvizsgálható egy adott RPM-archívum (a -p paraméterrel) és lekérdezheto a telepített csomagok RPM-adatbázisa. Többféle kapcsoló is használható a kívánt adatok típusának megadására. Lásd: Táblázat 7-1.

Táblázat 7-1 A legfontosabb RPM-lekérdezési paraméterek

-i

Csomaginformáció

-l

Fájllista

-f FÁJL

A FÁJL fájlt tartalmazó csomag lekérdezése (a FÁJL paramétert teljes elérési úttal kell megadni)

-s

Fájllista állapotinformációval (magával vonja a -l alkalmazását)

-d

Csak a dokumentációs fájlok listázása (magával vonja a -l alkalmazását)

-c

Csak a konfigurációs fájlok listázása (magával vonja a -l alkalmazását)

--dump

Részletes fájllista (a -l, -c és -d paraméterekkel együttes használathoz)

--provides

Azon csomagok funkcióinak listázása, amelyeket egy másik csomag kérhet a --requires paraméterrel

--requires, -R

A csomag által igényelt képességek

--scripts

Telepítési parancsfájlok (telepítés elotti, utáni és eltávolító)

Például az rpm -q -i wget parancs hatására a Példa 7-1 által mutatott eredményt kapjuk.

Példa 7-1 rpm -q -i wget

Name        : wget                         Relocations: (not relocatable)
Version     : 1.11.4                            Vendor: openSUSE
Release     : 1.22                          Build Date: 2008. dec.  3., szerda, 07.45.24 CET
Install Date: 2008. dec.  9., kedd, 23.04.48 CET      Build Host: build15
Group       : Productivity/Networking/Web/Utilities   Source RPM: wget-1.11.4-1.22.src.rpm
Size        : 1530350                          License: GPL v3 or later
Signature   : RSA/8, 2008. dec.  3., szerda, 07.45.34 CET, Key ID b88b2fd43dbdc284
Packager    : http://bugs.opensuse.org
URL         : http://www.gnu.org/software/wget/
Summary     : A Tool for Mirroring FTP and HTTP Servers
Description :
Wget enables you to retrieve WWW documents or FTP files from a server.
This can be done in script files or via the command line.
[...]

A -f csak akkor muködik, ha a teljes fájlnevet adja meg, elérési úttal együtt. Annyi fáljnevet adhat meg, amenyi csak jólesik. Például az alábbi parancs:

rpm -q -f /bin/rpm /usr/bin/wget

eredménye a következo:

rpm-4.1.1-191
wget-1.9.1-50

Ha csak a fájlnév egy része ismert, használjon egy parancsfájlt (Példa 7-2). A részleges fájlnevet adja át paraméterként a parancsfájlnak.

Az rpm -q --changelog rpm parancs egy csomag részletes adatait (frissítések, konfiguráció, módosítások stb.) írja ki. Az elobbi példa az rpm csomagról ír ki információt.

A telepített RPM-adatbázis segítségével ellenorzések is végezhetok. Ezek a -V, -y vagy --verify paraméterrel indíthatók. E paraméter használatakor az rpm megjeleníti egy csomagnak a telepítés óta módosult fájljait. Az rpm nyolc karakterszimbólum segítségével jelzi az alábbi módosításokat:

Táblázat 7-2 RPM ellenorzési paraméterek

5

MD5-ellenorzoösszeg

S

Fájlméret

L

Szimbolikus lánc

T

Módosítás ideje

D

Fo- és aleszközszámok

U

Tulajdonos

G

Csoport

M

Mód (jogosultságok és fájltípus)

Konfigurációs fájlok esetében a c betu íródik ki. Például az /etc/wgetrc (wget) módosításainak kiírása:

rpm -V wget
S.5....T c /etc/wgetrc

Az RPM-adatbázis fájljai a /var/lib/rpm könyvtárban találhatók. Ha az /usr partíció helyfoglalása 1 GB, akkor ez az adatbázis közel 30 MB-ot foglal, különösen teljes frissítés után. Ha az adatbázis sokkal nagyobb a vártnál, akkor célszeru újraépíteni az adatbázist a --rebuilddb paraméter használatával. Elotte azonban mentse el a régi adatbázist. A cron és a cron.daily parancsfájl napi másolatokat készít az adatbázisról (gzip-pel tömörítve) és a /var/adm/backup/rpmdb könyvtárba menti oket. A másolatok számát az /etc/sysconfig/backup fájl MAX_RPMDB_BACKUPS változója szabályozza (alapértelmezés: 5). Egy mentés mérete mintegy 1 MB az /usr minden 1 GB-jára.

7.2.6 Forráscsomagok telepítése és lefordítása

A forrásfájlokat tartalmazó csomagok .src.rpm (source RPM, forrás RPM) kiterjesztéssel rendelkeznek.

TANÁCS: A forráscsomagok átmásolhatók a telepítési adathordozóról a merevlemezre és a YaST segítségével csomagolhatók ki. A csomagkezelo azonban nem jelzi, hogy telepítve vannak ([i]). Ez azért van, mert a forráscsomagok nem kerülnek be az RPM-adatbázisba. Csak az operációs rendszer telepített szoftverei vannak felsorolva az RPM-adatbázisban. Egy forráscsomag telepítésekor csak a forráskód kerül be a rendszerbe.

Az alábbi könyvtáraknak az rpm és rpmbuild rendelkezésére kell állniuk az /usr/src/packages könyvtárban (hacsak nincsenek megadva egyedi beállítások például az /etc/rpmrc fájlban):

SOURCES

az eredeti forrásokhoz (.tar.bz2 vagy .tar.gz fájlok stb.) és a disztribúcióspecifikus módosításokhoz (általában .diff vagy .patch fájlok)

SPECS

a .spec fájlokhoz. Ezek az összeállítási (build) folyamatot vezérlo meta Makefile fájlokhoz hasonlók

BUILD

az összes forrás kicsomagolva, foltozva és lefordítva található meg ebben a könyvtárban

RPMS

ahol a kész bináris csomagok találhatók

SRPMS

itt találhatók a forrás RPM-ek

Egy forráscsomag YaST-tal történo telepítése közben az összes szükséges összetevo telepítodik az /usr/src/packages: könyvtárban: a forrás és a módosítások a SOURCES, a vonatkozó .spec fájl pedig a SPECS könyvtárban.

FIGYELMEZTETÉS: Ne kísérletezzen a rendszerkomponensekkel (glibc, rpm, sysvinit stb.), mivel ez veszélyezteti a rendszer muködoképességét.

Az alábbi példa a wget.src.rpm csomagot mutatja be. Telepítve a csomagot a YaST-tal, az alábbi listához hasonló fájlok kell, hogy megjelenjenek:

/usr/src/packages/SOURCES/nops_doc.diff
/usr/src/packages/SOURCES/toplev_destdir.diff
/usr/src/packages/SOURCES/wget-1.9.1+ipvmisc.patch
/usr/src/packages/SOURCES/wget-1.9.1-brokentime.patch
/usr/src/packages/SOURCES/wget-1.9.1-passive_ftp.diff
/usr/src/packages/SOURCES/wget-LFS-20040909.tar.bz2
/usr/src/packages/SOURCES/wget-wrong_charset.patch
/usr/src/packages/SPECS/wget.spec

Az rpmbuild -b X /usr/src/packages/SPECS/wget.spec parancs indítja el a fordítást. Az X helyére az összeállítási folyamat különbözo szakaszai kerülnek (a részletek a --help paraméterrel elindított program kimenetén, vagy az RPM-dokumentációban olvashatók). Alább csak egy egészen rövid magyarázat következik:

-bp

A források elokészítése az /usr/src/packages/BUILD könyvtárban: kicsomagolás és foltozás.

-bc

Ugyanaz, mint a -bp, de fordítással.

-bi

Ugyanaz, mint a -bp, de az összeállított szoftver telepítésével. Vigyázat: ha a csomag nem támogatja a BuildRoot funkciót, akkor elofordulhat, hogy felülíródnak egyes konfigurációs fájlok.

-bb

Ugyanaz, mint a -bi, de a bináris csomag létrehozásával. Ha a fordítás sikeres, a bináris fájl az /usr/src/packages/RPMS könyvtárban kell, hogy legyen.

-ba

Ugyanaz, mint a -bb, de a forrás RPM létrehozásával. Ha a fordítás sikeres, a bináris fájl az /usr/src/packages/SRPMS könyvtárban kell, hogy legyen.

--short-circuit

Egyes lépések kihagyása.

A létrehozott bináris RPM most már telepítheto az rpm -i, vagy még inkább az rpm -U paranccsal.. Az rpm-mel telepítve a csomag megjelenik az RPM-adatbázisban.

7.2.7 RPM-csomagok lefordítása a build segítségével

Sok csomag esetében az a veszély, hogy nemkívánatos csomagok is bekerülnek a futó rendszerbe az összeállítási folyamat közben. Ennek megakadályozására használható a build parancs, amelyik létrehoz egy jóldefiniált környezetet, amelyben a csomag összeállítása zajlik. E chroot-környezet létrehozásához a build parancsfájlnak meg kell adni a teljes csomagfát. Ez a fa biztosítható a merevlemezrol, NFS-en keresztül, vagy DVD-rol. A megfelelo helyet a build --rpms könyvtár parancs adja meg. Szemben az rpm paranccsal, a build parancs a forráskönyvtár SPEC fájlját keresi meg. A wget vadonatúj (a fenti példához hasonló) összeállításához, amennyiben a DVD a rendszerbe a /media/dvd ponton van felcsatolva, adja ki a következo parancsot, mint root felhasználó:

cd /usr/src/packages/SOURCES/
mv ../SPECS/wget.spec .
build --rpms /media/dvd/suse/ wget.spec

Létrejön egy minimális környezet a /var/tmp/build-root könyvtár alatt. A csomag ebben a környezetben készül el. Befejezés után az eredményül kapott csomagok a /var/tmp/build-root/usr/src/packages/RPMS könyvtárban találhatók.

A build parancsfájl többféle kiegészíto paraméter használatát is lehetové teszi. A parancsfájl például elonyben részesíthet saját RPM-eket, kihagyhatja az összeállítási környezet inicializálását, vagy a fenti fázisok közül egyre korlátozhatja az rpm parancs használatát. További információ a build --help paranccsal, vagy a build kézikönyvoldalán érheto el.

7.2.8 Eszközök az RPM-archívumokhoz és az RPM-adatbázishoz

A Midnight Commander (mc) képes megjeleníteni az RPM-archívumok tartalmát és kimásolni egy részüket. Az archívumokat virtuális fájlrendszerekként jeleníti meg, amelyekben a Midnight Commander szinte minden szokásos parancsa használható. A HEADER például az F3 billentyuvel tekintheto meg. Az archívumstruktúra bejárható a kurzorbillentyuk és az Enter segítségével. Az archívum egyes elemei kimásolhatók az F5 billentyuvel.

A KDE a kpackage eszközt biztosítja az rpm grafikus elotétprogramjaként. YaST-modulként egy teljes funkcióköru csomagkezelo is elérheto (lásd: Szakasz 3.0, Szoftver telepítése és eltávolítása).