5. Inclure les mises à jour

Il y a trois étapes, les deux premières étant (pratiquement) identiques pour toutes les releases, alors que la dernière change un peu en raison des modifications de l'installateur anaconda :

  1. Corriger les modes de protection de fichier

  2. Remplacer les RPMs mis à jour

  3. Reconstruire l'installateur

Pour incorporer les mises à jour, vous avez besoin d'avoir les droits d'accès au répertoire de la distribution à partir de la machine Linux, avec une version fonctionnelle de rpm installée, alors que pour reconstruire l'installateur anaconda, vous avez besoin d'utiliser une release de RedHat Linux égale à celle pour laquelle vous avez reconstruit l'installateur (sinon la procédure échouera) . Si vous maintenez un miroir du répertoire updates, vous pouvez à tout moment produire un CD incluant les dernières mises à jours en répétant ces étapes.

5.1. Corriger les modes de protection des fichiers

Durant le processus d'installation des releases jusqu'à la 6.2 (comprise), quelques programmes sont lancés directement du CD. Malheureusement, le programme FTP ne préserve pas toujours les modes de protection des fichiers et des répertoires qui sont copiés. Donc, il est nécessaire de s'assurer que la permission d'exécuter est donnée aux programmes, scripts shells et bibliothèques partagées, avant que le répertoire ne soit gravé sur le CD. Ceci est fait en lançant le script updatePerm.sh sur votre copie locale de la distribution. C'est réellement nécessaire pour les versions 6.2 et précédentes, la seule partie utile à la procédure des releases 7.3/8.0/9 est la mise à jour des droit des répertoires, même si le reste ne posera pas de problème et que tout restera cohérent. C'est pratiquement identique au script updatePerm inclus dans la précédente version de ce guide pratique, seuls quelques petits changements ont été réalisés. Avant d'utiliser ce script, vous devez configurer le fichier rhcd.conf et exporter la variable RHCDPATH pointant vers le répertoire où se trouve le fichier.

        $ export RHCDPATH=/home/luigi/tmp/rhcd-scripts
        $ sh updatePerm.sh
      

5.2. Remplacer les RPMs mis à jour

Le script updateCD.sh copie tous les nouveaux fichiers du répertoire update vers le répertoire RPMS (et SRPMS). Le script utilise le programme rvc qui a été présenté dans la section comparer les versions des RPM pour déterminer quels paquets dans le répertoire update sont les plus récents. Les anciens paquets sont déplacés dans le répertoire ${OLDDIR}. Si la variable CHECKSIG est mise sur « yes », tous les paquets dans l'arbre principal verront leur signature vérifiée. Si la vérification de signature d'un paquet échoue (le genre de vérification est configuré par l'usage de la variable USEGPG, assignée dans le fichier rhcd.conf), celui-ci est déplacé dans le répertoire OLDDIR avec une extension ajoutée, « CDcheckfail ».

Avant d'utiliser ce script, vous devez configurer le fichier de configuration rhcd.conf et exporter une variable RHCDPATH pointant vers le répertoire où se trouve ce fichier.

        $ export RHCDPATH=/home/luigi/tmp/rhcd-scripts
        $ sh updateCD.sh
      

Note

Après avoir incorporé les mises à jour dans le répertoire principal RedHat/RPMS, votre copie de la distribution n'est plus un miroir du site de la distribution RedHat. Néanmoins, il est plus à jour ! Donc, si vous essayez de faire le miroir de la distribution en utilisant mirror, les anciennes versions des RPMs qui ont été mis à jour seront téléchargées une fois de plus, et les mises à jour supprimées. La procédure basée sur bash/wget ne souffre pas de ce problème, mais laissera l'arbre principal dans un état incohérent. Les anciens et les nouveaux paquets seront dans ce cas mélangés, mais vous pouvez les trouver et les supprimer en intégrant le binaire rvc dans un script shell simple (que je laisserai comme exercice pour le lecteur...).

5.3. Reconstruire l'installateur

Les choses ont bien changé dans cette section avec l'arrivée de l'installateur anaconda (release 6.1) et l'augmentation considérable en taille (et... en nombre de CDs) que les distributions 7.x/8.0 ont connue. Jusqu'à la release 6.2, la seule étape composant cette section était représentée par la génération d'un nouveau fichier hdlist. Avec la release 6.2, cela reste vrai seulement jusqu'à un certain point, en raison des changements dans l'installateur anaconda, dans le logiciel rpm lui-même (à partir des versions 3.x, jusqu'au 4.x) et de la migration des paquets mis à jour vers cette nouvelle version (les mises à jour pour la release 6.2 sont en fait packagées avec les deux releases majeures du logiciel rpm). Nous considèrerons les trois procédures différentes en essayant de couvrir toutes les releases.

5.3.1. RedHat ≤ 6.1

5.3.1.1. Regénérer le fichier hdlist

Lors de l'installation à partir du CD, le programme d'installation sur le CD dépend du fichier RedHat/base/hdlist qui décrit quels sont les paquets RPM disponibles sur le CD. Le fichier hdlist peut être généré par le programme misc/src/install/genhdlist. Ce programme doit être lancé avec le chemin absolu vers la racine de la distribution comme seul argument. Voici le script updateHdlist qui appelle ce programme (à partir de la version 1.34 de ce guide pratique) :

            #!/bin/bash

            RHVERSION=6.1
            ARCH=i386

            echo generating hdlist...
            RHROOT=/home/luigi/tmp/redhat-${RHVERSION}
            GENHDDIR=${RHROOT}/${ARCH}/misc/src/anaconda/utils
          
            chmod u+x ${GENHDDIR}/genhdlist
            chmod 644 ${RHROOT}/${ARCH}/RedHat/base/hdlist
            ${GENHDDIR}/genhdlist ${RHROOT}/${ARCH} || echo "*** GENHDLIST FAILED ***"

            exit 0
          

Note importante pour la RedHat < 6.1

L'installation de la RedHat 6.1 est complètement différente de celle des versions précédentes car RedHat a introduit anaconda. Le programme genhdlist est maintenant localisé à un autre endroit, donc dans le script ci-dessus, nous utilisons

              GENHDDIR=${RHROOT}/${ARCH}/misc/src/anaconda/utils
            
alors que pour les releases jusqu'à la 6.0 (comprise), cette ligne doit être
              GENHDDIR=${RHROOT}/${ARCH}/misc/src/install
            

Dans certains cas, genhdlist échoue lors de son exécution, parce que l'exécutable n'est pas lié statiquement. Dans un tel cas, vous pouvez ajouter une nouvelle ligne ${RHROOT}/${ARCH}/RedHat/instimage/usr/lib dans /etc/ld.so.conf et lancer ldconfig -v.

Une autre solution est de recompiler genhdlist. La modification suivante au script updateHdlist a fonctionné sous RedHat 5.2 :

	    #!/bin/bash

	    RHVERSION=6.1
	    ARCH=i386

	    RHROOT=/misc/redhat/redhat-${RHVERSION}
	    GENHDDIR=${RHROOT}/${ARCH}/misc/src/anaconda/utils

	    echo Compiling genhdlist...
	    sed -e 's/FD_t/int/' \
	        -e 's/fdOpen/open/' \
	        -e 's/fdClose/close/' \
	        -e 's/fdFileno//' < ${GENHDDIR}/genhdlist.c > /tmp/genhdlist.c
	    cc -o /tmp/genhdlist -I/usr/include/rpm /tmp/genhdlist.c -lrpm -lz

	    echo generating hdlist...
	    chmod 644 ${RHROOT}/${ARCH}/RedHat/base/hdlist
	    /tmp/genhdlist ${RHROOT}/${ARCH} || echo "*** GENHDLIST FAILED ***"

	    exit 0
	  

Dans cette version du script, une copie du source C de genhdlist.c est envoyée à sed à travers un tube pour créer une copie dans /tmp qui compilera sous RedHat 5.2. Cette version de genhdlist est alors utilisée pour créer le fichier hdlist.

Note importante pour la RedHat 5.2

Tel qu'il est distribué avec la RedHat versions 5.2 et précédentes, genhdlist PLANTE si les fichiers dans le répertoire RedHat/RPMS ne sont pas des fichiers RPM ! Il cause des problèmes parce que dans la distribution 5.2, il existe un couple de fichiers non-RPM nommés ls-lR et ls-lR.gz situés dans RedHat/RPMS. Donc, vous devez supprimer tous les fichiers non-RPM du répertoire. Sinon, vous pouvez appliquer le correctif genhdlist.c.diff au fichier misc/src/install/genhdlist.c et faire un make. Ce correctif fait que genhdlist ignore tout fichier non-RPM.

5.3.1.2. Créer l'image iso du CD

Vous aurez besoin de créer un fichier image qui sera écrit sur le CD. Ce fichier fera 500 Mo ou plus donc trouvez une partition avec assez d'espace disque libre. Vous pouvez avoir besoin d'être root pour utiliser mount et cdrecord. Ici, vous préparerez l'image iso du CD amorçable à graver. Il n'est pas strictement nécessaire de créer un CD amorçable parce que vous pouvez utiliser une disquette de démarrage à la place, mais c'est vraiment une fonctionnalité sympathique (et elle rend votre disque plus similaire au disque général). Voici les commandes que j'utilise pour réaliser cette tâche :

            $ mkdir /repertoire-destination-images
            $ mkisofs  -r  -J  -T  -v  -V "Red Hat 6.1 (Hedwig)" \
                -c boot.cat  -b images/boot.img \
                -o /repertoire-destination-images/i386-disc.iso .
          
C'est nécessaire pour graver le disque (amorçable) et c'est exécuté à partir du répertoire haut niveau de la distribution. Le répertoire /repertoire-destination-images est le contenant de l'image iso que vous générez et il doit exister (nécessairement) avant le lancement de la procédure. Dans la table suivante, vous pouvez lire une brève explication des nombreuses options et de leur intérêt (la plupart ont été extraites de la page man de mkisofs).

Tableau 1. Options et paramètres de mkisofs

-r Extensions Rock Ridge avec les valeurs utiles pour les droits
-J Extensions Joliet pour utiliser le CD avec quelques différents systèmes d'exploitation
-T Génère un fichier TRANS.TBL dans chaque répertoire pour faire correspondre les noms de fichiers même sur des systèmes qui ne supportent pas des extensions Rock Ridge
-v Mode verbeux

-V <volid>

 Spécifie l'ID du volume (nom du volume ou label) à écrire dans le bloc maître.

-c <boot catalog>

 Spécifie le chemin et le nom du fichier du catalogue de démarrage à utiliser lors de la création du CD amorçable « El Torito ». Le nom du fichier doit être relatif au chemin source spécifié à mkisofs.

-b <eltorito boot image>

 Spécifie le chemin et le nom du fichier de l'image de démarrage à utiliser lors de la création du CD amorçable « El Torito ». Le chemin doit être relatif au chemin source spécifié à mkisofs et doit indiquer une image de disquette (ce qui explique pourquoi nous utilisons une des images de disquette trouvée sur le CD original). Vous pouvez vouloir le changer avec l'image pcmcia.img pour installer en utilisant des périphériques pcmcia comme des cartes réseau ou des lecteurs CDROMs.

-o <filename>

 Nom du fichier contenant l'image iso générée
. Ceci est le répertoire racine de notre image iso (nous sommes en train de travailler à partir du répertoire racine de chaque CD, donc un point est suffisant).

