User Tools

Site Tools


centos:rpmbuild-patches

CENTOS: Contruction de paquets RPM Correctifs ou Patches

Afin de conserver les sources originales du programme empaqueté, si des modifications sont nécessaires, il faut utiliser des correctifs (encore appelés “patches” en anglais):

  • La commande diff permet de comparer 2 fichiers
  • la commande patch d'appliquer les modifications enregistrées avec la commande diff sur un fichier original.

Procédure pour la création d'un correctif

Faire une copie de sauvegarde du fichier à modifier (on lui ajoute un extension explicite et unique, par exemple .max_ext)

$ cp fichier fichier.max_ext

Modifie l'original (celui qui s'appelle 'fichier') comme on le désire

Génèrer un fichier de correctif avec gendiff :

$ cd ~/rpmbuild/BUILD
$ gendiff dossier .max_ext > ../SOURCES/nom_du_soft-version-max_ext.patch

Utilisation d'un correctif

Indiquer dans le fichier SPEC qu'il faut ajouter le fichier de correctif :

...
Patch0:		%{name}-0.10-max_ext.patch  //On donne le nom du correctif
...
%prep
%setup -q
%patch0 -p1 -b .max_prefix  //On l'applique
...

-b ne doit être utilisé que sur des sources.

L'intérêt de désigner l'extension se révèle lorsqu'un correctif doit être appliquer sur plusieurs fichiers, et qu'il y a plusieurs problèmes à corriger.

Voici un exemple pour clarifier la chose :

Soit 10 fichiers : f0, f1, .., f9 ; et deux problèmes à corriger.

  • f1, et f4 sont modifiés pour résoudre le problème A, donc f1 et f4 seront copiés sous les noms f1.fixA et f4.fixA, puis modifiés comme il le faut, selon la méthode expliquée plus haut.
  • f2, f7, f8, et f9 doivent être modifiés pour résoudre le problème B. Idem on a {f2, f7, f8,f9}.fixB

On applique deux fois gendiff, comme vu plus haut. On obtient deux fichiers de correctif. Un par problème, chacun modifie plusieurs fichiers. Ainsi, malgré la complexité du problème on conserve un fichier SPEC propre et simple.

Quand utiliser un correctif ?

Il est déconseillé d'utiliser des correctifs pour des taches simples telles que :

  • indiquer qu'on veut utiliser /usr au lieu du préfix définit dans le fichier Makefile (prefix=/usr/local), pour lequel on peut indiqué dans le fichier SPEC tout simplement :

    make install DESTDIR=%{buildroot} prefix=%{_prefix}

  • modifier une valeur qui se définit par une macro (les répertoires standards), puisqu'il (le correctif) dépend de la machine utilisée lors de sa fabrication, pas de la machine utilisée pour la construction. Dans ce cas on préfèrera le “correctif dynamique” type sed, ex :

    sed -i -e s@/usr/lib@%{_libdir}@ libtool

centos/rpmbuild-patches.txt · Last modified: 2025/02/19 10:59 by 127.0.0.1