fabrication de package rpm

Ce document est sous licence LGPL voir le site www.gnu.org pour plus de renseignements
Vous pouvez redistribuer et modifier ce document selon les termes de la License Publique Generale GNU (LGPL) version 2 ou toute autre version ultérieure

table des matières

  1. pourquoi du rpm
  2. qui est concerné
  3. recherche de packages
  4. examiner un rpm
  5. refaire un rpm depuis le src.rpm
  6. refaire un rpm depuis le tar.gz contenant un fichier spec
  7. conversion Debian/rpm
  8. a partir d'un module perl (cpan)
  9. a partir d'un module python
  10. a partir d'un package installé
  11. modifier un package
  12. transformer un package tar.gz en rpm
  13. utiliser un makefile pour générer un rpm
  14. graphique récapitulatif
  15. documentation
  16. outils
  17. notions avancées

pourquoi du rpm

avantage des packages

les packages sont faits pour faciliter la vie des administrateurs dans l'administration des logiciels :

choix du logiciel rpm

concernant le choix du format rpm, Il faut aussi savoir que :

risque des installations de tar.gz

Enfin, il est très dangereux de mélanger des installations depuis des rpm et des tar.gz :
en effet la gestion des conflits de fichiers se fait par rapport aux autres logiciels installes en rpm et non pas par rapport aux fichiers réellement sur disque !
Ainsi, rien n'empêche une bibliothèque installée par un package rpm d'être écrasée par un logiciel en tar.gz, et vice-versa (problème bien connu par les utilisateurs de Windows avec leurs dll).
Donc, si on veut installer un programme a partir d'un format tar.gz, il y a deux solutions propres possibles :

qui est concerné ?

Parmi les utilisateurs de linux, il y a deux types de personnes qui peuvent être amenées a fabriquer des packages rpm :

recherche de packages

recherche

la recherche de logiciels peut se faire dans l'ordre :
  1. sur une site qui recense les rpm existants : http://fr.rpmfind.net
  2. sur une base des projets libres : http://www.freshmeat.net
  3. cliquer ici pour plus de possibilités

interprétation

la convention de nommage des packages rpm est la suivante : nom-version-release.architecture.rpm
pour son interprétation, voir mon introduction a rpm

conseil : pour une diffusion sur internet, a cause des problèmes de portabilité, il faut TOUJOURS mettre également a disposition le fichier src.rpm. C'est ce qui permettra aux utilisateurs d'autres distributions d'utiliser vos packages.

examiner un rpm

il y a quelques outils qui permettent de voir/extraire le contenu d'un fichier rpm

refaire un rpm depuis le src.rpm

quand on ne trouve pas de rpm tout fait pour sa distribution, le premier réflexe à avoir, c'est d'essayer de le refaire a partir d'un package source.
Il y a un inconvénient : c'est qu'il faut pour cela avoir installé au préalable : Pour la fabrication proprement dite, c'est très simple : remarque : si l'on regarde le contenu d'un fichier src.rpm, par exemple avec le gestionnaire de fichier mc, on voit que celui-ci contient : on peut donc fabriquer également un rpm à partir d'un src.rpm en deux temps :

refaire un rpm depuis le tar.gz contenant un fichier spec

Comme le format rpm est de plus en plus répandu, les fichiers tar.gz contenant des fichiers spec sont assez courant.
Ils permettent également une fabrication facile de package rpm par une variante de la méthode précédente :
rpmbuild -tb fichier_tar

conversion Debian/rpm

Les développeurs Debian ont fait un outil pour convertir les différents formats de package : alien. Je l'utilise assez souvent, avec succès, dans le sens rpm vers Debian.

a partir d'un module perl (cpan)

il y a deux outils faits pour convertir un module cpan en rpm :

a partir d'un module python

detarrer le module, puis taper python setup.py bdist_rpm
en cas d'erreur du type error: byte-compiling is disabled, il faut lancer la commande :
PYTHONDONTWRITEBYTECODE= python setup.py bdist_rpm

a partir d'un package installé

problème

refaire un fichier rpm a partir un package installe

solution

comme je n'ai pas trouvé de logiciel, je l'ai écrit, puis mis sur le net : rpmrebuild

syntaxe

rpm --rpmrebuild package

modifier un package

problème

refaire un fichier rpm contenant des modifications

solution

il y a plusieurs possibilités :

transformer un package tar.gz en rpm

principe

  1. Il va falloir générer un fichier contenant les informations sur le package que l'on veut faire (nom, version ...) : c'est le fichier specfile.
    Pour cela, on va se faire aider par un générateur de specfile. Plusieurs outils existent :
  2. deuxième étape, obligatoire, il va falloir modifier le fichier spec génère, pour y ajouter quelques informations, que le générateur ne peut inventer (description, résumé ...).
  3. enfin, la fabrication du rpm se fait comme pour un src.rpm

exemple

soit un logiciel très simple avec 3 fichiers : on va donc :
  1. créer une arborescence pour ces fichiers :
    	toto-0.1
    	|-- README
    	|-- etc
    	|   `-- toto.conf
    	|-- toto.spec
    	`-- usr
    	`-- local
    	`-- bin
    	`-- toto
          
  2. créer le fichier tar :
    cd toto-0.1
    tar cvfz /tmp/toto.tgz *

  3. générer un fichier specfile avec autospec:
    tar tfz /tmp/toto.tgz | autospec -b > toto.spec
  4. éditer (vim, emacs, ont un mode de colorisation syntaxique du fichier spec) le fichier toto.spec pour :
    1. decommenter et modifier la valeur "unknown" des "tags" suivants (obligatoires) : Group, Licence(Copyright), summary, description
    2. supprimer certains "attributs" de fichiers : %readme ou %license, générés par certaines version d'autospec, mais que rpm ne comprends pas
  5. générer le fichier rpm:
    1. passer root : su
    2. copier le tar a sa place (ici sur Redhat) : cp ../toto.tgz /usr/src/redhat/Sources/toto-0.1.bin.tar.gz
    3. fabriquer le rpm : rpmbuild -bb toto.spec

utiliser un makefile pour générer un rpm

principe

Comme pour les tar.gz,
  1. on va utiliser un générateur de specfile :
  2. modifier le fichier specfile
  3. fabriquer le rpm

exemple

on reprend les mêmes fichiers que ci-dessus, mais avec un Makefile
      toto-0.2
      |-- Makefile
      |-- README
      |-- toto
      `-- toto.conf
    
le fichier Makefile contient juste quelques lignes :
      build:
      
      install :
      install -d ${DESTDIR}/usr/local/bin
      install toto ${DESTDIR}/usr/local/bin
      install -d ${DESTDIR}/etc
      install toto.conf ${DESTDIR}/etc
    

avec autospec

  1. générer le fichier specfile:
    cd toto-0.2
    make -n install | autospec -i > toto.spec
  2. éditer (vim, emacs) le fichier toto.spec pour :
  3. générer le fichier rpm:
    1. faire un tar : cd ..; tar cvfz /tmp/toto-0.2.tar.gz toto-0.2
    2. passer root : su
    3. fabriquer le rpm : rpmbuild -tb /tmp/toto-0.2.tar.gz
remarque : l'explication du tag BuildRoot sera faite en section avancée

avec checkinstall

  1. il suffit de taper checkinstall make install
  2. puis de répondre aux quelques questions posées

graphique récapitulatif

ce graphique résumé les différentes commandes pour travailler sur les fichier rpm

outils


documentation


remarque : cette page a été faite pour une conférence sur la fabrication des rpm au culte
version 1.10 du 2009-10-05
Eric Gerbier
tux
documentation sous licence GNU Free Documentation License