Vous trouverez des détails sur la façon de graver une image sur un média dans graver le CD. Les étapes mkisofs et cdrecord peuvent être exécutées en utilisant une application graphique comme X-CD-Roast qui doit déjà supporter la création de CDs amorçables (je ne l'ai jamais utilisé, donc ne vous attendez pas à ce que je vous donne une explication).

5.3.2. RedHat 6.2

Apparemment, il existe un problème lorsque vient le moment de graver un CD à mettre à jour. L'introduction de la version 4 du gestionnaire de paquets RedHat (RPM) fait que la procédure de mise à jour de l'installateur anaconda échoue. Donc, les procédures listées fonctionneront seulement si les paquets mis à jour sont construits en utilisant une version du logiciel RPM qui est antérieure ou égale à la 3.0.4 (donc, basiquement, 3.0.4 ou 3.0.5).

Si vous utilisez les paquets originels de RedHat, il faut éviter d'utiliser les mises à jour sorties après le 28 mars 2001 (ce qui est un peu inutile, selon moi) ou alors vous devez reconstruire les paquets en utilisant l'ancien format rpm. Les détails sur la procédure et les outils qui l'implémentent peuvent être trouvés dans le document rpmhack. Je n'ai pas personnellement testé cette procédure, mais elle semble fonctionner d'après les listes de diffusion anaconda-devel et kickstart (vous pouvez les trouver sur la section des listes de diffusion du site web de RedHat).

Si vous décidez de rester sur les anciens paquets originels et de compléter la mise à jour (en utilisant les paquets rpm 4.0.2 après que l'installation est finie), il existe deux façons de le faire, en fonction du type de mise à jour que vous souhaitez faire. Si certaines des mises à jour dépendent directement du processus d'installation (c'est-à-dire le noyau, python, kudzu), vous devrez utiliser la procédure de reconstruction de l'installateur expliquée dans le document Construire un CDROM Red Hat Linux 6.2, sinon vous pouvez toujours utiliser l'ancienne procédure (celle pour les releases précédentes jusqu'à la 6.1 comprise, expliquée dans la section précédente). Les deux dernières étapes, qui sont la création de l'image iso et la gravure du media, sont décrites respectivement dans créer des images iso et graver le CD.

5.3.3. RedHat 9, 8.0 et 7.3

Une fois encore, beaucoup de choses ont été changées avec la release des séries 7.x de la distribution. Il y a maintenant plus d'opérations à réaliser pour obtenir une série de CDs frais et mis à jour. En réalité, le CD a cessé d'être unique avec la release 7.0 et maintenant l'arbre doit être divisé pour tenir sur le média. Ceci est fait en utilisant le script splitdistro, qui est écrit en python comme beaucoup d'éléments de l'installateur anaconda. Pour terminer cette partie, vous devez utiliser une machine Linux RedHat 7.3, 8.0 ou 9 avec le paquet anaconda-runtime installé (il aura probablement la version 7.3.7, 8.0.4 ou 9.0.4), en fonction de la release que vous voulez reconstruire. La procédure est composée de sept étapes :

  1. Regénérer les fichiers hdlist et hdlist2

  2. Mettre à jour le fichier comps.xml (ou comps)

  3. Reconstruire l'installateur

  4. Diviser la distribution en plusieurs parties de la taille d'un CD

  5. Regénérer (encore) les fichiers hdlist et hdlist2

  6. Générer les images iso

  7. Ajouter et vérifier les signatures md5 dans les images iso

Toutes les étapes sont regroupées dans un seul script présenté dans la dernière section.

5.3.3.1. Opérations préliminaires sur l'arbre principal

Quelques uns des scripts inclus dans le paquet anaconda-runtime ont besoin de l'arbre principal qui doit être déplacé dans un sous-répertoire nommé comme l'architecture que nous allons construire (donc i386/ pour moi). Nous déplacerons tout vers un tel répertoire avant de lancer la procédure et de modifier l'invocation des scripts qui n'ont pas besoin de cette modification.

Pour la RedHat 9 et 8.0 :

            $ chmod  -R  u+w  /chemin-absolu-vers-le-répertoire-haut-niveau
            $ mkdir  -p  /chemin-absolu-vers-le-répertoire-haut-niveau/i386
            $ cd /chemin-absolu-vers-le-répertoire-haut-niveau
            $ /bin/mv  *  i386
          
Vous devez changer « /chemin-absolu-vers-le-répertoire-haut-niveau » avec le chemin absolu du répertoire où la racine de votre copie locale de la distribution est placée (peut-être quelque part sur un disque dur). Vous obtiendrez une erreur, à partir de l'exécution de la dernière commande, parce que le répertoire i386/ ne peut être déplacé sous lui-même, mais vous n'avez pas besoin de vous en soucier.

Pour RedHat 7.3 :

            $ chmod  -R  u+w  /chemin-absolu-vers-le-répertoire-haut-niveau
            $ mkdir  -p  /chemin-absolu-vers-le-répertoire-haut-niveau/i386
            $ cd /chemin-absolu-vers-le-répertoire-haut-niveau
            $ for i in `ls` ; do [ $i != "SRPMS" -a $i != i386 ] && /bin/mv $i i386 ; done
          
Vous ne devriez recevoir aucun message d'erreur cette fois, après la dernière commande (avec un peu d'espoir).

5.3.3.2. Regénérer les fichiers hdlist et hdlist2

Ceci est fait au moyen des deux commandes suivantes et avec l'aide du programme genhdlist.

            $ /usr/lib/anaconda-runtime/genhdlist  /chemin-absolu-vers-le-répertoire-haut-niveau/i386
            $ chmod  644 /chemin-absolu-vers-le-répertoire-haut-niveau/i386/RedHat/base/hdlist{,2}
          
Une fois encore, « /chemin-absolu-repertoire-haut-niveau » est le chemin absolu de ce répertoire où la racine de votre copie locale de la distribution est placée. La seconde commande est nécessaire pour vous assurer que les droits sont corrects pour ce fichier. Vous devez déjà avoir une idée de ce que sont ces fichiers si vous avez lu le répertoire RedHat.

5.3.3.3. Mettre à jour le fichier comps.xml

Dans RedHat Linux 8.0, le format du fichier comps a complètement changé et il est maintenant basé sur XML. Il apporte beaucoup plus de flexibilité et de facilité de personnalisation comme vous pouvez le lire dans le fichier comps. Si vous avez modifié ou si vous souhaitez modifier la liste des paquets installés, vous avez besoin de terminer cette étape. Cela implique en retour d'avoir la version modifiée de comps-9.tar.gz (l'original ne fonctionne pas pour moi) ou comps-8.0.tar.gz (suivant la release que vous construisez) qui contient le fichier maître comps trouvé sur le site web de RedHat et le paquet rpm comps-extras. Suivez alors ces étapes pour la Redhat 9 et 8.0 :

            $ cd /répertoire-de-votre-choix
            $ tar xzvf /chemin-vers-comps-9.tar.gz/comps-9.tar.gz 
            $ cd comps
            $ make
            $ cat comps-milan.xml |sed 's!</comps>!!g' >comps-tmp.xml
	    $ /usr/share/comps-extras/getfullcomps.py  comps.xml \
                 /chemin-absolu-vers-le-répertoire-haut-niveau i386 >> comps-tmp.xml
	    $ echo '</comps>' >> comps-tmp.xml
	    $ cp comps-tmp.xml /chemin-absolu-vers-le-répertoire-haut-niveau/i386/RedHat/base/comps.xml
          
Avec « /chemin-absolu-repertoire-haut-niveau », vous devez prendre soin d'assigner les noms valides vers « /répertoire-de-votre-choix » et « /chemin-vers-comps-9.tar.gz ». Le reste des commandes peut simplement être copié. Et vous devez évidemment changer 9 en 8.0 si vous construisez une release 8.0.

De nouveau, avant de lancer la commande make, vous devez modifier le fichier comps-milan.xml.in en utilisant votre éditeur de texte favori et en suivant les lignes de conduite et les suggestions trouvées dans le fichier comps et dans la section anaconda comps du site web RedHat.

Le script présenté dans la dernière section exécutera toutes les étapes nécessaires après la commande make, en utilisant la variable COMPSFILE, pour trouver le fichier comps-milan.xml (il n'a pas besoin d'avoir ce nom, j'utilise juste le nom original, mais vous pouvez le changer si vous le voulez).

Si vous utilisez RedHat 7.3, le fichier comps (avez-vous noté la différence de nom ?) est un fichier textuel avec une syntaxe complètement différente décrite avec plus de détails dans le fichier comps. Dans ce cas, les seules opérations nécessaires concernent la modification du fichier pour coller à vos besoins et la copie du fichier RedHat/base/comps dans l'arbre principal écrasant l'original.

5.3.3.4. Reconstruire l'installateur

Ceci reconstruira l'installateur anaconda dans votre copie locale de la distribution en utilisant les paquets mis à jour. Pour la Redhat 9, lancez :

            $ /usr/lib/anaconda-runtime/buildinstall  \
                --pkgorder /chemin-absolu-vers-le-répertoire-haut-niveau/pkgorder.txt  \
                --comp dist-9 --product "Red Hat Linux" --version 9  \
                --release "Redhat 9 (Shrike)" /chemin-absolu-vers-le-répertoire-haut-niveau/i386
          
Où, une fois encore, « /chemin-absolu-vers-le-répertoire-haut-niveau » est le répertoire où la racine de votre copie locale de la distribution est placée.

Pour la Redhat 8.0, la procédure est pratiquement identique (il manque l'option « --product ») :

            $ /usr/lib/anaconda-runtime/buildinstall  \
                --pkgorder /chemin-absolu-vers-le-répertoire-haut-niveau/pkgorder.txt  \
                --comp dist-8.0 --version 8.0  --release "Redhat 8.0 (Psyche)" \
                /chemin-absolu-vers-le-répertoire-haut-niveau/i386  
          

Ou si, comme moi, vous utilisez toujours une Redhat 7.3 :

            $ /usr/lib/anaconda-runtime/buildinstall  \
                --pkgorder /chemin-absolu-vers-le-répertoire-haut-niveau/pkgorder.txt  \
                --comp dist-7.3 --version 7.3 /chemin-absolu-vers-le-répertoire-haut-niveau/i386  
          

L'absence de l'option (obligatoire pour la 8.0) --release est la seule différence notable.

5.3.3.5. Diviser la distribution

Ceci créera cinq répertoires, chacun correspondant à un CD différent, et y placera des liens physiques vers les fichiers réels contenus dans votre copie locale de la distribution.

Note

Ceci ne fonctionnera pas du tout pour la RedHat 7.3 si vous n'utilisez pas la version modifiée du script splitdistro rapporté dans le prochain paragraphe. Pour la RedHat 8.0 et la 9, une version modifiée de splitdistro est proposée principalement parce que, même si les problèmes du script précédent ont été corrigés, l'exécution échouait toujours s'il n'existait pas suffisament de paquets pour remplir tous les CDs (les quatre premiers complètement et le dernier juste partiellement).

            $ $/usr/lib/anaconda-runtime/splitdistro  \
              --fileorder /chemin-absolu-vers-le-répertoire-haut-niveau/pkgorder.txt  --release \
                "Redhat 9.0 (Shrike)"  /chemin-absolu-vers-le-répertoire-haut-niveau  i386 
          
La seule chose que vous avez besoin de changer pour la 8.0 et la 7.3 est la phrase passée à l'option --release (qui doit être « Redhat 8.0 (Psyche) » ou « Redhat 7.3 (Valhalla) »).

Pour la Redhat 7.3, la version utilisée du script (python) splitdistro7.3 était extraite du paquet anaconda-runtime 7.3.7 et modifiée par moi. Vous pouvez le substituer à l'original (peut-être après avoir sauvegardé ce dernier) nommé /usr/lib/anaconda-runtime/splitdistro.

La seule modification (en dehors de quelques petites corrections) que le script a subie est un changement dans son comportement si le répertoire SRPMS n'est pas trouvé (il ne se termine pas, mais génère les CDs sans les paquets source).

Pour la Redhat 8.0, la version utilisée du script (python) splitdistro8.0 a été extraite du paquet anaconda-runtime 8.0.4 et modifiée une fois encore par moi pour obtenir certaines améliorations dont je ressentais le besoin. Vous devez y substituer le fichier original (peut-être après avoir sauvegardé ce dernier) nommé /usr/lib/anaconda-runtime/splitdistro. Néanmoins, l'original fonctionne bien, si vous voulez construire une distribution qui a tous les paquets SRPMS (donc pour remplir les cinq CDs, sinon le script échouera).

La seule modification apportée au script est un changement dans son comportement si le répertoire SRPMS n'est pas trouvé (il ne se termine pas en échouant, mais génère les CDs sans les paquets source) ou s'il y a un CD qui n'a aucun paquet (au lieu d'échouer, le script génère un répertoire vide).

Pour la Redhat 9, vous pouvez trouver une copie du script avec les mêmes modifications appliquées à la version incluse dans la release 8.0 ici : splitdistro9. Tout ce qui a été dit dans le paragraphe précédent pour la Redhat 8.0 s'applique à la version 9.

5.3.3.6. Regénérer les fichiers hdlist et hdlist2

Il est nécessaire de recréer les fichiers hdlist et hdlist2, en utilisant quelques unes des informations obtenues dans les étapes précédentes. Il n'y a pas de différences entre 7.3, 8.0 et 9 pour l'exécution du programme. La commande à envoyer est la suivante:

             $ /usr/lib/anaconda-runtime/genhdlist  \
                 --fileorder /chemin-absolu-vers-le-répertoire-haut-niveau/pkgorder.txt  --withnumbers \
                 /chemin-absolu-vers-le-répertoire-haut-niveau/i386-disc[1-3]
           
Comme vous pouvez le voir, il y a deux nouvelles options passées au programme, si vous vous rappellez le premier lancement. Le premier, --fileorder, indique à genhdlist d'utiliser le fichier pkgorder.txt que nous avons généré lors de la seconde étape (reconstruire l'installateur). Ce fichier garde les informations sur la division des paquets sur les différents CDs, et est utilisé par l'installateur pour déterminer dans quel ordre les paquets doivent être installés. De manière simple, si vous ne l'utilisez pas, vous finirez probablement en échangeant les différents CDs plusieurs fois durant l'installation. L'option --withnumbers est nécessaire pour associer un numéro de CD à chaque paquet (comme vous le voyez, une expression régulière indiquant les trois premières images iso est utilisée).

5.3.3.7. Générer les images iso

Ici, vous préparez les images iso à graver sur les CDs actuels. Il y a deux commandes différentes à utiliser pour le premier disque et pour le reste. Ceci est dû au besoin d'obtenir un premier CD qui soit amorçable. Ce n'est pas strictement nécessaire parce que vous pouvez utiliser une disquette de démarrage à la place mais il s'agit d'une fonctionnalité intéressante (et elle rend le comportement de vos disques plus similaire aux originaux). Il existe des commandes que j'utilise pour terminer la tâche :

              $ mkdir /repertoire-destination-images
              $ mkisofs  -r  -J  -T  -v  -V "Red Hat 9 (Shrike) disc 1" \
		  -c isolinux/boot.cat  -b isolinux/isolinux.bin -no-emul-boot \
                  -boot-load-size 4 -boot-info-table -o /repertoire-destination-images/i386-disc1.iso .
            
Cela est nécessaire pour graver le premier disque (amorçable) pour la RedHat 8.0 et 9 (sans émulation de disquette) et c'est exécuté à partir du répertoire haut-niveau de la distribution. Le répertoire /repertoire-destination-images est le contenant pour les cinq images iso que vous avez générées et il doit exister avant de lancer la procédure. La seule modification à effectuer pour Redhat 8 est le nom du volume, qui devrait être "Red Hat 8.0 (Psyche) disc 1".

              $ mkdir /repertoire-destination-images
              $ mkisofs  -r  -J  -T  -v  -V "Red Hat 7.3 (Valhalla) disc 1" \
                  -c boot.cat  -b dosutils/autoboot/boot.img \
                  -o /repertoire-destination-images/i386-disc1.iso .
            
Il est nécessaire de graver le premier disque (amorçable) sur la 7.3 et de l'exécuter à partir du répertoire haut-niveau de la distribution (cette fois avec une émulation de disquette).

Le reste des images peut être écrit au moyen d'une boucle « for » :

              $  for i in `echo 2 3 4 5` ; do mkisofs  -r  -J  -T  -v  \
                   -V "Red Hat 9 (Shrike) disc ${i}"  \
                   -o /repertoire-destination-images/i386-disc${i}.iso . ; done
            
La boucle présentée va préparer les quatre dernières images en leur donnant les bons numéros. Comme vous pouvez le voir, il y a deux options manquantes à partir du premier lancement, et, comme vous pouvez le deviner, elles sont nécessaires uniquement pour créer un CD amorçable. Dans créer des images iso, vous pouvez lire une brève explication sur les différentes options et leur significations (la plupart ont été extraites des pages man). De nouveau, si vous construisez une Redhat 8.0, vous devriez changer le nom du volume par "Red Hat 8.0 (Psyche) disc1".

5.3.3.8. Implanter et vérifier les signatures md5 dans les images iso

C'est une étape optionnelle mais elle permet l'utilisation de l'option « checkmedia » pour vérifier les signatures des CDs avant de les installer, et donc de garantir leur intégrité.

