<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>5. Inclure les mises à jour</title> <link rel="stylesheet" href="style.css" type="text/css"> <meta name="generator" content="DocBook XSL Stylesheets V1.66.1"> <link rel="start" href="index.html" title=" Guide pratique de gravure d'un CD RedHat "> <link rel="up" href="index.html" title=" Guide pratique de gravure d'un CD RedHat "> <link rel="prev" href="ar01s04.html" title="4. Obtenir votre copie locale de la distribution"> <link rel="next" href="ar01s06.html" title="6. Graver le ou les CD"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <div class="navheader"> <table width="100%" summary="Navigation header"> <tr><th colspan="3" align="center">5. Inclure les mises à jour</th></tr> <tr> <td width="20%" align="left"> <a accesskey="p" href="ar01s04.html">Précédent</a> </td> <th width="60%" align="center"> </th> <td width="20%" align="right"> <a accesskey="n" href="ar01s06.html">Suivant</a> </td> </tr> </table> <hr> </div> <div class="sect1" lang="fr"> <div class="titlepage"><div><div><h2 class="title" style="clear: both"> <a name="inclusion-des-mises-a-jour"></a>5. Inclure les mises à jour</h2></div></div></div> <p> Il y a trois étapes, les deux premières étant (pratiquement) identiques pour toutes les versions, alors que la dernière change un peu en raison des modifications de l'installateur anaconda : </p> <div class="orderedlist"><ol type="i"> <li><p> Corriger les modes de protection des fichiers </p></li> <li><p> Remplacer les RPM mis à jour </p></li> <li><p> Reconstruire l'installateur </p></li> </ol></div> <p> Pour incorporer les mises à jour, vous aurez besoin d'avoir un accès en écriture au répertoire de la distribution à partir d'une machine Linux, avec une version fonctionnelle de <a href="http://www.rpm.org" target="_top">rpm</a> installée, alors que <span class="emphasis"><em>pour reconstruire l'installateur anaconda, vous aurez besoin d'utiliser une version du Linux RedHat égale à celle pour laquelle vous reconstruisez l'installateur (sinon la procédure échouera)</em></span>. Si vous maintenez à jour un miroir du répertoire <tt class="filename">updates</tt>, vous pourrez à tout moment produire un CD incluant les dernières mises à jours en répétant ces étapes. </p> <div class="sect2" lang="fr"> <div class="titlepage"><div><div><h3 class="title"> <a name="mise-a-jour-des-permissions"></a>5.1. Corriger les modes de protection des fichiers</h3></div></div></div> <p> Durant le processus d'installation des versions jusqu'à la 6.2 incluse, certains programmes sont lancés directement depuis le CD. Malheureusement, le programme FTP ne préserve pas toujours les droits des fichiers et des répertoires copiés. Donc, il est nécessaire de s'assurer que les droits d'exécution sont bien donnés 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 <a href="outils/RedHat-CD-HOWTO/rhcd-scripts/updatePerm.sh" target="_top">updatePerm.sh</a> 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 de cette procédure pour les versions 7.3, 8.0 et 9 est la mise à jour des droits des répertoires, le reste ne fera aucun mal et cela maintient les choses cohérentes. Ce script est quasi-identique au script <tt class="filename">updatePerm</tt> inclus dans la version précédente de ce guide pratique, seuls quelques changements mineurs ont été réalisés. Avant d'utiliser ce script, vous devez paramétrer le fichier <a href="outils/RedHat-CD-HOWTO/rhcd-scripts/rhcd.conf" target="_top">rhcd.conf</a> et exporter la variable <tt class="literal">RHCDPATH</tt> pointant vers le répertoire où se trouve ce fichier. </p> <pre class="screen"> $ export RHCDPATH=<i class="replaceable"><tt>/home/luigi/tmp/</tt></i>rhcd-scripts $ sh updatePerm.sh </pre> </div> <div class="sect2" lang="fr"> <div class="titlepage"><div><div><h3 class="title"> <a name="remplacement-des-paquets"></a>5.2. Remplacer les RPM mis à jour</h3></div></div></div> <p> Le script <a href="outils/RedHat-CD-HOWTO/rhcd-scripts/updateCD.sh" target="_top">updateCD.sh</a> copie tous les nouveaux fichiers du répertoire <tt class="filename">update</tt> vers le répertoire <tt class="filename">RPMS</tt> (et <tt class="filename">SRPMS</tt>). Le script utilise le programme <tt class="filename">rvc</tt> qui a été présenté dans la section <a href="ar01s03.html#comparer-versions-rpm">comparer les versions des RPM</a> pour déterminer quels sont les paquets du répertoire update qui sont plus récents. Les paquets plus anciens sont déplacés dans le répertoire <tt class="literal">${OLDDIR}</tt>. Si la variable <tt class="literal">CHECKSIG</tt> est positionnée à « <span class="quote"><tt class="literal">yes</tt></span> », tous les paquets de l'arborescence principale verront leur signature vérifiée. Si la vérification de signature d'un paquet échoue (le type de vérification dépend de la variable <tt class="literal">USEGPG</tt> du fichier <a href="outils/RedHat-CD-HOWTO/rhcd-scripts/rhcd.conf" target="_top">rhcd.conf</a>), celui-ci est déplacé dans le répertoire <tt class="literal">OLDDIR</tt> avec une extension ajoutée, « <span class="quote"><tt class="literal">CDcheckfail</tt></span> ». </p> <p> Avant d'utiliser ce script, vous devrez paramétrer le fichier de configuration <a href="outils/RedHat-CD-HOWTO/rhcd-scripts/rhcd.conf" target="_top">rhcd.conf</a> et exporter la variable <tt class="literal">RHCDPATH</tt> pointant vers le répertoire où se trouve ce fichier. </p> <pre class="screen"> $ export RHCDPATH=<i class="replaceable"><tt>/home/luigi/tmp/</tt></i>rhcd-scripts $ sh updateCD.sh </pre> <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"> <tr> <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td> <th align="left">Note</th> </tr> <tr><td colspan="2" align="left" valign="top"><p> Après avoir incorporé les mises à jour dans le répertoire principal <tt class="filename">RedHat/RPMS</tt>, votre copie de la distribution n'est plus un miroir du site de la distribution RedHat. En fait, elle est plus à jour ! Donc, si vous essayez de resynchroniser votre distribution en utilisant mirror, les anciennes versions des paquets RPM qui ont été mis à jour seront téléchargées une nouvelle fois et les mises à jour supprimées. La procédure basée sur bash et wget ne souffre pas de ce problème, mais laissera l'arborescence principale dans un état incohérent. Les anciens et les nouveaux paquets seront dans ce cas mélangés ensembles. Cependant, vous pourrez les trouver et les supprimer en intégrant l'exécutable <tt class="filename">rvc</tt> à un script shell simple (que je laisserai comme exercice pour le lecteur…). </p></td></tr> </table></div> </div> <div class="sect2" lang="fr"> <div class="titlepage"><div><div><h3 class="title"> <a name="reconstruire-l-installateur"></a>5.3. Reconstruire l'installateur</h3></div></div></div> <p> Les choses ont bien changé dans cette section avec l'arrivée de l'installateur anaconda (version 6.1) et la considérable augmentation de taille (et… du nombre de CD) que les distributions 7.x et 8.0 ont connue. Jusqu'à la version 6.2, la seule étape composant cette section était la génération d'un nouveau fichier <tt class="filename">hdlist</tt>. Avec la version 6.2, cela ne reste vrai que jusqu'à un certain point, en raison des changements dans l'installateur anaconda, dans le logiciel <span class="emphasis"><em>rpm</em></span> lui-même (qui est passé des versions 3.x aux versions 4.x) et de la migration des paquets mis à jour vers cette nouvelle version (les mises à jour de la version 6.2 sont en fait empaquetées pour les deux versions majeures du logiciel <tt class="filename">rpm</tt>). Nous envisagerons trois procédures différentes en essayant de couvrir toutes les versions. </p> <div class="sect3" lang="fr"> <div class="titlepage"><div><div><h4 class="title"> <a name="reconstruire-rh61"></a>5.3.1. RedHat ≤ 6.1</h4></div></div></div> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="id2529913"></a>5.3.1.1. Régénérer le fichier hdlist</h5></div></div></div> <p> Lors de l'installation à partir du CD, le programme d'installation du CD se base sur le fichier <tt class="filename">RedHat/base/hdlist</tt> qui décrit quels sont les paquets RPM disponibles sur le CD. Le fichier <tt class="filename">hdlist</tt> peut être généré par le programme <tt class="filename">misc/src/install/genhdlist</tt>. Ce programme doit être lancé avec comme seul argument le chemin absolu vers la racine de la distribution. Voici le script <tt class="filename">updateHdlist</tt> qui appelle ce programme (depuis la version 1.34 de ce guide pratique) : </p> <pre class="programlisting"> #!/bin/bash RHVERSION=6.1 ARCH=i386 echo "Génération de hdlist..." RACINERH=<i class="replaceable"><tt>/home/luigi/tmp/</tt></i>redhat-${RHVERSION} GENHDDIR=${RACINERH}/${ARCH}/misc/src/anaconda/utils chmod u+x ${GENHDDIR}/genhdlist chmod 644 ${RACINERH}/${ARCH}/RedHat/base/hdlist ${GENHDDIR}/genhdlist ${RACINERH}/${ARCH} || echo "*** ÉCHEC DE GENHDLIST ***" exit 0 </pre> <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note: Note importante pour les RedHat < 6.1"> <tr> <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td> <th align="left">Note importante pour les RedHat < 6.1</th> </tr> <tr><td colspan="2" align="left" valign="top"> <p> L'installation de la Redhat 6.1 est complètement différente de celle des versions précédentes car RedHat a introduit <span class="emphasis"><em>anaconda</em></span>. Le programme <tt class="filename">genhdlist</tt> est maintenant situé à un autre endroit, donc dans le script ci-dessus, nous utiliserons : </p> <pre class="programlisting"> GENHDDIR=${RHROOT}/${ARCH}/misc/src/anaconda/utils </pre> <p> alors que pour les versions jusqu'à 6.0 (comprise), cette ligne doit être : </p> <pre class="programlisting"> GENHDDIR=${RHROOT}/${ARCH}/misc/src/install </pre> </td></tr> </table></div> <p> Dans certains cas, <tt class="filename">genhdlist</tt> n'arrive pas à démarrer, car l'exécutable n'est pas lié statiquement. Dans un tel cas, vous pouvez ajouter la ligne : </p> <pre class="programlisting"> ${RHROOT}/${ARCH}/RedHat/instimage/usr/lib </pre> <p> dans le fichier <tt class="filename">/etc/ld.so.conf</tt> et lancer la commande <b class="userinput"><tt>ldconfig -v</tt></b>. </p> <p> Une autre solution est de recompiler <tt class="filename">genhdlist</tt>. La modification suivante du script <tt class="filename">updateHdlist</tt> fonctionnait sous Redhat 5.2 : </p> <pre class="programlisting"> #!/bin/bash RHVERSION=6.1 ARCH=i386 RACINERH=/misc/redhat/redhat-${RHVERSION} GENHDDIR=${RACINERH}/${ARCH}/misc/src/anaconda/utils echo "Compilation de hdlist..." 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 "Génération de hdlist..." chmod 644 ${RACINERH}/${ARCH}/RedHat/base/hdlist /tmp/genhdlist ${RACINERH}/${ARCH} || echo "*** ÉCHEC DE GENHDLIST ***" exit 0 </pre> <p> Dans cette version du script, une copie du source C de <tt class="filename">genhdlist.c</tt>, compilable sous RedHat 5.2, est créée dans <tt class="filename">/tmp</tt>. Cette copie est réalisée en filtrant le source C original avec <span><b class="command">sed</b></span> via un tube. Cette version de <tt class="filename">genhdlist</tt> est alors utilisée pour créer le fichier <tt class="filename">hdlist</tt>. </p> <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note: Note importante pour la Redhat 5.2"> <tr> <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td> <th align="left">Note importante pour la Redhat 5.2</th> </tr> <tr><td colspan="2" align="left" valign="top"><p> Tel qu'il est distribué avec les RedHat versions 5.2 et précédentes, <tt class="filename">genhdlist</tt> PLANTE si le répertoire <tt class="filename">RedHat/RPMS</tt> contient des fichiers qui ne sont <span class="emphasis"><em>pas</em></span> des fichiers RPM ! Cela pose problème car dans la distribution 5.2, il y a des fichiers non-RPM nommés <tt class="filename">ls-lR</tt> et <tt class="filename">ls-lR.gz</tt> situés dans <tt class="filename">RedHat/RPMS</tt>. Donc, vous devez supprimer tous les fichiers non-RPM de ce répertoire. Sinon, vous pouvez appliquer le correctif <a href="outils/RedHat-CD-HOWTO/rhcd-scripts/oldversion/genhdlist.c.diff" target="_top">genhdlist.c.diff</a> au fichier <tt class="filename">misc/src/install/genhdlist.c</tt> et faire un <span class="emphasis"><em>make</em></span>. Ce correctif fait ignorer à <tt class="filename">genhdlist</tt> tout fichier non-RPM. </p></td></tr> </table></div> </div> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="creer-l-image-iso"></a>5.3.1.2. Créer l'image iso du CD</h5></div></div></div> <p> Vous aurez besoin de créer un fichier image qui sera écrit sur le CD. Ce fichier fera au moins 500 Mo, donc trouvez une partition avec assez d'espace libre. Vous aurez peut-être besoin d'utiliser le compte root pour lancer les commandes mount et cdrecord. Ici, vous allez préparer l'image iso du CD amorçable que vous allez graver. Il n'est pas strictement nécessaire de créer un CD amorçable, car vous pourriez utiliser une disquette de démarrage à la place, mais c'est une fonctionnalité vraiment sympathique (et elle rend le comportement de votre disque plus similaire à celui du disque original). Voici les commandes que j'utilise pour réaliser cette tâche : </p> <pre class="programlisting"> $ mkdir <i class="replaceable"><tt>/repertoire-destination-images</tt></i> $ mkisofs -r -J -T -v -V "Red Hat 6.1 (Hedwig)" \ -c boot.cat -b images/boot.img \ -o <i class="replaceable"><tt>/repertoire-destination-images</tt></i>/i386-disc.iso . </pre> <p> C'est nécessaire pour graver le disque (amorçable) et cela doit être lancé à partir du répertoire de niveau supérieur de la distribution. Le répertoire <tt class="filename"><i class="replaceable"><tt>/repertoire-destination-images</tt></i></tt> est le réceptacle de l'image iso que vous allez générez et il doit (obligatoirement) exister avant de lancer la procédure. Dans la table suivante, vous pourrez lire une brève explication des nombreuses options et de leur signification (la plupart ont été extraites de la page de manuel de <tt class="filename">mkisofs</tt>). </p> <p> </p> <div class="table"> <a name="id2530365"></a><p class="title"><b>Tableau 1. Options et paramètres de mkisofs</b></p> <table summary="Options et paramètres de mkisofs" border="0"> <colgroup> <col align="left"> <col align="left"> </colgroup> <tbody> <tr> <td align="left">-r</td> <td align="left"> Extensions Rock Ridge, indiquant des valeurs utiles pour les droits. </td> </tr> <tr> <td align="left">-J</td> <td align="left"> Extensions Joliet pour utiliser le CD sous quelques autres systèmes d'exploitation. </td> </tr> <tr> <td align="left">-T</td> <td align="left"> Génère un fichier TRANS.TBL dans chaque répertoire afin que, même sur des systèmes non compatibles avec les extensions Rock Ridge, la correspondance des noms de fichier soit correcte. </td> </tr> <tr> <td align="left">-v</td> <td align="left">Mode bavard</td> </tr> <tr> <td align="left"><tt class="literal">-V <i class="replaceable"><tt>identifiant</tt></i></tt></td> <td align="left"> Indique l'identifiant du volume (nom ou label du volume) qui devra être écrit dans le bloc maître. </td> </tr> <tr> <td align="left"><tt class="literal">-c <i class="replaceable"><tt>catalogue_de_démarrage</tt></i></tt></td> <td align="left"> Indique le chemin et le nom du fichier contenant le catalogue de démarrage, qui sera utilisé lors de la création d'un CD amorçable « <span class="quote">El Torito</span> ». Le chemin doit être relatif au chemin source indiqué à mkisofs. </td> </tr> <tr> <td align="left"><tt class="literal">-b <i class="replaceable"><tt>image_eltorito</tt></i></tt></td> <td align="left"> Indique le chemin et le nom du fichier contenant l'image de démarrage à utiliser lors de la création du CD amorçable « <span class="quote">El Torito</span> ». Le chemin doit être relatif au chemin source indiqué à mkisofs. L'image doit être une image de disquette (ce qui explique pourquoi nous utilisons une des images de disquette trouvées sur le CD original). Vous pourrez choisir d'utiliser l'image <tt class="filename">pcmcia.img</tt> à la place si vous voulez réaliser une installation en utilisant des périphériques PCMCIA tels que des cartes réseau ou des lecteurs CDROM. </td> </tr> <tr> <td align="left"><tt class="literal">-o <i class="replaceable"><tt>nom_du_fichier</tt></i></tt></td> <td align="left">Nom du fichier contenant l'image iso générée</td> </tr> <tr> <td align="left">.</td> <td align="left"> Ceci est le répertoire racine de notre image iso (nous travaillons à partir du répertoire racine de chaque CD, donc un point est suffisant). </td> </tr> </tbody> </table> </div> <p> </p> <p> Vous trouverez plus d'informations sur la façon de graver une image sur un support dans <a href="ar01s06.html">graver le CD</a>. Les étapes <tt class="filename">mkisofs</tt> et <tt class="filename">cdrecord</tt> peuvent être exécutées en utilisant une application graphique comme <a href="http://www.xcdroast.org/" target="_top">X-CD-Roast</a> qui devrait actuellement permettre la création de CD amorçables (je ne l'ai jamais utilisé, donc ne vous attendez pas à ce que je vous donne des explications). </p> </div> </div> <div class="sect3" lang="fr"> <div class="titlepage"><div><div><h4 class="title"> <a name="reconstruire-rh62"></a>5.3.2. Redhat 6.2</h4></div></div></div> <p> Apparemment, c'est l'enfant difficile des distributions RedHat lorsque vient le moment de graver un CD à jour. L'arrivée de la version 4 du gestionnaire de paquets RedHat (RPM) a cassé la procédure de mise à jour de l'installateur anaconda. Les procédures que j'indique fonctionneront uniquement si les paquets mis à jour sont construits en utilisant une version du logiciel RPM postérieure ou égale à la version 3.0.4 (donc, en pratique, la version 3.0.4 ou 3.0.5). </p> <p> Si vous utilisez les paquets originaux de RedHat, il faudra éviter d'utiliser les mises à jour publiées après le 28 mars 2001 (ce qui est un peu inutile selon moi). Une autre solution est de reconstruire les paquets en utilisant l'ancien format rpm. Vous trouverez des informations sur cette procédure et les outils nécessaires sur la page <a href="http://www.tigress.co.uk/rmy/rh62/rpmhack.html" target="_top">« <span class="quote">rpmhack</span> »</a>. Je n'ai pas personnellement essayé cette procédure, mais, d'après les listes de discussion anaconda-devel et kickstart<sup>[<a name="id2530700" href="#ftn.id2530700">2</a>]</sup>, elle semble fonctionner. </p> <p> Si vous décidez de rester sur les anciens paquets originaux et de compléter la mise à jour (en utilisant les paquets rpm 4.0.2 après la fin de l'installation), il existe deux façons de le faire, en fonction du type de mise à jour que vous souhaitez effectuer. 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 <a href="http://web.archive.org/web/20030207104819/http://www.scyld.com/~pzb/rhcd.html" target="_top">Construire un CDROM Red Hat Linux 6.2</a>. Sinon vous pourrez utiliser l'ancienne procédure (celle pour les versions précédentes jusqu'à la 6.1 incluse, telle qu'elle est 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 support, sont décrites respectivement dans <a href="ar01s05.html#creer-l-image-iso">créer des images iso</a> et <a href="ar01s06.html">graver le CD</a>. </p> </div> <div class="sect3" lang="fr"> <div class="titlepage"><div><div><h4 class="title"> <a name="reconstruire-rh73"></a>5.3.3. Redhat 9, 8.0 et 7.3</h4></div></div></div> <p> Une fois encore, beaucoup de choses ont été changées avec la sortie de la série 7.x. Il faut maintenant réaliser un plus grand nombre d'opérations pour obtenir une série de CD frais et à jour. En réalité, le CD a cessé d'être unique avec la version 7.0. L'arborescence doit maintenant être divisé pour tenir sur le support. Ce qui est fait en utilisant le script <span><b class="command">splitdistro</b></span>, qui est écrit en python comme beaucoup d'éléments de l'installateur anaconda. Pour terminer cette partie, vous <span class="emphasis"><em>devrez</em></span> utiliser une machine Linux utilisant la distribution Redhat 7.3, 8.0 ou 9 sur laquelle soit installé le paquet <i class="medialabel">anaconda-runtime</i> (il aura probablement la version 7.3.7, 8.0.4 ou 9.0.4), en fonction de la version que vous voulez reconstruire. La procédure est composée de sept étapes : </p> <div class="orderedlist"><ol type="i"> <li><p> Régénérer les fichiers <tt class="filename">hdlist</tt> et <tt class="filename">hdlist2</tt> </p></li> <li><p> Mettre à jour le fichier <tt class="filename">comps.xml</tt> (ou <tt class="filename">comps</tt>) </p></li> <li><p>Reconstruire l'installateur</p></li> <li><p>Diviser la distribution en plusieurs parties de la taille d'un CD</p></li> <li><p> Régénérer (encore) les fichiers <tt class="filename">hdlist</tt> et <tt class="filename">hdlist2</tt> </p></li> <li><p>Générer les images iso</p></li> <li><p>Ajouter et vérifier les signatures md5 dans les images iso</p></li> </ol></div> <p> Toutes ces étapes sont regroupées en un seul script qui sera présenté dans la section « <span class="quote"><a href="ar01s05.html#script-updatebuild">le script updateBuild.sh</a></span> ». </p> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="id2530930"></a>5.3.3.1. Opérations préliminaires sur l'arborescence principale</h5></div></div></div> <p> Quelques-uns des scripts inclus dans le paquet <i class="medialabel">anaconda-runtime</i> ont besoin de l'arborescence principale, qui doit être déplacée dans un sous-répertoire nommé comme l'architecture que nous allons construire (donc <tt class="filename">i386/</tt> chez moi). Nous déplacerons tout vers ce répertoire avant de lancer la procédure. Nous corrigerons également les appels des scripts qui n'ont pas besoin de cette modification. </p> <p> Pour la Redhat 9 et 8.0 : </p> <pre class="programlisting"> $ chmod -R u+w <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i> $ mkdir -p <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/i386 $ cd <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i> $ /bin/mv * i386 </pre> <p> Vous devrez remplacer <tt class="filename"> <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i> </tt> par le <span class="emphasis"><em>chemin absolu</em></span> du répertoire où la racine de votre copie locale de la distribution est placée (peut-être quelque part sur l'un des disques durs). Vous obtiendrez une erreur, lors de l'exécution de la dernière commande, car le répertoire <tt class="filename">i386/</tt> ne peut être déplacé sous lui-même, mais vous ne devez pas en tenir compte. </p> <p> Pour Redhat 7.3 : </p> <pre class="programlisting"> $ chmod -R u+w <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i> $ mkdir -p <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/i386 $ cd <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i> $ for i in `ls` ; do [ $i != "SRPMS" -a $i != i386 ] && \ /bin/mv $i i386 ; done </pre> <p> Cette fois-ci (je l'espère) la dernière commande ne devrait produire aucune erreur. </p> </div> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="id2531063"></a>5.3.3.2. Régénérer les fichiers hdlist et hdlist2</h5></div></div></div> <p> Ceci est fait au moyen des deux commandes suivantes et avec l'aide du programme <span><b class="command">genhdlist</b></span>. </p> <pre class="programlisting"> $ /usr/lib/anaconda-runtime/genhdlist <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/i386 $ chmod 644 <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/i386/RedHat/base/hdlist{, 2} </pre> <p> Une fois encore <tt class="filename"> <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i> </tt> est le <span class="emphasis"><em>chemin absolu</em></span> du 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 de ce fichier sont corrects. Vous devez déjà avoir une idée de ce que sont ces fichiers si vous avez lu la section « <span class="quote"><a href="ar01s02.html#repertoire-redhat">le répertoire RedHat</a></span> ». </p> </div> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="maj-comps.xml"></a>5.3.3.3. Mettre à jour le fichier <tt class="filename">comps.xml</tt></h5></div></div></div> <p> Avec la distribution Linux RedHat 8.0, le format du fichier <tt class="filename">comps</tt> a complètement changé et il est maintenant basé sur XML. Ce nouveau format apporte une plus grande flexibilité et facilité de personnalisation. La section « <span class="quote"><a href="ar01s07.html">le fichier comps</a></span> » vous donnera plus d'informations sur le sujet. Si vous avez modifié ou si vous souhaitez modifier la liste des paquets installés, vous aurez besoin de réaliser cette étape. Ce qui implique alors d'avoir installé une version modifiée du paquet <a href="rhcd-scripts/comps-9.tar.gz" target="_top">comps-9.tar.gz</a> (l'original ne fonctionne pas pour moi) ou <a href="http://rhlinux.redhat.com/anaconda/comps-8.0.tar.gz" target="_top"> comps-8.0.tar.gz</a> (suivant la version que vous construisez) qui contient le fichier maître comps trouvé sur le site web de RedHat, ainsi que le paquet <tt class="filename">comps-extras</tt>. Suivez alors ces étapes pour la Redhat 9 et 8.0 : </p> <pre class="programlisting"> $ cd <i class="replaceable"><tt>/répertoire-de-votre-choix</tt></i> $ tar xzvf <i class="replaceable"><tt>/chemin-vers-comps-9.tar.gz</tt></i>/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 \ <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i> i386 >> comps-tmp.xml $ echo '</comps>' >> comps-tmp.xml $ cp comps-tmp.xml <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/i386/RedHat/base/comps. xml </pre> <p> En plus de <tt class="filename"> <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i> </tt>, vous devrez prendre soin d'indiquer des noms valides pour <tt class="filename"> <i class="replaceable"><tt>/répertoire-de-votre-choix</tt></i> </tt> et <tt class="filename"> <i class="replaceable"><tt>/chemin-vers-comps-9.tar.gz</tt></i> </tt>. Le reste des commandes pourra simplement être recopié. Et vous devrez évidemment changer 9 en 8.0 si vous construisez une version 8.0. </p> <p> De nouveau, avant de lancer la commande <span><b class="command">make</b></span>, vous devrez modifier le fichier <tt class="filename">comps-milan.xml.in</tt> en utilisant votre éditeur de texte favori et en suivant les lignes de conduite et suggestions de la section « <span class="quote"><a href="ar01s07.html">le fichier comps</a></span> » et de la page « <span class="quote"><a href="http://rhlinux.redhat.com/anaconda/comps.html" target="_top">anaconda comps</a></span> » du site web RedHat. </p> <p> Toutes les étapes nécessaires après la commande <span><b class="command">make</b></span> seront réalisées par le script de la section « <span class="quote"><a href="ar01s05.html#script-updatebuild">le script updateBuild.sh</a></span> ». Ce script utilise la variable <tt class="literal">COMPSFILE</tt>, pour trouver le fichier <tt class="filename">comps-milan.xml</tt> (il n'a pas besoin d'avoir ce nom, j'utilise juste le nom original, mais vous pouvez le changer si vous le voulez). </p> <p> Si vous utilisez la distribution Redhat 7.3, le fichier <tt class="filename">comps</tt> (avez-vous remarqué la différence de nom ?) est un fichier de texte avec une syntaxe complètement différente. Cette syntaxe est décrite plus précisément dans <a href="ar01s07.html">le fichier comps</a>. Pour cette distribution, les seules opérations nécessaires sont l'adaptation du fichier pour correspondre à vos besoins et la recopie du fichier <tt class="filename">RedHat/base/comps</tt> dans l'arborescence principale en remplacement de l'original. </p> </div> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="id2531395"></a>5.3.3.4. Reconstruire l'installateur</h5></div></div></div> <p> Cette étape consiste à reconstruire l'installateur anaconda dans votre copie locale de la distribution en utilisant les paquets mis à jour. Pour la Redhat 9, lancez : </p> <pre class="programlisting"> $ /usr/lib/anaconda-runtime/buildinstall \ --pkgorder <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/pkgorder.txt \ --comp dist-9 --product "Red Hat Linux" --version 9 \ --release "Redhat 9 (Shrike)" <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/i386 </pre> <p> Où, une fois encore, <tt class="filename"> <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i> </tt> est le répertoire où est placée la racine de votre copie locale de la distribution. </p> <p> Pour la distribution Redhat 8.0, la procédure est pratiquement identique (l'option <tt class="option"> --product </tt> en moins) : </p> <pre class="programlisting"> $ /usr/lib/anaconda-runtime/buildinstall \ --pkgorder <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/pkgorder.txt \ --comp dist-8.0 --version 8.0 --release "Redhat 8.0 (Psyche)" \ <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/i386 </pre> <p> Ou si, comme moi, vous utilisez toujours une Redhat 7.3 : </p> <pre class="programlisting"> $ /usr/lib/anaconda-runtime/buildinstall \ --pkgorder <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/pkgorder.txt \ --comp dist-7.3 --version 7.3 <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/i386 </pre> <p> L'absence de l'option (obligatoire pour la 8.0) <tt class="option"> --release </tt> est la seule différence notable. </p> </div> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="id2531504"></a>5.3.3.5. Diviser la distribution</h5></div></div></div> <p> Dans cette étape, nous allons créer cinq répertoires, chacun correspondant à un CD différent et y placer des liens physiques vers les fichiers réels contenus dans votre copie locale de la distribution. </p> <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"> <tr> <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="images/note.png"></td> <th align="left">Note</th> </tr> <tr><td colspan="2" align="left" valign="top"><p> Cette étape ne marchera pas du tout avec la distribution RedHat 7.3 si vous n'utilisez pas la version modifiée du script <tt class="filename">splitdistro</tt> présentée dans le prochain paragraphe. Pour les distribution RedHat 8.0 et 9, une version modifiée de <tt class="filename">splitdistro</tt> 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 systématiquement s'il n'existait pas suffisamment de paquets pour remplir tous les CD (les quatre premiers complètement et le dernier même seulement partiellement). </p></td></tr> </table></div> <p> </p> <pre class="programlisting"> $ /usr/lib/anaconda-runtime/splitdistro \ --fileorder <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/pkgorder.txt --release \ "Redhat 9.0 (Shrike)" <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i> i386 </pre> <p> La seule chose que vous ayez besoin de changer pour les versions 8.0 et la 7.3 est le texte indiqué à l'option <tt class="option">--release</tt> (qui doit être « <span class="quote">Redhat 8.0 (Psyche)</span> » ou « <span class="quote">Redhat 7.3 (Valhalla)</span> »). </p> <p> Pour la distribution Redhat 7.3, la version du script (python) <a href="outils/RedHat-CD-HOWTO/rhcd-scripts/splitdistro7.3" target="_top">splitdistro7.3</a> utilisée a été extraite du paquet <span class="emphasis"><em>anaconda-runtime 7.3.7</em></span> et modifiée par moi. Vous pouvez le substituer à l'original, nommé <tt class="filename">/usr/lib/anaconda-runtime/splitdistro</tt>, après avoir éventuellement sauvegardé ce dernier. </p> <p> La seule modification (en dehors de quelques petites corrections) que ce script aie subie est un changement de son comportement si le répertoire <tt class="filename">SRPMS</tt> n'est pas trouvé (il n'échoue pas, mais génère les CD sans paquets source). </p> <p> Pour la distribution Redhat 8.0, la version du script (python) <a href="outils/RedHat-CD-HOWTO/rhcd-scripts/splitdistro8.0" target="_top">splitdistro8.0</a> utilisée a été extraite du paquet <i class="medialabel">anaconda-runtime 8.0.4</i> et modifiée une nouvelle fois par moi pour obtenir quelques améliorations dont je ressentais le besoin. Vous devez le substituer au fichier original (peut-être après avoir sauvegardé ce dernier) nommé <tt class="filename">/usr/lib/anaconda-runtime/splitdistro</tt>. Néanmoins, l'original fonctionnera bien pour construire une distribution qui comprend tous les paquets <span class="emphasis"><em>SRPMS</em></span> (et ainsi remplir les cinq CD, car sinon le script échouera). </p> <p> La seule modification apportée au script est un changement dans son comportement s'il ne trouve pas le répertoire <tt class="filename">SRPMS</tt> (il n'échoue plus, mais génère les CD sans paquets source) ou s'il y a un CD sans paquet (le script générera un répertoire vide un lieu d'échouer). </p> <p> Pour la distribution Redhat 9, vous trouverez une copie du script incluant les mêmes modifications que le script de la 8.0 ici : <a href="rhcd-scripts/splitdistro9" target="_top">splitdistro9</a>. Tout ce qui a été dit dans le paragraphe précédent pour la distribution Redhat 8.0 s'applique à la version 9. </p> </div> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="id2531721"></a>5.3.3.6. Régénérer les fichiers hdlist et hdlist2</h5></div></div></div> <p> Il est nécessaire de recréer les fichiers hdlist et hdlist2, en utilisant certaines 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 de ce programme. La commande à utiliser est la suivante : </p> <pre class="programlisting"> $ /usr/lib/anaconda-runtime/genhdlist \ --fileorder <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/pkgorder.txt --withnumbers \ <i class="replaceable"><tt>/chemin-absolu-de-la-racine</tt></i>/i386-disc[1-3] </pre> <p> Comme vous pouvez le voir, comparé à la première utilisation de genhdlist, deux nouvelles options sont passées au programme. La première, <tt class="option">--fileorder</tt>, indique à genhdlist d'utiliser le fichier <tt class="filename">pkgorder.txt</tt> que nous avons généré à la seconde étape (<a href="ar01s05.html#reconstruire-l-installateur">reconstruire l'installateur</a>). Ce fichier contient la répartition des paquets sur les différents CD 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 par changer très souvent de CD lors de l'installation. L'option <tt class="option">--withnumbers</tt> est nécessaire pour associer un numéro de CD à chaque paquet (comme vous le voyez, un joker indiquant les trois premières images iso est utilisé). </p> </div> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="id2531808"></a>5.3.3.7. Générer les images iso</h5></div></div></div> <p> Dans cette étape, vous allez préparer les images iso à graver sur les CD réels. Il y a deux commandes distinctes à utiliser, l'une pour le premier disque et l'autre pour le reste des CD. Ceci est dû au besoin de rendre amorçable le premier CD. Ce n'est pas strictement nécessaire car vous pouvez utiliser à la place une disquette de démarrage mais il s'agit d'une fonctionnalité intéressante (et elle rend le comportement de vos disques plus similaire aux originaux). Voici les commandes que j'utilise pour réaliser cette tâche : </p> <pre class="programlisting"> $ mkdir <i class="replaceable"><tt>/repertoire-destination-images</tt></i> $ mkisofs -r -J -T -v -V "Red Hat 9 (Shrike) disque 1" \ -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot \ -boot-load-size 4 -boot-info-table \ -o <i class="replaceable"><tt>/repertoire-destination-images</tt></i>/i386-disc1.iso . </pre> <p> Cela est nécessaire pour graver le premier disque (amorçable) pour les distributions Redhat 8.0 et 9 (sans émulation de disquette) et c'est exécuté à partir du répertoire racine de la distribution. Le répertoire <tt class="filename"> <i class="replaceable"><tt>/repertoire-destination-images</tt></i> </tt> est le contenant pour les cinq images iso que vous avez générées et il doit exister avant de pouvoir lancer la procédure. La seule modification à effectuer pour la distribution Redhat 8 est le nom du volume, qui devrait être « <span class="quote">Red Hat 8.0 (Psyche) disque 1</span> ». </p> <pre class="programlisting"> $ mkdir <i class="replaceable"><tt>/repertoire-destination-images</tt></i> $ mkisofs -r -J -T -v -V "Red Hat 7.3 (Valhalla) disc 1" \ -c boot.cat -b dosutils/autoboot/boot.img \ -o <i class="replaceable"><tt>/repertoire-destination-images</tt></i>/i386-disc1.iso . </pre> <p> C'est nécessaire pour graver le premier disque (amorçable) sur la 7.3. Cette commande doit être exécutée à partir du répertoire racine de la distribution (cette fois-ci nous utilisons l'émulation de disquette). </p> <p> Le reste des images peut être écrit au moyen d'une boucle « <span class="quote">for</span> » : </p> <pre class="programlisting"> $ for i in `echo 2 3 4 5` ; do mkisofs -r -J -T -v \ -V "Red Hat 9 (Shrike) disc ${i}" \ -o <i class="replaceable"><tt>/repertoire-destination-images</tt></i>/i386-disc${i}.iso . ; done </pre> <p> 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 par rapport à la commande précédente et, comme vous pouvez le deviner, ces commandes ne sont utiles que pour créer un CD amorçable. Dans <a href="ar01s05.html#creer-l-image-iso">créer des images iso</a>, vous pourrez lire une brève explication sur des différentes options et de leurs significations (la plupart ont été extraites de la page de manuel). De nouveau, si vous construisez une distribution Redhat 8.0, vous devriez changer le nom du volume par « <span class="quote">Red Hat 8.0 (Psyche) disc1</span> ». </p> </div> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="id2531966"></a>5.3.3.8. Implanter et vérifier les signatures md5 dans les images iso </h5></div></div></div> <p> C'est une étape optionnelle mais elle permet l'utilisation de l'option « <span class="quote">checkmedia</span> » pour vérifier les signatures des CD avant de les installer et donc de garantir leur intégrité. </p> <p> Les commandes suivantes permettent d'injecter ou de vérifier une signature md5 sur une image iso : </p> <pre class="programlisting"> $ /usr/lib/anaconda-runtime/implantisomd5 <i class="replaceable"><tt>image-iso</tt></i> $ /usr/lib/anaconda-runtime/checkisomd5 <i class="replaceable"><tt>image-iso</tt></i> </pre> <p> Après avoir fini toutes ces étapes, nous aurons obtenu les cinq images CD à graver. Considérant que saisir tout ceci est un peu long, la prochaine section présentera un script qui réalise toutes ces opérations en une seule fois (n'oubliez pas de configurer correctement les paramètres). </p> </div> <div class="sect4" lang="fr"> <div class="titlepage"><div><div><h5 class="title"> <a name="script-updatebuild"></a>5.3.3.9. Réunir toutes ces étapes</h5></div></div></div> <p> Le script <a href="outils/RedHat-CD-HOWTO/rhcd-scripts/updateBuild.sh" target="_top">updateBuild.sh</a> exécutera toutes les étapes nécessaires à la reconstruction des CD des distributions Redhat 7.3, 8.0 et 9 en un seul lancement (sous le compte <tt class="literal">root</tt>). Avant d'utiliser ce script, vous devrez définir une variable <tt class="literal">RHCDPATH</tt> pointant vers le répertoire où se trouve le fichier <a href="outils/RedHat-CD-HOWTO/rhcd-scripts/rhcd.conf" target="_top">rhcd.conf</a> et paramétrer ce fichier. Si vous voulez inclure un fichier <tt class="filename">comps.xml</tt> modifié (ou <tt class="filename">comps</tt>) dans vos CD, comme expliqué dans <a href="ar01s07.html">le fichier comps</a>, vous devrez le copier à l'emplacement défini par la variable <tt class="literal">COMPSFILE</tt> avant d'exécuter le script. Si vous en avez besoin, n'oubliez pas d'ajouter le script modifié <tt class="filename">splitdistro</tt> dans le répertoire <tt class="filename">/usr/lib/anaconda-runtime</tt>. </p> <pre class="screen"> # export RHCDPATH=<i class="replaceable"><tt>/home/luigi/tmp/</tt></i>rhcd-scripts # sh updateBuild.sh </pre> </div> </div> </div> <div class="footnotes"> <br><hr width="100" align="left"> <div class="footnote"><p><sup>[<a name="ftn.id2530700" href="#id2530700">2</a>] </sup> Vous pourrez trouver ces listes dans la section des <a href="https://listman.redhat.com/mailman/listinfo" target="_top">listes de discussion</a> du site web de RedHat. </p></div> </div> </div> <div class="navfooter"> <hr> <table width="100%" summary="Navigation footer"> <tr> <td width="40%" align="left"> <a accesskey="p" href="ar01s04.html">Précédent</a> </td> <td width="20%" align="center"><a accesskey="u" href="index.html">Niveau supérieur</a></td> <td width="40%" align="right"> <a accesskey="n" href="ar01s06.html">Suivant</a> </td> </tr> <tr> <td width="40%" align="left" valign="top">4. Obtenir votre copie locale de la distribution </td> <td width="20%" align="center"><a accesskey="h" href="index.html">Sommaire</a></td> <td width="40%" align="right" valign="top"> 6. Graver le ou les CD</td> </tr> </table> </div> </body> </html>