The Geek Diary

Underhålla programvara med hjälp av RPM (Red Hat Package Manager)

RPM är en kraftfull programvaruhanterare som kan användas för att bygga, installera, fråga, verifiera, uppdatera och avinstallera enskilda programvarupaket. Ett RPM-paket består av ett arkiv med filer och paketinformation som namn, version, en beskrivning och information om beroenden av andra RPM-paket.

RPM är mer än ett Red Hat-specifikt verktyg. Många andra moderna distributioner, som Ubuntu och SuSE, använder också RPM. Fördelarna med att använda RPM är bland annat:

  • Enklare distribution, installation, uppgradering och borttagning av programvara
  • Garanterar att:
    • förutsatt programvara installeras på systemet.
    • versioner av förutsatta programvaror förblir kompatibla.
    • lokalt modifierade konfigurationsfiler blir inte borttagna när RPM uppdateras.
    • lokalt modifierade konfigurationsfiler sparas med ett ”.rpmsave”-suffix om paketet senare raderas.
  • Gör det möjligt att intyga att installerad programvara inte har ändrats, modifierats, skadats eller ändrats på något sätt.

RPM behåller information om installerade paket i katalogen ”/var/lib/rpm”.

Komponenterna i RPM-verktyget är:

  • En anpassad databas som innehåller information om alla programvaror som är installerade på systemet och som samlats in från de enskilda RPM:erna.
  • En körbar fil ”/bin/rpm”.
  • Internettillgängliga arkiv med tillgängliga RPM-paket.

Typer av RPM-paket

RPM-paket finns i två kategorier: källkodspaket och binära paket.

Ett källkods-RPM kan alltid kännas igen eftersom filnamnet slutar med strängen ”.src.rpm”. I ett källkod-RPM finns inte bara originalprogrammets källkodsfiler utan även skript som gör att koden kan kompileras om automatiskt, installeras automatiskt och tas bort automatiskt. Det finns inga exekverbara filer för slutanvändare i ett källkod-RPM. Vanligtvis är det bara utvecklare som är intresserade av en källkod-RPM.

En binär RPM innehåller slutanvändarkomponenterna i en RPM. Binära RPM-filnamn identifierar värdarkitekturen för innehållet. Till exempel den binära RPM-filen:

bash-3.1-16.1.x86_64.rpm

Den innehåller filer som endast kan användas på en 64-bitars Intel X86-arkitektur CPU. Andra vanliga arkitekturvärden är ”i386” för 32-bitars Intel-värdar. Vissa binära RPM kan installeras på alla CPU-arkitekturer eftersom deras filer fungerar på alla värdar; ett exempel på dessa ”.noarch.rpm”-paket är RPM:en ”tzdata” som innehåller information om världens tidszoner. För att uppdatera ditt system med den senaste versionen av ett paket behöver du den senaste binära RPM:en för det.

RPM-namnordning

Varje RPM-paket finns i en enda fil. Filnamnet har flera fält för att fullständigt identifiera paketets innehåll. Även om RPM-verktygen i sig inte förlitar sig på själva filnamnet bör du förstå filnamnskonventionen för att hjälpa dig att identifiera eller hämta rätt paket. Här är ett exempel på ett RPM-filnamn:

bash-3.1-16.1.x86_64.rpm

Detta RPM är för BASH-skalet (”/bin/bash”). Filnamnet består av flera delar:

--..rpm

var:

    är namnet på programmet eller paketet. Det tilldelas vanligtvis av programmets författare. I vårt exempel beslutade utvecklarna att döpa sin produkt till ”bash” av skäl som verkade roliga för dem.

  • version] identifierar vilken utgåva av programvaran som denna RPM innehåller. Numret tilldelas av programmets författare. Genom att använda numret kan man avgöra vilken version av författarens källfiler som användes för att generera RPM:en.
  • anger upplaganummer för själva RPM-filen och inte versionen av författarens källfiler. En uppdaterad RPM kan utfärdas för att tillhandahålla en patchad version av författarens ursprungliga programvara. Patchen behöver inte ha kommit från den ursprungliga utvecklaren, så RPM:en ökas i stället för .
  • beskriver innehållet i RPM:en och talar om huruvida filen innehåller produktens källkod (en ”.src.rpm”), arkitektoniskt oberoende filer (en ”.noarch.rpm”) eller filer som endast får installeras på en viss värddator (en ”.src.rpm”) eller filer som endast får installeras på en viss värddator (en ”.sh.rpm” fungerar endast på en STRONGHOLD embedded processor).
Notera: The kontrolleras av originalförfattaren och the kontrolleras av den som konstruerat RPM:n.

Förståelse av RPM-versioner

RPM och fälten är inte alltid strikt numeriska och kan innehålla andra tecken än vanliga siffror. Det är vanligt att se både en version ”10” och en ”10a”-version av samma paket. Ibland kan det vara svårt att välja den senaste versionen. Här är hur RPM själv jämför versions- och utgivningsnummer internt:

1. Ta bort prefixet och suffixet ”..rpm”. Till exempel:
”bash-3.1-16.1.x86_64.rpm” blir ”3.1-16.1” och ”bash-3.1-16.5a.1.x86_64.rpm” blir ”3.1-16.5a.1”

2. Jämför de återstående strängarna tecken för tecken, från vänster till höger tills en siffra hittas. Om tecknen skiljer sig åt är det tecken som kommer senare i kollateringssekvensen det senaste RPM:et.

3. När en siffra påträffas omvandlar du hela sekvensen av siffror till ett enda binärt tal. I vårt exempel kombineras de två tecknen ”16” till värdet sexton (16). De resulterande binära värdena jämförs och det högre värdet är det senaste RPM. Således är en RPM med a på ”0010” nyare än en med a på ”9”.

Steg 2 och 3 upprepas vid behov tills en skillnad uppstår.

Installation och borttagning av filer

Notera: Vanligtvis kan endast en eller av en RPM installeras på en gång.

Senare versioner installeras vanligen med hjälp av RPM-funktionen ”-U” (update) i stället för med RPM-funktionen ”-i”. Vanliga undantag från regeln om endast en RPM är kärn-RPM:erna. Ett system har ofta flera versioner av kärnor installerade; RPM har en lista över vilka RPM:er som kan ha flera versioner installerade. Om du vill ta bort en version när flera är installerade måste du ange paketets namn och version fullt ut.

På x86_64-arkitekturen är det vanligt att både 32-bitars ”.i386” och 64-bitars ”.x86_64” RPM-paket är installerade för att stödja både 32-bitars och 64-bitars program. Normalt visar RPM inte arkitekturen för ett paket på en fråga, men du kan visa den manuellt.

Installation och borttagning

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

Gemensamma alternativ
Output: -v (verbose – filnamn), -h (hash)
Förutsättningar: -v (verbose – filnamn), -h (hash)
Förutsättningar: -nodeps, -replacefiles, -force (var försiktig här !!!!)
Relokalisering: -excludepath, -prefix, -relocate, -badreloc, -root
URL-stöd: ftp, http

Exempel:

# 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

Hinvisning: Använd aldrig, aldrig, någonsin, alternativet ”-U” för att installera en ny kernel RPM. Uppdateringsfunktionen ”-U” raderar först det aktuella RPM:et från systemet och försöker sedan installera det nya RPM:et. Varje problem som hindrar den nya RPM:en från att installeras gör att systemet inte kan startas. Detta är inte vad du vill, så använd alltid ”-i” för att installera ett kärn-RPM.

Förfrågningar (paket och/eller information)

Använd en förfrågan för att få information om installerade paket. Du kan fråga mot alla installerade paket eller mot ett enskilt installerat paket. Du kan också ta reda på vilket RPM som levererar en viss fil.

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

Information
default (paketnamn)
-i: allmän information
-l: fillista

Exempel:

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

Hänvisning: Vid sökning efter ett visst RPM-paket när det exakta namnet inte är känt används ofta en kommandopipeline som:

$ rpm -qa | grep foo

. Senare versioner av RPM-verktyget gör det möjligt att göra detta kortfattat som:

$ rpm -qa '*foo*'

Förfrågningar – verifiering (filer)

RPM-databasen innehåller många attribut om varje fil som installeras av ett RPM. Du kan verifiera filens aktuella status mot den information som katalogiserades av RPM när paketet installerades.

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

Notera: Många Linuxdistributioner innehåller en ”prelink”-RPM som försöker minska den tid som behövs för att starta ett program med hjälp av ett delat bibliotek (de flesta program använder minst ett delat bibliotek och potentiellt dussintals) genom att lägga till särskild information direkt i ett programs programfil.

Informationen gör att programmen startar snabbare, men filändringarna ogiltigförklarar de flesta av filattributen i RPM-databasen, t.ex. datumet för den senaste filändringen, filstorleken och filens MD5-kontrollsumma.

Förfrågningar – verifiering (paket)

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

Exempel:

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

Reparera RPM-databasen

RPM-verktyget använder en egen anpassad databasimplementation för att innehålla sin information. Ibland kan databasen bli skadad, vilket bland annat innebär att ett installerat RPM-paket saknas eller att försök att uppdatera ett RPM-paket helt enkelt hänger. Om din RPM-databas hänger eller är skadad kan du försöka reparera den med dessa kommandon. Det är inte garanterat att denna process fungerar.

Du måste vara inloggad med superuser-privilegier (alias ”root”) för dessa steg. Kommandona kan kopieras och klistras in direkt i ett terminalfönster för root.

1. Kontrollera att det inte finns några RPM-processer kvar som körs på ditt system. Använd kommandot ps för att identifiera dem. 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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *