Création de RPM

Published: 30-11-2014

Updated: 27-08-2018

By: Maxime de Roucy

tags: centos nspawn package rpm

TODO : http://blog.christophersmart.com/2013/06/12/how-to-list-packages-you-have-explicitly-installed-using-yum/

Prérequis

Sources :

J’utilise un nspawn CentOS 5 comme environnement de compilation.

Installation de EPEL (version 5 car j’utilise une CentOS 5)

root@testhost # wget http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
root@testhost # rpm -Uvh epel-release-5*.rpm

Respectivement, installation des prérequis pour la création de paquet en général

root@testhost # yum install rpm-build yum-utils sudo

redhat-rpm-config à peut-être aussi besoin d’être installé (à vérifier). Si vous voulez utiliser rpmdev-setuptree, il faut installer rpmdevtools.

Création de l’utilisateur de compilation et ouverture de sa session

root@testhost # useradd -u 1000 -g users -G sudo -m builder
root@testhost # passwd builder
root@testhost # su - builder

Création de l’environnement générique de compilation, soit avec rpmdev-setuptree (complet), soit à la main (quick & durty).

rpmdev-setuptree

builder@testhost % rpmdev-setuptree

La commande a dû créer un répertoire ~/rpmbuild et un fichier .rpmmacros dont le contenu est à modifier

%_topdir      %(echo $HOME)/rpmbuild
%_smp_mflags  -j3
%__arch_install_post   /usr/lib/rpm/check-rpaths   /usr/lib/rpm/check-buildroot
%vendor                 moi
%packager               Maxime de Roucy
%dist                   .el5

à la main

TODO: à vérifier (cf. “Extraire un paquet .src.rpm”)

builder@testhost % echo '%_topdir      %(echo $HOME)/rpmbuild' > ~/.rpmmacros

Et c’est tout, rpm -ivh … se chargera de créer le dossier.

Rebuild d’un paquet existant

Sources :

Téléchargement du paquet source (ici redis)

builder@testhost % yumdownloader --source redis

Installation des dépendances pour la création de notre paquet en particulier

builder@testhost % sudo yum-builddep …rpm -y

Compilation du paquet sans modification préalable :

builder@testhost % rpmbuild --rebuild …src.rpm

Si vous voulez modifier certains fichier avant de lancer la compilation vous devez d’abord extraire …src.rpm dans ~/rpmbuild

builder@testhost % rpm -ivh …src.rpm
… modification des fichiers de config du rpm …
builder@testhost % rpmbuild -bp …src.rpm
… modification des fichiers source du logiciel packagé …
builder@testhost % rpmbuild -ba rpmbuild/SPECS/*.spec

L’option -bp permet d’executer la phase de préparation (unpack des sources, application des patchs…).
L’option -ba permet de généré les rpm binaires et sources. Voir le man de rpmbuild pour les autres options.

Le paquet va être créé dans le dossier ~builder/rpmbuild/RPMS/x86_64/.

problème de signature

Si vous avez un problème de signature lors de l’extraction de …src.rpm vous pouvez essayer de supprimer les signatures du fichier

builder@testhost % rpm --delsign …src.rpm

installation

Pour installer le rpm généré vous pouvez utiliser directement yum :

root@testhost # yum install …rpm --nogpgcheck

Extraire un paquet .src.rpm

TODO: à vérifier (cf prerequis → à la main)

Pour extraire simplement un paquet source j’utilise la commande suivante (il n’y a aucun prérequis) :

builder@testhost % rpm -ivh …src.rpm

Elle extrait le rpm dans le dossier rpmbuild (créé s’il n’existe pas).