Rpmbuild
| Fiche express | |
|---|---|
| Domaine | Empaquetage RPM |
| Commande | rpmbuild
|
| Contexte | Fabriquer un paquet RPM (binaire et/ou source) à partir d'un fichier .spec
|
| Voir aussi | Rpm, Yum |
rpmbuild fabrique des paquets RPM (binaires et/ou source) à partir d'un fichier de
description .spec et des sources du logiciel. C'est l'outil de référence pour
empaqueter un logiciel sur les distributions RHEL/CentOS/Fedora — voir aussi Rpm pour
l'installation/interrogation des paquets déjà construits et Yum pour la gestion des
dépôts.
Installation
yum install rpm-build rpmdevtools
# ou, groupe complet :
yum groupinstall "Development Tools"
Options principales
rpmbuild -ba fichier.spec # construit le RPM binaire ET le RPM source
rpmbuild -bb fichier.spec # construit uniquement le RPM binaire
rpmbuild -bs fichier.spec # construit uniquement le RPM source
rpmbuild -bp fichier.spec # exécute uniquement la section %prep
rpmbuild -bc fichier.spec # exécute %prep puis %build
rpmbuild -bi fichier.spec # exécute %prep, %build puis %install
rpmbuild -bl fichier.spec # vérifie l'existence des fichiers listés dans %files
Arborescence de travail
rpmdev-setuptree (fourni par rpmdevtools) crée l'arborescence
standard dans ~/rpmbuild/ :
rpmdev-setuptree
SPECS/— fichiers.specSOURCES/— archives sources (.tar.gz) et patchsBUILD/— répertoire de compilation temporaireRPMS/— paquets binaires produits, classés par architectureSRPMS/— paquets source produits
Récupérer et reconstruire un SRPM existant
# récupération d'un SRPM (exemple via le dépôt FTP d'une distribution)
wget ftp://exemple.org/redhat/linux/enterprise/6Server/en/os/SRPMS/vsftpd-2.2.2-6.el6.src.rpm
# installation du SRPM : dépose le .spec dans SPECS/ et les sources dans SOURCES/
rpm -ivh vsftpd-*.src.rpm
rpmbuild -ba ~/rpmbuild/SPECS/vsftpd.spec
Pour recompiler un SRPM directement sans repasser par l'étape rpm -ivh :
rpmbuild --rebuild vsftpd-2.2.2-6.el6.src.rpm
Construire un paquet à partir de zéro
1. Préparer l'archive des sources — le nom du répertoire doit respecter le format
%{name}-%{version} :
cd /home/user
tar czvf corpor-1.0.tar.gz corpor-1.0
cp corpor-1.0.tar.gz ~/rpmbuild/SOURCES/
2. Écrire le fichier .spec dans ~/rpmbuild/SPECS/ :
Name: corpor
Version: 1.0
Release: 1%{?dist}
Summary: Description courte du paquet
Group: Applications/System
License: GPLv2
URL: http://exemple.org/corpor
Source0: %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: gcc
Requires: glibc
%description
Description longue du paquet.
%prep
%setup -q
%build
%configure
make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root,-)
%doc README
Sections clés du .spec :
- %prep — décompresse les sources (
%setup -q) et applique les patchs éventuels - %build — compile (
%configurepuismake) - %install — installe dans
$RPM_BUILD_ROOT, jamais directement sur le système - %clean — nettoie le répertoire de build après packaging
- %files — liste les fichiers à inclure dans le paquet final, avec leurs droits (
%defattr)
3. Construire le paquet :
rpmbuild -ba ~/rpmbuild/SPECS/corpor.spec
Le RPM binaire est produit dans ~/rpmbuild/RPMS/<arch>/ et le RPM source dans
~/rpmbuild/SRPMS/.
Empaqueter un logiciel déjà compilé/installé
Cas d'un logiciel qui s'installe via son propre script (pas de make install
standard) : compiler/installer d'abord normalement, puis embarquer l'arborescence obtenue
dans une archive à empaqueter telle quelle.
# compilation et installation du logiciel
wget http://exemple.org/download/monlogiciel-1.0.tgz
tar -xzf monlogiciel-1.0.tgz
cd monlogiciel-1.0
./install.sh
# on ré-archive le répertoire pour en faire la source du RPM
cd ..
tar -cf monlogiciel-1.0.tar monlogiciel-1.0
rpmbuild -ts monlogiciel-1.0.tar
cd ~/rpmbuild/SRPMS/
rpmbuild --rebuild monlogiciel-1.0-1.src.rpm