Met grafische package managers is het installeren van nieuwe software een fluitje van een cent. Ook commandline tools zoals yum en zypper heb je zo onder de knie. Maar wist je dat het onderliggende rpm-commando nog een pak méér mogelijkheden bevat? Hier volgen enkele nuttige rpm-commando’s.

1. Pakketinfo

Met het rpm-commando kun je erg veel informatie over pakketten opvragen. Wil je enkel weten of een pakket geïnstalleerd is? Gebruik dan rpm -q <pakketnaam>. rpm toont je dan meteen ook het versienummer. Met rpm -ql <pakketnaam> krijg je een lijst van alle bestanden in het pakket. rpm -qf <bestandsnaam> doet dan weer net het omgekeerde: tot welk pakket behoort een bepaald bestand? Ook interessant -vooral bij security updates- is de changelog. Die vraag je op met rpm -q –changelog <pakketnaam>. Bovenstaande commando’s werken enkel op geïnstalleerde pakketten. Wil je dezelfde informatie opvragen voor een .rpm-bestand dat nog niet geïnstalleerd is? Voeg dan de -p-optie toe, bijvoorbeeld: rpm -qpi <rpm-bestand>.

2. Dependencies

De meeste pakketten staan niet op zichzelf, maar zijn afhankelijk van andere pakketten voor een goede werking. Met het rpm-commando kun je die dependencies eenvoudig achterhalen. Zo geeft het commando rpm -q –requires <pakketnaam> een lijst van pakketten die <pakketnaam> nodig heeft. De –provides-optie geeft dan weer welke dependencies een bepaald pakket kunt invullen. Bij lib*-pakketten kunnen dat bijvoorbeeld meerdere .so-bestanden zijn. Maar je kunt de vraag ook omdraaien. Wil je weten welke pakket een bepaalde dependency kunt oplossen? Gebruik dan –whatprovides. En met –whatrequires vind je dan weer alle pakketten die diezelfde dependency hebben. In listing 1 zie je enkele voorbeelden.

 

$ rpm -q –requires tomcat5

librt.so.1()(64bit) 

libz.so.1()(64bit)

$ rpm -q –whatprovides libz.so.1

zlib-1.2.3-7.el5.i386

$ rpm -q –whatrequires libz.so.1

cairo-1.2.4-5.el5.i386

coolkey-1.1.0-15.el5.i386

cups-libs-1.3.7-30.el5_9.3.i386

3. Scripts

Voor of na een installatie, upgrade of de-installatie van een pakket worden er vaak allerlei scripts uitgevoerd. Denk bijvoorbeeld aan het aanmaken van gebruikers, activeren van een service, controleren van bepaalde omgevingsvariabelen, enzovoorts. Elke rpm bevat vier mogelijke scripts: preinstall, postinstall, preuninstall en postuninstaal. Met rpm -q –scripts <pakketnaam> krijg je die scripts te zien. Wil je de scripts nakijken voordat je het pakket installeert? Dat kan met rpm -qp –scripts <.rpm-bestand>. Gebruik je yum om pakketten te installeren, voeg dan de –downloadonly-optie toe aan yum. De pakketten worden dan gedownload naar /var/cache/yum/<repository naam>/packages, maar niet geïnstalleerd. Zo kun je ze eerst met rpm -qp onderzoeken alvorens ze te installeren.

4. Alles in orde?

De rpm-database bevat niet enkel een overzicht van bestanden en dependencies, maar ook van timestamps, checksums, bestandspermissies, enzovoorts. Op die manier kun je gemakkelijk controleren of de bestanden van een pakket na installatie gewijzigd zijn of niet. Dat is vooral handig als je vermoedt dat een bepaald pakket niet meer correct functioneert of als je alweer vergeten bent welke configuratiebestanden je allemaal had aangepast. rpm -V <pakketnaam> toont je alle gewijzigde bestanden van het pakket in kwestie. In de eerste kolom van de uitvoer zie je verschillende codes staan, zoals S of 5. Die duiden aan wat er precies gewijzigd is (S = grootte, 5 = MD5-checksum. In de manpage van rpm vind je een volledig overzicht.)

5. Query format

Op 64-bitssystemen krijg je soms tweemaal hetzelfde pakket in de output van rpm -q. Dat gebeurt wanneer er van bepaalde pakketten ook een 32-bitsversie geïnstalleerd is, bijvoorbeeld als dependency van een 32-bits only pakket. Het enige verschil tussen beide pakketten is dan de architectuur: x86_64 of i386. Helaas toont rpm -q nooit de architectuur van het pakket. Maar dat kun je oplossen door een aangepast query format te specificeren met –qf: zie listing 2 voor een voorbeeld. Je kunt trouwens meer dan 150 variabelen gebruiken in het query format: het commando rpm –querytags geeft je de volledige lijst.

 

$ rpm -q readline

readline-5.1-3.el5

readline-5.1-3.el5

$ rpm -q –qf ‘%{name}-%{version}-%{release}.%{arch}\n’ readline

readline-5.1-3.el5.x86_64

readline-5.1-3.el5.i386

$ cat ~/.rpmmacros

%_query_all_fmt %{name}-%{version}-%{release}.%{arch}

 

6. Macro’s

De –qf-optie uit tip 6 is nogal omslachtig om steeds opnieuw in te voeren. Wil je dat die optie standaard wordt toegepast bij elk rpm-commando? Maak dan een bestand ~/.rpmmacros aan met de inhoud uit listing 2. Dat bespaart je heel wat typewerk in de toekomst.