Les commandes suivantes permettent d'injecter ou de vérifier une signature md5 sur une image iso :

            $ /usr/lib/anaconda-runtime/implantisomd5 image-iso
            $ /usr/lib/anaconda-runtime/checkisomd5 image-iso
          

Après avoir fini toutes ces étapes, nous aurons les cinq images CD à graver. Considérant que taper tout ceci prend du temps, dans la prochaine section sera présenté un script qui réalisera toutes les opérations listées en une seule fois (n'oubliez pas de configurer les paramètres proprement).

5.3.3.9. Réunir toutes les étapes

Le script updateBuild.sh exécutera toutes les étapes nécessaires pour reconstruire les CDs de distribution pour la RedHat 7.3, 8.0 et 9 en un seul lancement (réalisé en tant que root). Avant d'utiliser ce script, vous devez configurer le fichier rhcd.conf après l'exportation d'une variable RHCDPATH pointant vers le répertoire où se trouve ce fichier. Si vous voulez inclure le fichier comps.xml modifié (ou comps) dans vos CDs comme expliqué dans le fichier comps, vous devrez le copier à l'emplacement défini au moyen de la variable COMPSFILE maintenant (avant d'exécuter le script). N'oubliez pas d'ajouter le script modifié splitdistro dans le répertoire /usr/lib/anaconda-runtime si vous en avez besoin.

            # export RHCDPATH=/home/luigi/tmp/rhcd-scripts
            # sh updateBuild.sh