The Geek Diary

Szoftverek karbantartása az RPM (Red Hat Package Manager)

A RPM egy hatékony szoftverkezelő, amely az egyes szoftvercsomagok létrehozására, telepítésére, lekérdezésére, ellenőrzésére, frissítésére és eltávolítására használható. Egy RPM csomag egy fájlokból álló archívumból és csomaginformációkból áll, például név, verzió, leírás és más RPM csomagoktól való függőségi információk.

A RPM több, mint egy Red Hat specifikus eszköz. Sok más modern disztribúció, például az Ubuntu és a SuSE is használja az RPM-et. Az RPM használatának előnyei a következők:

  • Egyszerűsített szoftverterjesztés, telepítés, frissítés és eltávolítás
  • Garancia, hogy:
    • az előfeltételes szoftverek telepítése a rendszerre.
    • az előfeltételes szoftverek verziói kompatibilisek maradnak.
    • A helyileg módosított konfigurációs fájlok nem kerülnek klónozásra az RPM frissítésekor.
    • A helyileg módosított konfigurációs fájlok mentése egy “.rpmsave” utótaggal, ha a csomagot később törli.
  • Megerősíti, hogy a telepített szoftvereket nem változtatták meg, nem módosították, nem rontották el vagy nem változtatták meg semmilyen módon.

A RPM a “/var/lib/rpm” könyvtárban tárolja a telepített csomagokról szóló információkat.

A RPM eszköz összetevői:

  • Egy egyéni adatbázis, amely az egyes RPM-ekből összegyűjtött információkat tartalmazza a rendszerre telepített összes szoftverről.
  • A “/bin/rpm” futtatható program.
  • A rendelkezésre álló RPM csomagok interneten elérhető tárolói.

A RPM csomagok típusai

A RPM csomagok két kategóriába sorolhatók: forrás és bináris.

A forrás RPM mindig felismerhető, mivel a fájlnév a “.src.rpm” karakterlánccal végződik. Egy forrás RPM-ben nem csak az eredeti program forráskód fájljai vannak, hanem olyan szkriptek is, amelyek lehetővé teszik a kód automatikus újrafordítását, automatikus telepítését és automatikus eltávolítását. A forrás RPM-ben nincsenek végfelhasználói futtatható fájlok. Általában csak a fejlesztőket érdekli a forrás RPM.

A bináris RPM tartalmazza az RPM végfelhasználói komponenseit. A bináris RPM fájlnevek azonosítják a tartalomhoz tartozó hoszt architektúrát. Például a bináris RPM fájl:

bash-3.1-16.1.x86_64.rpm

Ez csak 64 bites Intel X86 architektúrájú CPU-n használható fájlokat tartalmaz. Más gyakori architektúraértékek közé tartozik az “i386” a 32 bites Intel processzorok esetében. Néhány bináris RPM telepíthető bármilyen CPU-architektúrára, mert a fájljaik bármely hoston működnek; egy példa ezekre a “.noarch.rpm” csomagokra a “tzdata” RPM, amely a világ időzónáira vonatkozó információkat tartalmazza. Ha frissíteni szeretné rendszerét egy csomag legújabb verziójával, szüksége lesz a hozzá tartozó legfrissebb bináris RPM-re.

RPM elnevezési séma

Minden RPM csomag egyetlen fájlban található. A fájlnév több mezőt tartalmaz a csomag tartalmának teljes azonosítására. Bár maguk az RPM-eszközök nem támaszkodnak magára a fájlnévre, meg kell értenie a fájlnévkonvenciót, hogy segítsen azonosítani vagy letölteni a megfelelő csomagot. Íme egy példa RPM fájlnév:

bash-3.1-16.1.x86_64.rpm

Ez az RPM a BASH shell (“/bin/bash”) számára készült. A fájlnév több részből áll:

--..rpm

hol:

    a program vagy csomag neve. A általában a program szerzője adja. Példánkban a fejlesztők a számukra mulatságosnak tűnő okokból döntöttek úgy, hogy a terméküket “bash”-nek nevezik el.

  • version] azonosítja, hogy ez az RPM a szoftver melyik kiadását tartalmazza. A számot a program szerzője jelöli ki. A szám segítségével meghatározható, hogy a szerző forrásainak melyik verzióját használták az RPM létrehozásához.
  • magának az RPM-fájlnak a kiadási számát adja meg, nem pedig a szerző forrásfájljainak verzióját. Egy frissített RPM kiadható úgy, hogy a szerző eredeti szoftverének javított verzióját szolgáltatja. A javításnak nem kell az eredeti fejlesztőtől származnia, így a .
  • az RPM helyett a .
  • leírja az RPM tartalmát, és megmondja, hogy ez a fájl tartalmazza-e a termék forrását (egy “.src.rpm”), architektúrafüggetlen fájlokat (egy “.noarch.rpm”), vagy olyan fájlokat, amelyek csak egy adott host-típusra telepíthetők (egy “.sh.rpm” csak STRONGHOLD beágyazott processzoron fog működni).
Megjegyzés: A az az eredeti szerző, a pedig az, aki az RPM-et készítette.

Az RPM-verziók megértése

Az RPM és a mezők nem mindig szigorúan numerikusak, és a közönséges számjegyeken kívül más karaktereket is tartalmazhatnak. Gyakran előfordul, hogy ugyanannak a csomagnak “10” és “10a” verziója is van. Néha trükkös lehet a legfrissebb verzió kiválasztása. Maga az RPM így hasonlítja össze a verziószámokat és a kiadási számokat:

1. Távolítsa el az előtagot és a “..rpm” utótagot. Például:
“bash-3.1-16.1.x86_64.rpm” lesz “3.1-16.1” és “bash-3.1-16.5a.1.x86_64.rpm” lesz “3.1-16.5a.1”

2. A fennmaradó karakterláncokat karakterről karakterre, balról jobbra haladva hasonlítsuk össze, amíg egy számjegyet nem találunk. Ha a karakterek különböznek, akkor amelyik karakter később következik az összehasonlítási sorrendben, az az újabb RPM.

3. Ha egy számjegyet találunk, alakítsuk át a teljes számjegysort egyetlen bináris számmá. Példánkban a két “16” karaktert tizenhat (16) értékké kombináljuk. Az így kapott bináris értékeket összehasonlítjuk, és a nagyobb érték az újabb fordulatszám. Így egy “0010” a értékű RPM újabb, mint egy “9” a értékű.

A 2. és 3. lépés szükség szerint megismétlődik, amíg a különbség meg nem jelenik.

Fájlok telepítése és eltávolítása

Megjegyzés: Általában egy RPM-nek egyszerre csak egy vagy több változata telepíthető.

A későbbi verziók telepítése általában a “-i” RPM funkció helyett a “-U” (update) RPM funkcióval történik. A csak egy RPM szabály alól gyakori kivételek a kernel RPM-ek. Egy rendszerre általában több kernelverzió van telepítve; az RPM tartalmaz egy listát arról, hogy mely RPM-ekből lehet több verziót is telepíteni. Egy verzió törléséhez, ha több is telepítve van, teljes mértékben meg kell adni a csomag nevét és verzióját.

Az x86_64 architektúrán gyakori, hogy a 32 bites “.i386” és a 64 bites “.x86_64” RPM csomagok is telepítve vannak, hogy mind a 32 bites, mind a 64 bites alkalmazásokat támogassák. Az RPM rendszerint nem jeleníti meg a csomag architektúráját a lekérdezéskor, de manuálisan megjelenítheti.

Telepítés és eltávolítás

# rpm -i --install (install new RPM; error if already installed)# rpm -U --upgrade (delete existing RPM, if any; install new)# rpm -F --freshen (update RPM only if package already installed)# rpm -e --erase (remove, delete, expunge)

Közös beállítások
Kimenet: (verbose – fájlnév), -h (hash)
Feltételek: -v (verbose – fájlnév), -h (hash)
Feltételek: -nodeps, -replacefiles, -force (BE CAREFUL HERE !!!)
Áthelyezés: -excludepath, -prefix, -relocate, -badreloc, -root
URL támogatás: ftp, http

Példák:

# rpm -ivh binutils-2.11.90.0.8-12.i386.rpm# rpm -Uvh finger-0.17-9-i386.rpm# rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm# rpm -e diffutils# rpm -e kernel-enterprise-2.4.9-e.12

Tipp: Soha, de soha ne használd a “-U” opciót egy új kernel RPM telepítéséhez. A “-U” frissítési funkció először törli az aktuális RPM-et a rendszerből, majd megpróbálja telepíteni az új RPM-et. Bármilyen probléma, amely megakadályozza az új RPM telepítését, a rendszert indíthatatlanná teszi. Ezt nem szeretné, ezért mindig a “-i” kapcsolót használja a kernel RPM telepítéséhez.

Kérdések (csomagok és/vagy információk)

A telepített csomagokkal kapcsolatos információk lekérdezésével. Az összes telepített csomagra vagy egyetlen telepített csomagra is lekérdezhet. Azt is megtudhatja, hogy melyik RPM szolgáltat egy adott fájlt.

# rpm -q # rpm -qa (all installed packages)# rpm -q package_name# rpm -qf (filename)# rpm -qp (package filename)

Információk
default (csomag neve)
-i: általános információk
-l: fájllista

Példák:

# rpm -qa# rpm -q kernel -i (information)# rpm -q kernel -l (files contained in package)# rpm -q kernel --requires (prereqs)# rpm -q kernel --provides (capabilities provided by package)# rpm -q kernel --scripts (scripts run during installation and removal)# rpm -q kernel --changelog (revision history)# rpm -q kernel -queryformat format (rpm --querytags for list of options)

Hip: Egy adott RPM-csomag keresésekor, ha a pontos neve nem ismert, általában egy olyan parancsvezetéket használunk, mint:

$ rpm -qa | grep foo

. Az RPM eszköz későbbi verziói lehetővé teszik, hogy ez tömören így történjen:

$ rpm -qa '*foo*'

Kérdezések – Ellenőrzés (fájlok)

Az RPM adatbázis számos attribútumot tartalmaz minden egyes, egy RPM által telepített fájlról. A fájl aktuális állapotát ellenőrizheti az RPM által a csomag telepítésekor katalogizált információk alapján.

# rpm -V package_name# rpm -Va (verify all)# rpm -Vf (filename)# rpm -Vp (package filename)

Megjegyzés: Sok Linux disztribúció tartalmaz egy “prelink” RPM-et, amely megpróbálja csökkenteni a megosztott könyvtárat használó alkalmazás indításához szükséges időt (a legtöbb alkalmazás legalább egy megosztott könyvtárat használ, esetleg több tucatot) azáltal, hogy közvetlenül az alkalmazás programfájljába speciális információkat ad.

Az információk hozzáadása valóban gyorsabbá teszi az alkalmazások indítását, de a fájl módosításai érvénytelenítik az RPM adatbázisában szereplő legtöbb fájlattribútumot, például a fájl utolsó módosításának dátumát, a fájl méretét és a fájl MD5 ellenőrző összegét.

Kérdések – Ellenőrzés (csomagok)

# rpm -import /mnt/cdrom/RPM-GPG-KEY# rpm -q gpg-pubkey# rpm --checksig m4-1.4.1-11.i386.rpm

Példák:

# rpm -qf /path/filename (what package owns filename)# rpm -qf /path/filename -i (what does it do)# rpm -qp m4-1.4.1-11.i386.rpm -l (files in m4)# rpm -qp m4-1.4.1-11.i386.rpm --requires (prereqs needed to install m4)# rpm -q --whatprovides glibc.so (what package provides requisite library)

A RPM-adatbázis javítása

A RPM-eszköz saját, egyéni adatbázis-implementációt használ az információk tárolására. Néha ez az adatbázis megsérülhet; a tünetek között szerepelnek olyan állítások, hogy egy telepített RPM csomag hiányzik; vagy az RPM frissítésére tett kísérletek egyszerűen megakadnak. Ha az RPM-adatbázis megakadt vagy sérült, megpróbálhatja megjavítani a következő parancsokkal. Ez a folyamat nem garantáltan működik.

Ezekhez a lépésekhez superuser (azaz “root”) jogosultsággal kell bejelentkeznie. A parancsok bemásolhatók és beilleszthetők közvetlenül a root terminál ablakába.

1. Győződjön meg róla, hogy a rendszerében nem futnak RPM-folyamatok. Használja a ps parancsot ezek azonosítására. Use the kill command to terminate any “rpm” processes you find; a “kill -9” may be necessary.

2. Delete the lock files that RPM uses:

# rm -f /var/lib/rpm/__db*

3. If you were experiencing a hanging “rpm” command, try it again. If it works, you are finished. If not, perform Step #1 and #2 again. Then proceed to the next step.

4. Make a backup of your RPM database:

# cd /var/lib# mkdir rpm-backup# rsync -av ./rpm/. ./rpm-backup/.

5. Rebuild your RPM database:

# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1

6. Retry your failed RPM command.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük