The Geek Diary

Het onderhouden van software met behulp van RPM (Red Hat Package Manager)

RPM is een krachtige software manager die gebruikt kan worden om individuele software pakketten te bouwen, te installeren, op te vragen, te verifiëren, bij te werken en te verwijderen. Een RPM pakket bestaat uit een archief van bestanden, en pakket informatie zoals naam, versie, een beschrijving en informatie over afhankelijkheden van andere RPM pakketten.

RPM is meer dan een Red Hat specifiek gereedschap. Veel andere moderne distributies, zoals Ubuntu en SuSE, gebruiken ook RPM. Voordelen van het gebruik van RPM zijn onder meer:

  • Simplified software distribution, installation, upgrading and removal
  • Garanties dat:
    • vereiste software op het systeem wordt geïnstalleerd.
    • versies van de vereiste software compatibel blijven.
    • lokaal gewijzigde configuratiebestanden niet worden geclobbed wanneer de RPM wordt bijgewerkt.
    • lokaal gewijzigde configuratiebestanden worden opgeslagen met een “.rpmsave” achtervoegsel als het pakket later wordt verwijderd.
  • Maakt het mogelijk te certificeren dat geïnstalleerde software niet is gewijzigd, gemodificeerd, beschadigd of op enigerlei wijze veranderd.

RPM bewaart informatie over geïnstalleerde pakketten onder de “/var/lib/rpm” directory.

De onderdelen van het RPM-hulpprogramma zijn:

  • Een aangepaste database met informatie over alle software die op het systeem is geïnstalleerd, verzameld uit de afzonderlijke RPM’s.
  • Een “/bin/rpm” executable.
  • Internet-toegankelijke repositories van beschikbare RPM-pakketten.

Types van RPM-pakketten

RPM-pakketten zijn er in twee categorieën: source en binair.

Een source RPM is altijd te herkennen doordat de bestandsnaam eindigt met de string “.src.rpm”. In een broncode RPM zitten niet alleen de originele programma broncode bestanden, maar ook scripts die het mogelijk maken de code automatisch te hercompileren, automatisch te installeren, en automatisch te verwijderen. Er zitten geen uitvoerbare bestanden voor eindgebruikers in een bron-RPM. Meestal zijn alleen ontwikkelaars geïnteresseerd in een bron-RPM.

Een binaire RPM bevat de eindgebruikerscomponenten van een RPM. Binaire RPM bestandsnamen identificeren de host architectuur voor de inhoud. Bijvoorbeeld, het binaire RPM-bestand:

bash-3.1-16.1.x86_64.rpm

Het bevat bestanden die alleen bruikbaar zijn op een 64-bit Intel X86-architectuur CPU. Andere veel voorkomende architectuurwaarden zijn “i386” voor 32-bit Intel hosts. Sommige binaire RPM’s kunnen op elke CPU-architectuur geïnstalleerd worden omdat hun bestanden op elke host werken; een voorbeeld van deze “.noarch.rpm” pakketten is de “tzdata” RPM die informatie bevat over wereldtijdzones. Om je systeem te updaten met de laatste versie van een pakket, heb je de meest recente binaire RPM ervoor nodig.

RPM Naamgeving

Elk RPM pakket zit in een enkel bestand. De bestandsnaam heeft verschillende velden om de inhoud van het pakket volledig te identificeren. Hoewel de RPM tools zelf niet vertrouwen op de bestandsnaam zelf, zou je de conventie van de bestandsnaam moeten begrijpen om je te helpen het juiste pakket te identificeren of te downloaden. Hier is een voorbeeld RPM bestandsnaam:

bash-3.1-16.1.x86_64.rpm

Deze RPM is voor de BASH shell (“/bin/bash”). De bestandsnaam bestaat uit verschillende delen:

--..rpm

waar:

    is de naam van het programma of pakket. Deze wordt meestal toegekend door de auteur van het programma. In ons voorbeeld hebben de ontwikkelaars besloten hun product “bash” te noemen om redenen die hen amusant leken.

  • versie] identificeert welke editie van de software deze RPM bevat. Het nummer wordt toegekend door de auteur van het programma. Door het nummer te gebruiken kan men bepalen welke versie van de broncode van de auteur is gebruikt om de RPM te genereren.
  • geeft het editienummer van het RPM-bestand zelf en niet de versie van de bronbestanden van de auteur. Een bijgewerkte RPM kan worden uitgegeven om een gepatchte versie van de oorspronkelijke software van de auteur te leveren. De patch hoeft niet van de oorspronkelijke ontwikkelaar te komen, dus wordt de RPM opgewaardeerd in plaats van de .
  • beschrijft de inhoud van de RPM en vertelt of dit bestand de productbron bevat (een “.src.rpm”), architectuur-onafhankelijke bestanden (een “.noarch.rpm”), of bestanden die alleen op een bepaald host type geïnstalleerd mogen worden (een “.sh.rpm” werkt alleen op een STRONGHOLD embedded processor).
Opmerking: De wordt gecontroleerd door de oorspronkelijke auteur en de wordt gecontroleerd door degene die de RPM heeft gemaakt.

Uitleg over RPM Versies

De RPM en velden zijn niet altijd strikt numeriek en kunnen naast gewone cijfers ook andere tekens bevatten. Het is gebruikelijk om zowel een versie “10” als een “10a” versie van hetzelfde pakket te zien. Soms kan het kiezen van de meest recente versie lastig zijn. Hier volgt hoe RPM zelf intern versie- en releasenummers vergelijkt:

