mini-HOWTO Comment graver un CD-ROM RedHat <author> Morten Kjeldgaard, <tt/mok@imsb.au.dk/ et Peter von der Ahé, <tt/pahe+rhcd@daimi.au.dk/ Traduction française : Thierry Danis <tt/danis@mail.dotcom.fr/ </author> <date>v.00, 9 septembre 1998, traduction française du 12 décembre 1998 <abstract> Ce document explique comment fabriquer un CD-ROM de la distribution RedHat équivalent à ceux que vous pouvez vous procurer directement auprès de Red Hat. Vous y trouverez une description de la structure des fichiers de la distribution, ainsi que la façon de procéder pour inclure dans celle-ci des RPM à jour. Les prérequis sont une solide connexion à l'internet et un graveur de CD. </abstract> <toc> <!-- --> <sect>Introduction<p> Vous pouvez avoir plusieurs raisons de faire vos propres CD-ROM. Vos poches sont peut-être percées et vous ne voulez pas débourser les 50 dollars de <url url="http://www.redhat.com/" name="la distribution RedHat">. Vous pouvez aussi avoir besoin d'un CD-ROM avec les mises à jour les plus récentes pour la dernière distribution. C'est d'autant plus vrai qu'après chaque version importante de la RedHat, de nombreuses mises à jour sont sorties, la plupart d'entre elles étant liées à des problèmes de sécurité. Allez jeter un oeil au fichier <url url="ftp://ftp.redhat.com/pub/redhat/redhat-5.1/updates/00README.errata" name="updates/00README.errata">. Il existe un errata spécifique à chaque plate-forme supportée. Allez faire un tour par exemple sur <url url="ftp://ftp.redhat.com/pub/redhat/updates/5.1/i386/00README.errata" name="la page d'errata pour Intel">. <sect>Structure du site FTP de RedHat<p> Dans l'esprit de la communauté linuxienne, Red Hat Software a mis à disposition sur son site FTP ses distributions de Linux pour plusieurs plate-formes. Elles sont toutes accessibles depuis la racine de l'arborescence. <sect1>La racine<p> Le répertoire de plus haut niveau pour la RedHat 5.1 (<url url="ftp://ftp.redhat.com/pub/redhat/redhat-5.1/" name="pub/redhat/redhat-5.1">) contient les distributions pour les différentes plate-formes ainsi qu'un répertoire de mises à jour et de corrections pour des paquets sortis depuis cette version 5.1. <tscreen><verb> SRPMS/ alpha/ i386/ sparc/ updates/ </verb></tscreen> Nous allons baser notre discours sur la distribution i386. La démarche expliquée dans ce document devrait être la même pour toutes les architectures supportées par Red Hat (Alpha, SPARC, ppc, etc.) ; elle n'a cependant été testée que sur architecture i386 (les auteurs seraient intéressés par tout complément d'information). La racine de l'arborescence i386 ressemble à ce qui suit : <tscreen><verb> -rw-r--r-- 8 ftpuser ftpusers 19686 May 27 1997 COPYING -rw-r--r-- 1 ftpuser ftpusers 3023 May 7 09:58 README -rw-r--r-- 10 ftpuser ftpusers 2751 Sep 18 1997 RPM-PGP-KEY drwxr-xr-x 5 ftpuser ftpusers 96 Jul 15 08:34 RedHat/ drwxr-xr-x 5 ftpuser ftpusers 8192 Jul 15 08:35 doc/ drwxr-xr-x 5 ftpuser ftpusers 8192 Jul 15 08:35 dosutils/ drwxr-xr-x 5 ftpuser ftpusers 8192 Jul 15 08:33 gnome/ drwxr-xr-x 2 ftpuser ftpusers 96 Jun 7 02:47 images/ drwxr-xr-x 4 ftpuser ftpusers 96 Jun 5 12:24 misc/ </verb></tscreen> Le répertoire <tt/doc/ est une mine d'information. Point important, le manuel d'installation de la RedHat au format HTML se trouve dans le répertoire <url url="ftp://ftp.redhat.com/pub/redhat/redhat-5.1/i386/doc/rhmanual/manual/doc000.htm" name="doc/rhmanual/manual/">. On y trouvera aussi de nombreuses FAQ (Foire Aux Questions) ainsi que tous les HOWTO et mini-HOWTO. Le répertoire <tt/images/ contient les images binaires des disquettes de démarrage. Dans les dernières distributions (5.1 et au-delà), deux images sont disponibles. L'image de démarrage s'appelle <tt/boot.img/. Elle est nécessaire lorsque l'installation se fait directement depuis le CD-ROM. L'utilisateur pourra être amené à fournir une disquette sur laquelle l'image supplémentaire (<tt/supp.img/) aura été recopiée si l'installation est lancée depuis un disque dur local, via NFS ou par FTP. Reportez-vous à la section <ref id="sec-install" name="Installation depuis le CD-ROM"> pour plus de détails. Le répertoire <tt/misc/ contient les sources et les exécutables d'un certain nombre de programmes utilisés lors de l'installation. <sect1>Le répertoire "RedHat" -- corps principal de la distribution<p> La partie la plus importante de l'arborescence se trouve dans le répertoire <tt/RedHat/ : <tscreen><verb> drwxr-xr-x 2 ftpuser ftpusers 24576 Jul 15 08:35 RPMS/ drwxr-xr-x 2 ftpuser ftpusers 8192 Jul 15 08:32 base/ -rw-rw-rw- 59 ftpuser ftpusers 0 Aug 15 14:21 i386 drwxr-xr-x 4 ftpuser ftpusers 96 Jun 5 12:24 instimage/ </verb></tscreen> Les constituants principaux de la distribution sont situés dans le répertoire <tt/RPMS/. Ils sont formés d'un ensemble de fichiers au format RPM (Redhat Package Manager). Un paquet RPM est typiquement constitué d'exécutables binaires, accompagnés de leur documentation et de fichiers de configuration. Reportez-vous à la section <ref id=sec-rpm name="Les paquets RPM"> pour plus de renseignements. Le répertoire <tt/base/ regroupe plusieurs fichiers 'précompilés' utilisés lors de l'installation (par exemple, le fichier <tt/comps/ décrit les <em/composants/ (groupes de paquets) utilisés pendant la phase "Choix des paquets à installer" ("Choose packages to install"). Le fichier <tt/hdlist/ est un autre de ces fichiers : il contient la plupart des champs d'en-tête de chacun des paquets RPM du répertoire <tt/RPMS/). Cela signifie que le processus d'installation peut connaître les inter-dépendances entre paquets simplement en consultant le fichier <tt/hdlist/ plutôt que de parcourir tous les paquets présents ; c'est particulièrement pratique dans le cas d'une installation par FTP. Une autre utilité du fichier <tt/hdlist/ est de pouvoir associer aux noms des paquets des noms de fichiers (<tt/perl/ à <tt/perl-5.004-6.i386.rpm/ par exemple). Cela signifie que si vous désirez effectuer des mises à jour (voir section <ref id="sec-updates" name="Mettre à jour des paquets">) ou ajouter vos propres paquets au répertoire <tt/RPMS/, vous devrez reconstruire le fichier <tt/hdlist/. La façon de procéder est décrite plus loin dans le chapitre <ref id="sec-new-hdlist" name="Regénérer le fichier hdlist">. Le répertoire <tt/instimage/ contient une arborescence "live" nécessaire à la procédure d'installation (on y trouve un certain nombre de programmes et de librairies dynamiques). <sect>Les paquets RPM<label id=sec-rpm><p> La plus grande partie de la distribution est constituée de paquets RPM (Redhat Package Manager). Classiquement, un paquet RPM est formé d'exécutables binaires, de leur documentation associée et de fichiers de configuration. Le programme <tt><url url="http://www.rpm.org" name=rpm></tt> est un gestionnaire de paquets très puissant, qui peut être utilisé pour installer, consulter, vérifier, mettre à jour, effacer ou construire des paquets (logiciels) au format RPM. <tt/rpm/ maintient une base de données des paquets manipulés ; de cette manière, les informations relatives aux logiciels installés sont toujours disponibles. Les fichiers RPM présents dans une distribution ont été construits sur un système fonctionnant sous cette distribution. C'est un point important dans la mesure où la plupart des programmes compilés s'appuyent sur les librairies dynamiques (shared libraries). A partir de la version 5.0, Red Hat se base sur la nouvelle librairie C du GNU (version 2, gérant proprement les données en 64 bits). La version de cette librairie est communément appelée <tt/glibc/, ou, sous Linux, <tt/libc 6/. L'édition de liens de tous les exécutables de la distribution a été faite en utilisant cette librairie. Si vous essayez d'installer des programmes d'autres distributions, vous courez le risque que rien ne marche, à moins d'avoir pris la précaution d'installer le paquet libc5 pour compatibilité ascendante. Les noms des paquets RPM contiennent le suffixe .<em>arch</em>.<tt/rpm/ ; <em/arch/ est l'architecture (<tt/i386/ pour les binaires Intel). Les paquets que vous installez doivent correspondre aux versions des librairies dynamiques présentes sur votre machine. Le programme <tt><url url="http://www.rpm.org" name=rpm></tt> s'assure en général que c'est le cas. Il y a cependant moyen d'outre-passer ses vérifications, mais vous devez avoir bien conscience de ce que vous risquez si vous décidez d'agir ainsi. Néanmoins, si vous utilisez le disque d'installation RedHat, les paquets corrects seront installés sur votre machine. Si vous vous apercevez qu'un paquet n'est pas présent au terme de l'installation, ne désespérez pas. Vous pouvez à tout moment installer (en tant que root) des paquets RPM : <tscreen><verb> rpm --install WindowMaker-0.18-1b.i386.rpm </verb></tscreen> Vous pouvez aussi faire l'installation directement depuis l'internet, si vous connaissez l'URL du paquet : <tscreen><verb> rpm --install ftp://rufus.w3.org/redhat-contrib/noarch/mirror-2.9-2.noarch.rpm </verb></tscreen> Une variante des paquets RPM contient les sources d'origine qui ont servi à fabriquer un paquet binaire. Ces paquets possèdent le suffixe <tt>.src.rpm</tt> et sont situés dans le répertoire <tt/SRPMS/. Il n'est pas nécessaire qu'ils se trouvent sur le CD-ROM d'installation. De toute façon, il n'y a pas suffisamment de place pour les y faire tenir. Bien entendu, vous pourrez graver un second CD-ROM avec les SRPMS. <sect>Comment faire une copie locale d'une distribution ?<p> Vous devez recopier la distribution sur un disque inscriptible accessible par la machine possédant le graveur de CD (étonnant non ?). Si vous voulez y mettre les dernières mises à jour, l'arborescence devra aussi être accessible en écriture depuis votre machine Linux (disque local, partition NFS, disque JAZ...). Vous pouvez ou bien recopier le contenu d'un CD-ROM RedHat, ou bien récupérer la distribution par FTP. Si vous choisissez cette seconde solution, le meilleur moyen pour avoir une copie correcte est d'utiliser le paquet <tt/mirror/. <tt/mirror/ est un script évolué en perl qui compare le contenu d'une arborescence avec celui d'une référence sur une autre machine. Il utilise FTP pour récupérer les fichiers qui sont sur le site distant et qui sont absents du site local, il supprime les fichiers locaux qui n'apparaissent pas dans l'arborescence distante. Le programme <tt/mirror/ est configurable. Le paquet peut être récupéré au format RPM à l'adresse <url url="http://rufus.w3.org/linux/RPM/mirror.html" name="rufus.w3.org">. <!-- ou en tant que tarball à xxxxxxxxxxxxxx.--> Faites votre copie locale du fichier de configuration de <tt/mirror/ (<tt/mirror.redhat/) et modifiez les champs vous concernant au début du fichier. Après la section par défaut, définissez les paquets suivants : <tscreen><verb> package=updates site=ftp.sunsite.auc.dk exclude_patt=(alpha/|sparc/) remote_dir=/disk1/ftp.redhat.com/pub/redhat/redhat-5.1/updates local_dir=/jaz/redhat-5.1/updates package=dist site=ftp.sunsite.auc.dk exclude_patt=(alpha/|sparc/) remote_dir=/disk1/ftp.redhat.com/pub/redhat/redhat-5.1/i386 local_dir=/jaz/redhat-5.1/i386 </verb></tscreen> La commande qui suit va recopier toute l'arborescence RedHat sur votre disque local. <em/*Réfléchissez*/ avant de la lancer, car vous êtes sur le point de récupérer près de 350 Mo de données. <tscreen><verb> mirror -pdist mirror.redhat </verb></tscreen> Cela va dupliquer le site FTP de Red Hat sur votre disque local. Le contenu de la distribution ne change pas entre deux versions ; vous n'aurez donc à télécharger l'arborescence qu'<em/UNE SEULE/ fois. Toutes les modifications par rapport à la distribution se trouvent dans le répertoire <tt/updates/. En conséquence, si vous désirez maintenir un site miroir à jour de la distribution RedHat, la seule chose que vous aurez à considérer est le répertoire <tt/updates/. Cela pourra être fait par la commande : <tscreen><verb> mirror -pupdates mirror.redhat </verb></tscreen> Vous pouvez le faire régulièrement - disons une fois par semaine - par un script cron. La distribution RedHat est disponible un peu partout sur le globe à travers un grand nombre de serveurs FTP mis à jour quotidiennement depuis le site primaire (<url url="ftp://ftp.redhat.com/pub">). Essayez de choisir un site proche de vous (consultez l'URL <url name="RedHat FAQ" url="http://www.redhat.com/support/docs/rhl/RedHat-FAQ/RedHat-FAQ-12.html#ss12.1">). <sect>Mettre à jour des paquets<label id=sec-updates><p> Afin de pouvoir faire des mises à jour, vous devez avoir accès en écriture au répertoire contenant la distribution. Vous devez aussi avoir installé une version du programme <url url="http://www.rpm.org" name=rpm>. Vous procéderez ensuite en trois étapes : <enum> <item>Vérifiez les modes d'accès aux fichiers. <item>Remplacez les RPM mis à jour. <item>Regénérez le fichier hdlist. </enum> Si vous maintenez un miroir du répertoire <tt/updates/, vous pourrez produire à tout moment un CD-ROM incluant les dernières mises à jour en répétant ces trois étapes. <sect1>Vérifier les modes d'accès aux fichiers<p> Durant l'installation, certains programmes sont directement exécutés depuis le CD-ROM. Malheureusement, le programme FTP ne préserve pas toujours les modes d'accès des fichiers et des arborescences copiés. En conséquence, il est nécessaire de s'assurer que les programmes, les scripts shell et les librairies dynamiques ont les droits d'exécution idoines, avant que l'arborescence soit claquée sur le CD. Lancez simplement le script <tt/updatePerm/ sur la copie locale de la distribution : <code> #!/bin/bash LIST=/tmp/er3hd3w25 CDDIR=/jaz/redhat-${RHVERSION} # Recherche tous les répertoires et s'assure qu'ils ont le bit +x find $CDDIR -type d -exec chmod -c 755 {} \; # Recherche les exécutables et les scripts shell ou perl find $CDDIR -type f | file -f - | grep -v RPM \ | egrep -i 'executable|perl|bourne|shell' | cut -f1 -d: > $LIST # Recherche les bibliothèques dynamiques find $CDDIR -name \*.so >> $LIST # Rend tout ce petit monde exécutable while read file do if [ ! -x $file ] ; then chmod -c 755 $file fi done < $LIST /bin/rm $LIST exit 0 </code> <sect1>Remplacer les RPM mis à jour<p> Le script suivant, appelé <tt/updateCD/, copie tous les fichiers depuis le répertoire de mise à jour vers l'arborescence des RPM. Le script utilise quelques commandes magiques de <tt/rpm/ pour déterminer quels paquets de la mise à jour sont plus récents que ceux de la distribution. Les anciens paquets correspondants sont déplacés vers le répertoire <tt/${OLD}/. <code> #! /bin/bash # Ce script met à jour les RPM d'une distribution placée dans $RPMDIR. # Les anciens RPM sont déplacés vers $OLDDIR. # Les nouveaux RPM doivent se trouver dans $UPDDIR. # L'architecture est $ARCH. RHVERSION=5.1 ARCH=i386 CDDIR=/jaz/redhat-${RHVERSION} RPMDIR=${CDDIR}/${ARCH}/RedHat/RPMS UPDDIR=${CDDIR}/updates/${ARCH} OLDDIR=${CDDIR}/old if [ ! -d $OLDDIR ] ; then echo making directory $OLDDIR mkdir $OLDDIR fi allow_null_glob_expansion=1 for rpm in ${UPDDIR}/*.rpm ; do NAME=`rpm --queryformat "%{NAME}" -qp $rpm` unset OLDNAME for oldrpm in ${RPMDIR}/${NAME}*.rpm ; do if [ `rpm --queryformat "%{NAME}" -qp $oldrpm` = "$NAME" ]; then OLDNAME=$oldrpm; break fi done if [ -z "$OLDNAME" ]; then echo $NAME is new cp -pv $rpm $RPMDIR else if [ `basename $rpm` != `basename $OLDNAME` ]; then mv $OLDNAME $OLDDIR cp -pv $rpm $RPMDIR fi fi done # Copie les images de démarrage au bon endroit... for newfile in ${UPDDIR}/images/* ; do file=${CDDIR}$/${ARCH}/images/$(basename ${newfile}) if [ $newfile -nt $file ] ; then cp -pv $newfile $file fi done exit 0 </code> <sect1>Regénérer le fichier hdlist<label id=sec-new-hdlist><p> Lors d'une installation par CD-ROM, le programme d'installation qui se trouve sur le CD-ROM (<tt><file>misc/src/install/genhdlist</file></tt>) s'appuie sur le fichier <tt><file>RedHat/base/hdlist</file></tt> décrivant les paquets disponibles sur le CD-ROM. Ce programme doit être lancé avec pour unique argument le nom de la racine de la distribution. Voici le script <tt/updateHdlist/ : <code> #!/bin/bash echo Génération du fichier hdlist... RHVERSION=5.1 # Ajout du traducteur par rapport à la version anglaise CDDIR=/jaz/redhat-${RHVERSION} ARCH=i386 GENHDDIR=${CDDIR}/${ARCH}/misc/src/install chmod u+x ${GENHDDIR}/genhdlist chmod 644 ${CDDIR}/${ARCH}/RedHat/base/hdlist ${GENHDDIR}/genhdlist ${CDDIR}/${ARCH} exit 0 </code> Remarque : après avoir incorporé les mises à jour dans le répertoire principal <tt>RedHat/RPMS</tt>, votre copie de la distribution n'est plus un miroir du site Red Hat. En fait, elle est plus à jour ! Par contre, si vous en refaites un miroir, les anciens paquets RPM qui ont été mis à jour vont être de nouveau téléchargés et les mises à jour seront supprimées. <sect>Enfin : gravage du CD<p> Puisque nous supposons que vous avez un graveur de CD en état de marche sur votre système et que vous savez vous en servir, nous n'allons pas entrer dans les détails sur la façon de graver le CD. Si vous voulez claquer le CD depuis Linux, nous ne saurions trop recommander l'excellent programme <url url="http://www.fh-muenchen.de/rz/xcdroast" name="xcdroast">. Sous xcdroast, validez les extensions Rock Ridge ainsi que la création du fichier TRANS.TBL. Assurez-vous alors simplement que <em>la racine</em> de votre CD contient au moins les fichiers et répertoires suivants : <tscreen><verb> COPYING RPM-PGP-KEY README RedHat/ </verb></tscreen> Les arborescences suivantes peuvent également se révéler pratiques : <tscreen><verb> doc/ gnome/ misc/ dosutils/ images/ </verb></tscreen> <sect>Installation depuis le CD-ROM<label id="sec-install"><p> Lorsque vous faites l'installation depuis le CD-ROM, vous devez tout d'abord créer une disquette bootable. IMPORTANT : employez une disquette neuve, fraîchement formatée DOS ! L'utilisation d'une vieille disquette, fatiguée et au bout du rouleau, peut conduire à d'étranges problèmes durant l'installation. Sous Linux, vous pouvez créer une disquette à l'aide de la commande <tt/dd/ : <tscreen><verb> dd if=/mnt/cdrom/images/boot.img of=/dev/fd0 bs=1440k </verb></tscreen> Sous DOS ou Windows-9x, utilisez le programme <tt/RAWRITE.EXE/ qui se trouve sur le CD-ROM dans le répertoire <tt/dosutils/. Arrêtez la machine sur laquelle vous voulez faire l'installation ou la mise à jour, insérez la disquette de démarrage et votre CD-ROM encore tout chaud, et laissez le système démarrer sur la disquette. Pour plus d'information sur la procédure d'installation, référez-vous aux documents et aux HOWTO Installation-HOWTO et Bootdisk-HOWTO qui se trouvent sur le CD-ROM dans le répertoire <tt>doc/HOWTO</tt>. <sect>AVERTISSEMENT<label id="sec-disclaimer"><p> <bf> Le contenu de ce document est supposé correct. Cependant, ses auteurs et le traducteur se dégagent de toute responsabilité quant à une dégradation quelconque matérielle et/ou logicielle ou à une perte de données suite à l'application des procédures décrites dans le document. </bf> </article> <!-- Local Variables: --> <!-- mode: sgml --> <!-- mode: font-lock --> <!-- fill-column: 75 --> <!-- End: -->