Introduction :

Il existe deux méthodes afin de réaliser un paquet RPM.
La première consiste à compiler son application à l'installation du paquet. Cette technique permet d'avoir un code proprement compilé sur la machine cible.
La seconde n'est qu'un redéploiement des fichiers d'une application déjà installée.
Je vais décrire dans cet article la seconde méthode qui est beaucoup plus simple, rapide et accessible à tout le monde ...
La technique consiste en la création d'une archive tar.gz qui contient toute l'arborescence des fichiers à créer et d'un fichier de description de l'installation.


Principe :

Le principe est simple et se déroule en 4 étapes :

1. Créer une archive tar.gz qui soit le reflet de l'arborescence dans laquelle sont installés vos fichiers.

2. Créer un fichier de description du paquet (specfile) qui portera l'extension .spec.

3. Modifier ce fichier de description afin de le personnaliser et l'adapter.

4. Générer le paquet RPM à l'aide d'un outil.


Pré-requis :

Avant de créer votre paquet RPM, il vous faut installer votre application. Vous pouvez aussi modifier d'éventuels fichiers de configuration pour la "pré-paramétrer". Essayer de ne faire que des configurations génériques afin de ne pas avoir des paramètre erronés ou innutiles au déploiement du paquet.
Afin de créer le paquet RPM, il vous faut installer 2 logiciels :

  • Autospec (simple d'utilisation et efficase) : permet de créer le fichier de spécifications.
  • Rpmbuild : permet de générer le RPM.

Il existe d'autre logiciels pour générer des fichiers de spec comme rpmerizor ou alien, mais je préfère autospec car il est très facile.


Fabrication du RPM :

Considérons une application qui aurait un répertoire dans /usr/local, un fichier de configuration dans /etc.

  • mon_application dans /usr/local/application/bin/
  • mon_application.conf dans /etc
  • install.txt dans /usr/local/application/doc


Nous allonc donc procéder en 5 étapes afin de créer le RPM pour cette application.

1. Dupliquer l'arborescence de fichiers correspondant à l'application dans un répertoire temporaire (ex: /tmp/application) :



2. Créer une archive tar.gz de cette arborescence de fihciers :

 cd /tmp/application-1.0
 tar cvzf /tmp/application-1.0.tar.gz *


3. Générer un fichier de spécifications en utilisant le logiciel autospec :

 tar tfz /tmp/application-1.0.tar.gz | autospec -b > mon_application.spec


4. Modifier le fichier de spécification généré afin de le personnaliser :

  • Supprimer tous les tags %readme et %licence qui sont générés par certaines versions d'autospec et que le logiciel rpmbuild ne comprend pas.
  • Modifier et décommenter les tags suivants : Group, Licence(Copyright), summary, description


5. Copier l'archive tar.gz dans /usr/src/redhat/Sources :

 cp application-1.0.tar.gz /usr/src/redhat/Sources/application-1.0.bin.tar.gz


Attention a bien nommer le fichier xxx.bin.tar.gz


6. Générer le RPM avec rpmbuild :

 rpmbuild -ba application.spec



Vous avez ainsi créé votre premier paquet RPM.
Les dossiers suivants ont été créés :

  • /usr/src/redhat/SOURCES/RPMS : Vous y trouverez, dans le réperertoire correspondant à votre architecture (ex: i386) votre paquet.
  • /usr/src/redhat/SOURCES/SRPMS : Correspond aux paquet source du rpm
  • /usr/src/redhat/SOURCES/BUILD : Vous y trouverez l'arborescence de fichiers de votre application.


En plus :

Si votre paquet implique l'installation d'un autre paquet, la présence d'une ressource, ... vous pouvez le spécifier avec les tags :

  • requires : implique une dépendance à une ressource (il est possible de faire des dépendances conditionnelles avec < > = (ex: gcc > 1.05)
  • provides : Fournit une ressouces


Dans tous les cas, l'application qui génère le paquet fait une recherche de dépendance par défaut.
L'ajout de dépendance doit se faire dans le fichier de spécification, à l'étape 4 de la fabrication du RPM.


Il est aussi possible, et c'est très interressant, d'ajouter des scripts shell avant et après l'installation ou la désinstallation.
Ceci se fait avec les tags suivants :

  • %pre : Script qui s'exécute avant l'installation.
  • %post: Script qui s'exécute après l'installation.
  • %preun : Script qui s'exécute avant la désinstallation.
  • %postun : Script qui s'exécute après la désinstallation.


Il peut être pratique d'éxécuter un script avant ou après l'installation. Par exemple pour créer un utilisateur et un groupe nécessaire au lancement d'une application, pour ajouter une ligne de configuration dans un fichier système, pour ajouter le lancement de votre programme au démarrage ... Ces modifications se font aussi dans le fichier de spécifications, à l'étape 4 de la création du paquet.