---
title:  "Handige tips met RPM"
excerpt: "Velen gebruiken uitsluitend YUM of DNF als het neerkomt op softwarebeheer maar RPM heeft ook nog altijd een paar handige trukken om te leren!"
coverImage: "/RPM/RPM.png"
date:   "2023-10-25T12:00:00.000Z"
author: Eli Winderickx
hero_image: /RPM.png
category: RPM,Linux
---
## 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:

```bash
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:

```bash
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:
```bash
# 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. 
```bash
# 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.

```bash
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:
```bash
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.
```bash
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:

```bash
# 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:
```bash
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.

```bash
rpm -q --scripts openssh-server
```