wordpress hosting - vpn - cloud - statistiekservice - email

Categorie op Package management

Handige tips voor het gebruik van yum

Downgraden van een package

Als je een vorige versie van een package via yum wilt installeren moet eerst de plugin voor yum geinstalleerd worden:

yum install yum-allowdowngrade

Hierna kan met de volledige naam een downgrade worden uitgvoerd met:

yum --allow-downgrade install {volledige packagennaam}

Beschikbare versies van een package vinden

Om te zien welke versies van een bepaald package beschikbaar zijn, wordt het onderstaande commando gegeven:

yum --showduplicates list {packagenaam}

Het maken van een RPM package

Het maken van een RPM package

vooraf

Er zijn allerlei goede redenen te verzinnen waarom een applicatie o.i.d. in plaats vanaf source te complileren en te installeren de installatie te doen via het packagemanagement systeem.

  • van alle geinstalleerde software is bekend welke versie geinstalleerd is
  • eventuele afhankelijkheden van andere software wordt inzichtelijk
  • mogelijkheid tot rollback indien na een update een applicatie o.i.d. niet of niet goed functioneert
  • sommige support contracten vereisen het gebruik van package-management

Een RPM package wordt bij voorkeur niet gemaakt indien met ingelogd is als root maar als gewone gebruiker

Voordat een RPM gemaakt kan worden zijn een aantal eenmalige stappen nodig:

  1. de rpm-build software
  2. de ontwikkelingomgeving
  3. een rpm-build directory structuur
  4. een GPG key

1. de rpm-build software

Het installeren van de rpm-build software is eenvoudig: yum install rpm-build

2. de ontwikkelomgeving

Afhankelijk van welke ontwikkelomgeving er nodig is om van de broncode (source) een executable te maken zijn onder andere de volgende pakketten nodig: gcc, make, automake, cpp enz. Raadpleeg hiervoor de documentatie van het desbetreffende programma om te zien wat er evt. nog meer nodig is.

3. een rpm-build directory structuur

Zoals al eerder aangegeven is het raadzaam om als gewone gebruiker en niet als root RPM’s te maken. Hiervoor is een rpm-build directory structuur nodig zoals volgt:

~/rpmbuild/BUILD
~/rpmbuild/SOURCES
~/rpmbuild/SRPMS
~/rpmbuild/RPMS
~/rpmbuild/SPECS

Zodra deze directory structuur is aangemaakt wordt deze in de configuratie van rpm-build aangegeven. Dit gebeurd in ~/.rpmmacros met behulp van de topdir parameter:

%_topdir /home/peter/rpmbuild

In dit voorbeeld staat de rpm directory structuur dus in de homedirectory van de user peter.

4. de GPG key

Om RPM’s te kunnen distruburern worden deze gesigned, voorzien van een digitale handtekening, zodat de RPMS’s als betrouwbaar kunenn worden gezien. Op het systeem waarop ze geinstellaard worden, wordt de publieke GPG sleutel (public key) geimporteerd en daardoor worden RPM’s die voorzien van een handtekening probleemloos geinstalleerd.

Aanmaken van een GPG sleutelpaar (keypair):

gpg --gen-key

Kies voor de standaardoptie (1) DSA and Elgmal, kies 1024 als grootte en kies (0) om een GPG sleutelpaar aan te maken wat niet verloopt. Vul de rest van de vragen in en wacht totdat het sleutelpaar is aangemaakt.

Bekijk het aangemaakte sleutelpaar door:

gpg --list-keys --fingerprint

Exporteer nu de publieke sleutel door in (dit voorbeeld naar het bestand gpg-public-key):

ggp --export -a {UID veld} > gpg-public-key

De aangemaakte GPG sleutel dient nog te worden toegevoegd aan het configuratiebestand ~/.rpmmacros van rpm-build:

%_gpg_name {UID veld}

Signen van een RPM package

Signen van RPM’s met GPG key

In Satellite kunnen eigen software channels worden aangemaakt. Hiermee kunnen aangepaste of eigen RPM’s via Satellite beschikbaar gesteld worden aan de clients. Een voorwaarde is wel dat de RPM packages zijn gesigned met een GPG key en dat de public GPG key voor de clients beschikbaar is en is importeerd. Hieronder wordt beschreven hoe dit kan worden uitgevoerd.

De werkzaamheden omvatten voor een deel een aantal eenmalig uit te voeren werkzaamheden en een aantal wat steeds voor elk RPM package terugkeert. Bij het aanmaken van een channel zal naast de ID ook om de GPG fingerprint worden gevraagd. Deze kan worden opgevraagd door: gpg --fingerprint.

Eenmalige werkzaamheden

Aanmaken GPG keypair
  • Maak een nieuwe GPG key aan met: gpg --gen-key om een GPG keypair aan te maken. Kies voor type 1, een DSA and Elgamal type key. Als keysize kan voor 2048 of 1024 gekozen worden. Een key van 2048 bits is uiteraard aanbevelingswaardig.
  • Na generatie moet de public key worden geexporteerd, dat kan met: gpg --export -a {naam vande key} > {naam waarmee de key is aangemaakt}.

Stel dat de key is aangemaakt met de naam Linuxteam en de public key wordt als LINUXTEAM-GPG-KEY opgeslagen:

gpg --export -a "LinuxTeam" > LINUXTEAM-GPG-KEY

Aanpassen van ~/.rpmmacros

Opmerking: Het beschrijven van het zelf maken van RPM packages valt buiten de scope van dit onderwerp.

Om tijdens het maken of het signen van bestaande RPM packages moet de ~/.rpmmacros file worden aangepast. In onderstaand voorbeeld wordt er vanuit gegaan dat als user root RPM packages gemaakt worden en de GPG key is aangemaakt met de naam LinuxTeam:

    %_gpg_name LinuxTeam
Importeren public key

De aangemaakte GPG key moet nog worden geimporteerd. Als we de bovengenoemde voorbeelden volgen dan wordt dit gedaan met:

rpm --import LINUXTEAM-GPG-KEY

Hiermee is de basis gelegd om bestaande of te bouwen RPM packages te signen met een GPG key.

GPG key beschikbaar in Satellite

Om van de GPG key gebruik te kunnen maken in RedHat Satellite moet de exporteerde public key beschikbaar worden gesteld. Dit is ook nodig als eigen software Channels worden aangemaakt. In bovenstaand voorbeeld is de public key ge-exporteerd als LINUXTEAM-GPG-KEY, als dit voorbeeld gevolgd wordt kan met cp LINUXTEAM-GPG-KEY /var/www/html/pub de public key beschikbaar worden gesteld.

Bij het aanmaken van een software Channel in Satellite wordt dan de volgende URL ingevuld onder Security: GPG

https://satellite.example.com/pub/LINUXTEAM-GPG-KEY

Terugkerende werkzaamheden

Signen van bestaande RPM packages

Een reeds bestaand RPM package, wat nog niet gesigned is door een andere GPG key, kan worden gesigned door:

rpm --resign {rpm package name}

Bouwen van RPM packages met GPG key

Als met rpmbuild zelf een RPM package gemaakt wordt kent rpmbuild een optie om het gegenereerde RPM package direct te signen. Als de bovenstaande eenmalige werkzaamheden zijn uitgevoerd dan kan dit door:

rpmbuild -v -ba --sign --clean SPECS/nrpe.spec

Opmerking: Als rpmbuild als root aangeroepen wordt dan wordt bovenstaande opdracht in /usr/src/redhat gegeven.

Controle van een GPG signed RPM package

Controleer een RPM package met: rpm -K -v {rpm package naam} Dit geeft soortgelijke uitvoer als van het RPM package nagios-plugins-1.4.14-1 de GPG signature wordt opgevraagd. In dit voorbeeld is het RPM package correct gesigned.

rpm -K -v nagios-plugins-1.4.14-1.x86_64.rpm
nagios-plugins-1.4.14-1.x86_64.rpm:
    Header V3 DSA signature: OK, key ID ae175d8e
    Header SHA1 digest: OK (9c915a0e8aa474bcfa6d0b3280753b1e83df295f)
    MD5 digest: OK (6f9c3b94b9a0fc8b51984c8acb8d4334)
    V3 DSA signature: OK, key ID ae175d8e

De laatste regel geeft aan: Key ID ae175d8e. Dit ID is te controleren door ,code>gpg –list-keys te geven en dit ID moet dan terugkomen bij de public key waarmee het RPM package gesigned is.