Construire des paquets RPM pour CentOS

Paquets RPMCet article décrit de façon succincte la mise en place d’un environnement de construction et la compilation de paquets pour CentOS. La construction de paquets RPM est un vaste chapitre. Ce petit tutoriel me sert avant tout de pense-bête pour les spécificités de la construction d’un paquet sous RHEL/CentOS. Il ne pourra pas remplacer une documentation détaillée.

Dans l’exemple qui suit, je vais construire le paquet Plank pour CentOS 7 depuis le paquet source de Fedora 22. Je vais partir d’un système minimal et installer pas à pas les outils et autres dépendances nécessaires.

Mettre en place l’environnement de construction

L’outil de construction rpmbuild est fourni par le paquet rpm-build.

# yum install rpm-build

On prendra soin de construire les paquets en tant que simple utilisateur. Les droits root seront uniquement nécessaires pour l’installation des paquets.

Créer l’arborescence de construction des paquets.

$ mkdir -pv ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
mkdir: création du répertoire « /home/kikinovak/rpmbuild »
mkdir: création du répertoire « /home/kikinovak/rpmbuild/BUILD »
mkdir: création du répertoire « /home/kikinovak/rpmbuild/RPMS »
mkdir: création du répertoire « /home/kikinovak/rpmbuild/SOURCES »
mkdir: création du répertoire « /home/kikinovak/rpmbuild/SPECS »
mkdir: création du répertoire « /home/kikinovak/rpmbuild/SRPMS »

Ensuite, éditer un fichier ~/.rpmmacros comme ceci.

%_topdir /home/kikinovak/rpmbuild
%packager Niki Kovacs <info@microlinux.fr>
%dist .el7.microlinux

Construction d’un paquet RPM

Dans l’exemple, je pars d’un paquet SRPM (Source RPM) récupéré sur le portail http://rpm.pbone.net. , en l’occurrence plank-0.10.1-1.fc22.src.rpm. Dans la pratique quotidienne, on partira souvent d’un SRPM de Fedora que l’on recompilera pour l’intégrer à CentOS.

rpm.pbone.net

Créer un répertoire ~/SRPMS pour y ranger les paquets source téléchargés.

$ mkdir -v ~/SRPMS
mkdir: création du répertoire « /home/kikinovak/SRPMS »

Si l’on part d’un paquet source SRPM, on peut utiliser rpm en tant que simple utilisateur, et la commande rpm -ivh installera les fichiers au bon endroit.

$ rpm -ivh plank-0.10.1-1.fc22.src.rpm
attention : plank-0.10.1-1.fc22.src.rpm: Entête V3 
RSA/SHA256 Signature, clé ID 8e1431d5: NOKEY
Mise à jour / installation...
1:plank-0.10.1-1.fc22 ################################# [100%]

Voici comment se présentent les fichiers installés.

$ tree ~/rpmbuild/
/home/kikinovak/rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
│   ├── 000_patentpatch.patch
│   └── plank-0.10.1.tar.xz
├── SPECS
│   └── plank.spec
└── SRPMS
  • le code source “vanillaplank-0.10.1.tar.xz
  • les instructions de compilation plank.spec
  • un patch 000_patentpatch.patch

Alternativement – si l’on ne trouve pas de paquet SRPM – on peut récupérer le fichier .spec pour le placer dans ~/rpmbuild/SPECS. Puis on récupère les sources correspondantes, et on les range manuellement dans le répertoire ~/rpmbuild/SOURCES.

Avant de tenter un premier essai, je vais quand-même installer un minimum d’outils de compilation.

# yum install gcc make

À cette étape, on peut éventuellement éditer le fichier .spec pour y apporter des modifications. En l’occurrence, j’annule l’application d’un patch qui désactive une fonctionnalité soumise à un brevet.

%prep
%setup -q
# %patch0 (commenter)

Je lance une première tentative de compilation.

$ cd ~/rpmbuild/SPECS/
$ rpmbuild -ba --clean plank.spec

Quelques remarques sur les options utilisées.

  • L’option -ba construit les paquets binaires et les sources (RPM et SRPM).
  • L’option --clean nettoie l’arborescence de construction.

Cette première tentative se solde par une erreur, étant donné qu’il manque un certain nombre de dépendances.

rpmbuild-deps

J’installe les dépendances de construction, qui sont fournies par les dépôts [base], [epel] et [nux-dextop].

Je relance rpmbuild, et au terme de la compilation, j’obtiens ceci.

$ tree ~/rpmbuild/
/home/kikinovak/rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
│   └── x86_64
│       ├── plank-0.10.1-1.el7.microlinux.x86_64.rpm
│       ├── plank-debuginfo-0.10.1-1.el7.microlinux.x86_64.rpm
│       └── plank-devel-0.10.1-1.el7.microlinux.x86_64.rpm
├── SOURCES
│   ├── 000_patentpatch.patch
│   └── plank-0.10.1.tar.xz
├── SPECS
│   └── plank.spec
└── SRPMS
    └── plank-0.10.1-1.el7.microlinux.src.rpm

Il ne me reste plus qu’à installer les paquets RPM résultants avec rpm -ivh ou yum localinstall.

Ce contenu a été publié dans CentOS, Documentation Microlinux, avec comme mot(s)-clé(s) , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *