Comment créer un paquet RPM

RPM (Red Hat Package Manager), est un système de gestion de paquets de logiciels utilisé sur certaines distributions GNU/Linux. C'est le format utilisé par Linux Standard Base (LSB), il est utilisé par plusieurs distributions : Fedora Linux, RHEL, CentOS, OpenSUSE...etc

Dans ce tutoriel, nous allons voir comment créer un paquet RPM sous Fedora et CentOS.

Installation des outils nécessaires

sudo dnf install dnf-utils rpmdevtools rpmlint

Mise en place de l'arborescence de construction

Afin de construire notre paquet, nous devrons tout d'abord mettre en place uen hiérarchie spécifique via la commande suivante :

rpmdev-setuptree

Un dossier rpmbuild sera créé dans votre dossier home avec la structure suivante :

rpmbuild 
 |- BUILD 
 |- RPMS 
 |- SOURCES 
 |- SPECS 
 |- SRPMS 
  • Le dossier BUILD est utilisé lors de la construction du RPM, les fichiers tomporaires sont placés dedans.
  • Le dossier RPMS contient les paquets générés.
  • Le dossier SOURCES sert à contenir les sources (script, project complexe, ou programme précompilé), souvent compressées dans des archives .tar.gz ou .tgz.
  • Le dossier SPEC contient les fichiers .spec. Le fichier .spec définit comment un paquet est construit.
  • Le dossier SRPMS contient les paquets .src.rpm. Ils ne sont pas affiliés à une architecture ou une distribution. Les rpm sont construits à partir de ces fichiers.

Préparation de l'archive des sources

Dans cet exemple, nous allons le faire pour un programme test-app en version 1.0, créez le dossier test-app-1.0 puis mettez-y les binaires de votre applications et créez l'archive depuis le dossier parent avec la commande suivante :

tar -czvf test-app-1.0.tar.gz test-app-1.0

Déplacez ensuite l'archive vers le dossier SOURCES

mv test-app-1.0.tar.gz ~/rpmbuild/SOURCES/

Création du fichier .spec

Executez la commande suivante :

cd ~/rpmbuild/SPECS
rpmdev-newspec test-app

Mettez-y ce contenu à peu près :

Name:           test-app
Version:        1.0
Release:        1%{?dist}
Summary:        A test app

License:        
URL:            
Source0:        %{name}-%{version}.tar.gz

%description
A test app

%prep
%setup -q

%install
# Remplissez ici


%files
# Remplissez ici



%changelog
* Wed Aug 17 2022 Raouf Ould Ali <raouf@eclipium.xyz>
- First Version

Exemple concret sur TetraSwap

%global __provides_exclude_from /*
%global __requires_exclude_from /*
Name:           tetraswap
Version:        1.3.2
Release:        1%{?dist}
Summary:        A simple but challengeous puzzle game !

License:        Proprietary
URL:            https://eclipium.xyz/tetraswap
Source0:        %{name}-%{version}.tar.gz

%description
A simple but challengeous puzzle game !

%prep
%setup -q

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/%{_bindir}/TetraSwap
mkdir -p $RPM_BUILD_ROOT/usr/share/applications
cp -r ./* $RPM_BUILD_ROOT/%{_bindir}/TetraSwap
mv $RPM_BUILD_ROOT/%{_bindir}/TetraSwap/TetraSwap.desktop $RPM_BUILD_ROOT/usr/share/applications/TetraSwap.desktop

%files
/usr/bin/TetraSwap/*
/usr/share/applications/TetraSwap.desktop

Remplissez selon les besoins de votre paquet, puis passez à l'étape suivante. Si vous vous y perdez un peu, vous pouvez vous aider de cet article : https://wiki.cdot.senecacollege.ca/wiki/RPM_spec_File_Contents

Une fois la configuration terminée, vous pouvez vérifier votre fichier .spec via la commande suivante :

rpmlint ~/rpmbuild/SPECS/test-app.spec

Construction du paquet

Nous allons construire le .src.rpm et le .rpm via la commande suivante :

rpmbuild -ba ~/rpmbuild/SPECS/test-app.spec

Ou sinon le .src.rpm seulement :

rpmbuild -bs ~/rpmbuild/SPECS/test-app.spec

Puis le .rpm via la commande suivante :

rpmbuild -bb ~/rpmbuild/SPECS/test-app.spec

Et voilà, nous venons de contruire notre paquet RPM !