1. Verwijder het voorvoegsel en het achtervoegsel “..rpm”. Bijvoorbeeld:
“bash-3.1-16.1.x86_64.rpm” wordt “3.1-16.1” en “bash-3.1-16.5a.1.x86_64.rpm” wordt “3.1-16.5a.1”

2. Vergelijk de overgebleven tekenreeksen teken-voor-karakter, van links naar rechts, totdat u een cijfer tegenkomt. Als de tekens verschillen, is het teken dat later in de collatie-reeks komt de meest recente RPM.

3. Als een cijfer wordt gevonden, converteert u de hele reeks cijfers in een enkel binair getal. In ons voorbeeld worden de twee tekens “16” gecombineerd tot een waarde van zestien (16). De resulterende binaire waarden worden vergeleken en de grootste waarde is de meest recente RPM. Een RPM met a van “0010” is dus recenter dan een met a van “9”.

Stappen 2 en 3 worden zo nodig herhaald totdat er een verschil optreedt.

Bestanden installeren en verwijderen

Opmerking: Meestal mag er maar één of van een RPM tegelijk worden geïnstalleerd.

Latere versies worden meestal geïnstalleerd met de “-U” (update) RPM-functie in plaats van de “-i” RPM-functie. Veel voorkomende uitzonderingen op de slechts-één RPM regel zijn de kernel RPM’s. Een systeem heeft vaak meerdere versies van kernels geïnstalleerd; RPM heeft een lijst van welke RPM’s meerdere versies geïnstalleerd mogen hebben. Om één versie te verwijderen wanneer er meerdere zijn geïnstalleerd, moet je de pakketnaam en versie volledig specificeren.

Op de x86_64 architectuur is het gebruikelijk om zowel de 32-bit “.i386” als de 64-bit “.x86_64” RPM pakketten geïnstalleerd te hebben om zowel 32-bit als 64-bit applicaties te ondersteunen. Normaal gesproken geeft RPM de architectuur van een pakket niet weer bij een query, maar u kunt deze handmatig weergeven.

Installatie en verwijdering

# 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)

Common Options
Output: -v (verbose – bestandsnaam), -h (hash)
Voorwaarden: -nodeps, -replacefiles, -force (wees voorzichtig hier !!!
Herplaatsen: -excludepath, -prefix, -relocate, -badreloc, -root
URL Ondersteuning: ftp, http

Voorbeelden:

# 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

Hint: Gebruik nooit, maar dan ook nooit, de “-U” optie om een nieuwe kernel RPM te installeren. De “-U” update functie verwijdert eerst de huidige RPM van het systeem en probeert dan de nieuwe RPM te installeren. Elk probleem dat de installatie van de nieuwe RPM verhindert, zal het systeem onopstartbaar maken. Dit is niet wat u wilt, dus gebruik altijd de “-i” optie om een kernel RPM te installeren.

Vraag (Pakketten en/of Informatie)

Gebruik een vraag voor informatie over geïnstalleerde pakketten. U kunt een query uitvoeren voor alle geïnstalleerde pakketten, of voor een enkel geïnstalleerd pakket. U kunt ook uitvinden welke RPM een bepaald bestand levert.

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

Informatie
default (pakketnaam)
-i: algemene informatie
-l: bestandslijst

Voorbeelden:

# 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)

Hint: Bij het zoeken naar een bepaald RPM pakket wanneer de exacte naam niet bekend is, wordt vaak een commandopijplijn gebruikt zoals:

$ rpm -qa | grep foo

wordt vaak gebruikt. Latere versies van de RPM-tool laten dit beknopt toe als:

$ rpm -qa '*foo*'

Queries – Verificatie (Bestanden)

De RPM-database bevat vele attributen over elk bestand dat door een RPM is geïnstalleerd. U kunt de huidige status van het bestand vergelijken met de informatie die door RPM is gecatalogiseerd toen het pakket werd geïnstalleerd.

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

Opmerking: Veel Linux distributies bevatten een “prelink” RPM die probeert de tijd te verminderen die nodig is om een applicatie te starten die gebruik maakt van een gedeelde bibliotheek (de meeste applicaties gebruiken minstens één gedeelde bibliotheek en mogelijk tientallen) door speciale informatie direct in het programmabestand van een applicatie toe te voegen.

Door deze informatie toe te voegen starten applicaties sneller, maar de bestandswijzigingen maken de meeste bestandsattributen in de RPM database ongeldig, zoals de laatste wijzigingsdatum van het bestand, de bestandsgrootte en de MD5 checksum van het bestand.

Vragen – Verificatie (Pakketten)

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

Voorbeelden:

# 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)

Repair de RPM database

De RPM tool gebruikt zijn eigen aangepaste database implementatie om zijn informatie te bevatten. Soms kan die database beschadigd raken; symptomen zijn dat een geïnstalleerd RPM pakket ontbreekt; of pogingen om een RPM bij te werken hangen gewoon. Als je RPM database hangt of corrupt is, kan je proberen om het te repareren met deze commando’s. Er wordt niet gegarandeerd dat dit proces werkt.

U moet ingelogd zijn met superuser privilege (aka “root”) voor deze stappen. De commando’s kunnen rechtstreeks in een root terminal venster worden gekopieerd en geplakt.

1. Zorg ervoor dat er geen RPM processen meer draaien op je systeem. Gebruik het ps commando om ze te identificeren. 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.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *