blog_hero_Handige tips met RPM

Handige tips met RPM

Oct 25 2023

RPM vs YUM/DNF

In der oude tijde gebruikte iedereen RPM op RHEL gebasseerde systemen. Met deze tool kan je RPM pakketten installeren, verwijderen, updaten en informatie vergaren. Dat werkt heel goed met lokale RPM-bestanden. Helaas zijn zo'n bestanden niet altijd eenvoudig beschikbaar. De evolutie naar een repository systeem was dan logisch. Eerst was er YUM (Yellowdog Updater Modified afkomstig van Yellowdog Linux) maar sinds enkele jaren wordt er gebruik gemaakt van DNF (DaNdiFied yum). Beide van deze systemen kunnen naar netwerklocaties verbinden (vaak over http of https) om dan software beschikbaar te krijgen. Inhoudelijk zijn dat nog steeds RPM-bestanden en wordt alles nog steeds in een RPM database opgeslagen. Dat zorgt er dus voor dat we lokaal een schat aan informatie ter beschikking hebben.

RPM raadplegen

Het zal geen groot mysterie zijn waarom de query optie in RPM, -q is. Van hieruit kunnen we de RPM database raadplegen. Veelal gebeurt dat met twee soorten opties:

  • selectie opties (Waarover willen we inforwatie)
  • query opties (welke informatie willen we)

Selectie opties

De meest eenvoudige query die we kunnen maken is met de -a flag. Deze geeft ons ineens alle pakketten weer. Dat lijkt op eerste zicht maar een saaie representatie maar dit kan je ook combineren met --qf om het overzicht op te maken. Hieronder geven we zo een overzicht van alle pakketten met de Vendor op iedere lijn:

rpm -qa --qf '%{NAME} %{VENDOR}'

Met de Query format kan je ook andere informatie bekomen zoals installatiedatum, versie, ... alle opties kan je bekomen door rpm --querytags uit te voeren zonder extra opties.

Sommige software pakketten zijn ook in een groep opgedeeld. Ook dit kunnen we gebruiken om te filteren en details op te zoeken:

rpm -qa --qf '%{NAME}\t%{GROUP}' | grep -v 'Unspecified'
# Hier komt vb Public Keys uit als group
# Daar kunnen we ook nog een selectie van vragen
rpm -qg 'Public Keys'

Als we een RPM bestand zelf hebben, kunnen we daarop specifiek ook manipulaties doen. Dat kunnen we met de -p flag doen:

# de uitkomst van onderstaand commando geeft de naam van het pakket; openssh-server alsook welke versie het is. 
rpm -qp openssh-server-9.0p1-17.fc38.x86_64.rpm

Als je ook een RPM bestand snel wilt downloaden kan je dat met DNF; dnf download openssh-server

Handiger is misschien vanuit selectie standpunt in kunnen opzoeken tot welk pakket een specifiek bestand hoort.

# Hiermee komen we opnieuw bij onze openssh-server uit
rpm -qf /etc/ssh/sshd_config

Query opties

Nu we weten welke pakketten we hebben, kunnen we ook gaan proberen om naar de inhoud te gaan kijken van die pakketten. Dit is natuurlijk iets meer waardevollere informatie dan enkel de pakketnaam. Zo kunnen we met -l een lijst krijgen van alle bestanden en mappen die geïnstalleerd zullen worden.

rpm -qpl openssh-server-9.0p1-17.fc38.x86_64.rpm

We kunnen met de -i ook meer meta informatie krijgen van een bepaald pakket:

rpm -qfi /etc/ssh/sshd_config

Als je verder wilt weten welke documentatie er beschikbaar is voor een specifiek pakket, kan je dat ook opvragen met de -d flag.

rpm -qd openssh-server

Een stapje verder? Ok! Stel je hebt per ongeluk een configuratie te veel aangepast en je wilt terug het originele bestand in de plaats brengen:

# Eerst zoeken we tot welk pakket dit bestand behoort
rpm -qf /etc/ssh/sshd_config
# Daarna kunnen we het RPM bestand downloaden
dnf download openssh-server
# Controleer of het gewenste bestand aanwezig is
rpm -qcp openssh-server-9.0p1-17.fc38.x86_64.rpm
# Nu kunnnen we het RPM bestand uitpakken en de nodige files daaruit kopieren.
rpm2cpio openssh-server-9.0p1-17.fc38.x86_64.rpm | cpio -id "*/etc/ssh/sshd_config"

Het rpm2cpio commando is ook geweldig om te weten te komen welke rechten of eigenaar/group ingesteld staat op de bestanden:

rpm2cpio openssh-server-9.0p1-17.fc38.x86_64.rpm | cpio -tv

Een laatste weetje dat ik je wil meegeven is hoe de software geïnstalleerd wordt. Dat gebeurt met een script. Zowel de installatie, upgrade of het verwijderen van een pakket gebeurt door een script. Deze kan je voor een pakket ook opvragen. Meestal dienen die scripts ook voor gebruikers aan te maken of om bepaalde migraties te doen.

rpm -q --scripts openssh-server