# CENTOS: Contruction de paquets RPM Correctifs ou Patches {{INLINETOC}} 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