Rpmbuild

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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 .spec
  • SOURCES/ — archives sources (.tar.gz) et patchs
  • BUILD/ — répertoire de compilation temporaire
  • RPMS/ — paquets binaires produits, classés par architecture
  • SRPMS/ — 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 (%configure puis make)
  • %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

Voir aussi

  • Rpm — installation, interrogation et gestion des paquets déjà construits
  • Yum — gestion des dépôts et des dépendances