Introduction rapide à la production d'un RPM

Par Pierre Sarrazin
9 mai 2007.

(See English version.)

Obtenir la commande rpmbuild

Votre système peut avoir la commande rpm sans pour autant avoir la commande rpmbuild. (Si la commande "which rpmbuild" n'affiche rien, vous n'avez pas rpmbuild.) Sur un système Red Hat ou Fedora, la commande rpmbuild est fournie par le package rpm-build. (Vous pouvez donner la commande "rpm -q rpm-build" pour voir si elle est installée.)

Éviter root

Par défaut, les packages RPM sont construits dans le répertoire /usr/src/redhat, qui n'est accessible en écriture que par root. Vous pouvez dire à la commande rpmbuild d'utiliser un autre répertoire (e.g., /home/your_userid/rpm) en mettant la ligne suivante dans un fichier appelé .rpmmacros dans votre répertoire «maison»:

%_topdir /home/your_userid/rpm

Il faut ensuite créer les sous-répertoires suivants dans ce répertoire:

cd /home/your_userid/rpm
mkdir SOURCES SPECS BUILD SRPMS
mkdir -p RPMS/i386 RPMS/athlon RPMS/i486 RPMS/i586 RPMS/i686 RPMS/noarch

Voyez la documentation de référence sur RPM pour plus de détails.

Construire à partir d'un SRPM

Installer le fichier .src.rpm comme ceci:

rpm -i somepackage-1.0-1.src.rpm

Ceci va créer des fichiers dans /usr/src/redhat/SOURCES et un fichier .spec dans /usr/src/redhat/SPECS.

Ensuite, allez dans le répertoire SPECS et donnez la commande pour construire le RPM:

cd /usr/src/redhat/SPECS
rpmbuild -bb somepackage.spec

Donnez plutôt l'option -ta si vous voulez aussi construire le SRPM. Les packages binaires RPM seront typiquement créés dans le répertoire RPM/i386 (sur un système basé sur un PC).

Construire à partir d'une archive de sources

Quand une archive de sources (e.g., somepackage-1.0.tar.gz) contient un fichier .spec, on peut donner la commande suivante pour construire le RPM sans avoir à déployer l'archive:

rpmbuild -tb somepackage-1.0.tar.gz

Donnez plutôt l'option -ta si vous voulez aussi construire le SRPM.

Les archives de sources que je publie sont supposées contenir un fichier .spec fonctionnel. Si j'ai omis ceci, veuillez vous plaindre à moi.

Lectures supplémentaires