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:
Corriger les modes de protection de fichier
Remplacer les RPMs mis à jour
Reconstruire l'installateur
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 est la mise à jour des permissions 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 howto, 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 |
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 |
![]() | 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...). |
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.
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 howto):
#!/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 |
![]() | Importante note pour la RedHat < 6.1 | ||
---|---|---|---|
L'installation de la RedHat 6.1 est complètement différente de celle des versions précédentes, et RedHat a introduit anaconda. Le programme genhdlist est maintenant localisé à un autre endroit, donc dans le script ci-dessus, nous utilisons
|
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 pipe 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.
![]() | Importante note 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. |
Vous aurez besoin de créer un fichier image qui sera écrit sur le CD. Ce fichier fera 500Mo 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 /images-destination-dir $ mkisofs -r -J -T -v -V "Red Hat 6.1 (Hedwig)" \ -c boot.cat -b images/boot.img \ -o /images-destination-dir/i386-disc.iso . |
Tableau 1. Options et paramètres de mkisofs
-r | Extensions Rock Ridge avec les valeurs utiles pour les permissions | |
-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 | Soit 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é | |
. | 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 fait, donc ne vous attendez pas à ce que je vous donne une explication).
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.5 (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.
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 ou 8.0 avec le paquet anaconda-runtime installé (il aura probablement la version 7.3.7 ou 8.0.4), en fonction de la release que vous voulez reconstruire. La procédure est composée de sept étapes, qui sont placées ensemble dans un script shell dans la dernière section:
Regénérer les fichiers hdlist et hdlist2
Mettre à jour le fichier comps.xml
Reconstruire l'installateur
Diviser la distribution en plusieurs parties de la taille d'un CD
Regénérer (encore) les fichiers hdlist et hdlist2
Générer les images iso
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.
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 8.0:
$ chmod -R u+w /absolute-path-to-toplevel-dir $ mkdir -p /absolute-path-to-toplevel-dir/i386 $ cd /absolute-path-to-toplevel-dir $ /bin/mv * i386 |
Pour redhat 7.3:
$ chmod -R u+w /absolute-path-to-toplevel-dir $ mkdir -p /absolute-path-to-toplevel-dir/i386 $ cd /absolute-path-to-toplevel-dir $ for i in `ls` ; do [ $i != "SRPMS" -a $i != i386 ] && /bin/mv $i i386 ; done |
Ceci est fait au moyen des deux commandes suivantes avec l'aide du programme genhdlist.
$ /usr/lib/anaconda-runtime/genhdlist /absolute-path-to-toplevel-dir/i386 $ chmod 644 /absolute-path-to-toplevel-dir/i386/RedHat/base/hdlist{,2} |
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 installé le paquet comps-8.0.tar.gz qui contient le fichier maître comps trouvé sur le site web de RedHat et le paquet rpm comps-extras. Suivez alors ces étapes (seulement pour Redhat 8.0):
$ cd /some-dir-of-your-choice $ tar xzvf /path-to-comps-8.0.tar.gz/comps-8.0.tar.gz $ cd comps $ make $ cat comps-milan.xml |sed 's!</comps>!!g' >comps-tmp.xml $ /usr/share/comps-extras/getfullcomps.py comps.xml \ /absolute-path-to-toplevel-dir i386 >> comps-tmp.xml $ echo '</comps>' >> comps-tmp.xml $ cp comps-tmp.xml /absolute-path-to-toplevel-dir/i386/RedHat/base/comps.xml |
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 modifient le fichier pour coller à vos besoins et copier le fichier RedHat/base/comps dans l'arbre principal écrasant l'original.
Ceci reconstruira l'installateur anaconda dans votre copie locale de la distribution en utilisant les paquets mis à jour.
$ /usr/lib/anaconda-runtime/buildinstall \ --pkgorder /absolute-path-to-toplevel-dir/pkgorder.txt \ --comp dist-8.0 --version 8.0 --release "Redhat 8.0 (Psyche)" \ /absolute-path-to-toplevel-dir/i386 |
Pour la Redhat 7.3, la procédure est pratiquement la même:
$ /usr/lib/anaconda-runtime/buildinstall \ --pkgorder /absolute-path-to-toplevel-dir/pkgorder.txt \ --comp dist-7.3 --version 7.3 /absolute-path-to-toplevel-dir/i386 |
L'absence de l'option (obligatoire pour la 8.0) --release est la seule différence notable.
Ceci créera cinq répertoires, chacun correspondant à un CD différent et placera dedans des liens physiques vers les fichiers réels contenus dans votre copie locale de la distribution.
![]() | 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 RedHat 8.0, 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 si 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 /absolute-path-to-toplevel-dir/pkgorder.txt --release \ "Redhat 8.0 (Psyche)" /absolute-path-to-toplevel-dir i386 |
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 copié 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 copié le 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 tous les cinq CDs, sinon le script échouera).
La seul 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).
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 et 8.0 pour l'exécution du programme. La commande à envoyer est la suivante:
$ /usr/lib/anaconda-runtime/genhdlist \ --fileorder /absolute-path-to-toplevel-dir/pkgorder.txt --withnumbers \ /absolute-path-to-toplevel-dir/i386-disc[1-3] |
Ici, vous préparez les cinq 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. Ceci 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 /images-destination-dir $ mkisofs -r -J -T -v -V "Red Hat 8.0 (Psyche) disc 1" \ -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot \ -boot-load-size 4 -boot-info-table -o /images-destination-dir/i386-disc1.iso . |
$ mkdir /images-destination-dir $ mkisofs -r -J -T -v -V "Red Hat 7.3 (Valhalla) disc 1" \ -c boot.cat -b dosutils/autoboot/boot.img \ -o /images-destination-dir/i386-disc1.iso . |
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 8.0 (Psyche) disc ${i}" \ -o /images-destination-dir/i386-disc${i}.iso . ; done |
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 correction.
Les commandes suivantes permettent d'injecter ou de vérifier une signature md5 sur une image iso:
$ /usr/lib/anaconda/implantisomd5 iso-image $ /usr/lib/anaconda/checkisomd5 iso-image |
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).
Le script updateBuild.sh exécutera toutes les étapes nécessaires pour reconstruire les CDs de distribution pour la RedHat 7.3 ou 8.0 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 |