4. Obtenir votre copie locale de la distribution

Vous avez besoin d'une copie de la distribution sur un disque où vous pouvez écrire, et accessible à partir de l'ordinateur possédant le graveur. Si vous incorporez les dernières mises à jour, le répertoire doit (aussi) être accessible à partir d'une machine Linux, soit à partir d'un disque local, soit à partir d'un disque monté NFS d'une autre machine, soit à partir d'un disque JAZ. Vous pouvez copier la distribution à partir des CDs de RedHat (recommandé), ou vous pouvez l'obtenir via FTP. Si vous choisissez d'utiliser FTP, il existe deux moyens de le faire. Vous pouvez utiliser un script shell basé sur wget, script présenté dans la section suivante, ou utiliser le paquet mirror comme suggéré par les versions précédentes et jusqu'à la 1.34 incluse de ce howto (rapporté dans la section utiliser mirror).

4.1. Utiliser wget et bash

Ce n'est pas la plus simple des méthodes, même si elle est la plus précise. Je l'apprécie parce qu'elle permet de comparer les versions RPM des fichiers et non plus leur date/heure ou nom (comme les paquets standards de miroirs) et qu'elle vérifie les signatures des mises à jour à chaque fois qu'elle en télécharge quelques unes, si ceci est bien configuré avec la variable CHECKSIG dans le fichier rhcd.conf.

Créez un répertoire qui contiendra les fichiers d'installation et entrez à l'intérieur (cd); lancez ensuite la commande (qui téléchargera environ 3Go de données sur votre disque dur pour la RedHat 7.3 et 8.0):

 $ wget -r -c -t0 -l0 --retr-symlinks -nH --cut-dirs=9 \
 ftp://ftp.mirror.ac.uk/sites/ftp.redhat.com/pub/redhat/linux/updates/7.3/en/os/i386

Vous voudrez probablement changer le miroir FTP de téléchargement et, en conséquence, le paramètre passé à l'option --cut-dirs. C'est en fait utilisé conjointement avec -nH pour éviter la re-création de la hiérarchie des répertoires du site FTP. Pour plus d'informations sur l'utilisation correcte de cette option, jetez un œil sur la documentation wget et les pages man.

Si vous voulez exclure un ou plusieurs répertoires des téléchargements, vous pouvez utiliser l'option -X liste, où liste représente une liste de répertoires séparés par des virgules. Par exemple, pour exclure le répertoire SRPMS des précédents téléchargements, vous pouvez utiliser:
 $ wget -r -c -t0 -l0 --retr-symlinks -nH --cut-dirs=9 \
 -X /sites/ftp.redhat.com/pub/redhat/linux/updates/7.3/en/os/i386/SRPMS \
 ftp://ftp.mirror.ac.uk/sites/ftp.redhat.com/pub/redhat/linux/updates/7.3/en/os/i386

Cela peut être utile si vous considérez la taille du répertoire SRPMS (environ 1.2Go); en tout cas, je le trouve utile.

Si vous voulez vérifier les signatures GPG pour vous assurer de l'authenticité des paquets (ce que je recommende), vous devez installer le paquet gnupg et importer la clé publique security@redhat.com que vous trouverez dans le répertoire racine des CDs (RPM-GPG-KEY) ou sur le site web RedHat. La clé est importée en lançant la commande: gpg --import <filename> pour les releases jusqu'à la 7.3 (en l'incluant), ce qui a été remplacé par rpm --import <filename> pour la release 8.0 (pour plus d'informations sur ceci, jetez un œil sur les sites web de GNU Privacy Guard et de RPM (Redhat Package Manager)).

Si vous voulez vérifier les paquets RPM, vous pouvez le faire en utilisant la commande suivante (je suppose que vous la lancez à partir du répertoire où vous avez réalisé les téléchargements):

Pour les releases jusqu'à la 7.3 (comprise):
 $ find . -name "*.rpm" -exec rpm -K --nopgp {} \; |grep "NOT *OK"

Pour la release 8.0 (ainsi que pour les futures releases, je suppose):
 $ find . -name "*.rpm" -exec rpm -K {} \; |grep "NOT *OK"

Si vous ne voulez pas vous << ennuyer >> avec toutes ces étapes, j'espère que vous voudrez au moins vérifier l'intégrité des fichiers téléchargés (ce qui ne veut pas dire que personne ne les a modifiés), à l'aide des signatures md5. Ceci est fait avec:

Pour les releases jusqu'à la 7.3 (comprise):
 $ find . -name "*.rpm" -exec rpm -K --nopgp --nogpg {} \; |grep "NOT *OK"

Pour la release 8.0 (ainsi que pour les futures releases, je suppose):
 $ find . -name "*.rpm" -exec rpm -K --nosignature {} \; |grep "NOT *OK"

Le contenu d'une distribution RedHat ne change pas entre les releases, donc vous avez seulement besoin de télécharger ces paquets UNE FOIS. Tous les changements de la distribution sont dans le répertoire updates. Donc, si vous voulez conserver un miroir à jour de la distribution RedHat, vous avez seulement besoin de conserver le répertoire updates. Ceci se fait en utilisant le script updateDist.sh. Avant d'utiliser le 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 updateDist.sh

Ce script va télécharger les nouvelles mises à jour en excluant les sous- répertoires contenus dans la variable EXCLUDELIST, en déplaçant les anciens (c'est-à-dire ceux remplacés par les nouvelles versions) dans le répertoire représenté par la variable OLDDIR et vérifier leur signature qui dépend de la valeur des deux variables CHECKSIG et USEGPG. En cas d'erreurs lors du processus de vérification des signatures, le script va déplacer les paquets en question dans OLDDIR en leur ajoutant l'extension << .UPDcheckfail >> et va sortir sans déplacer les anciennes mises à jour dans OLDDIR.

4.2. Utiliser mirror

Mirror est un script perl sophistiqué comparant le contenu d'un répertoire d'un site distant avec un répertoire local. Il utilisera FTP pour récupérer les fichiers qui sont sur le site distant mais pas sur le site local, et supprimera sur le site local les fichiers qui ne sont pas sur le site distant. Le programme mirror est configuré avec un fichier. Le RPM du paquet est disponible à partir de rufus.w3.org. Créez votre copie locale mirror.redhat du fichier de configuration de mirror, et éditez les champs correspondant au haut du fichier. Après la section par défaut, définissez ces paquets:

 package=updates
 site=ftp.mirror.ac.uk
 exclude_patt=(SRPMS/)
 remote_dir=/sites/ftp.redhat.com/pub/redhat/linux/updates/7.3/en/os/i386
 local_dir=/home/luigi/tmp/redhat-cd/redhat-7.3-updates
 package=dist
 site=ftp.mirror.ac.uk
 exclude_patt=(SRPMS/)
 remote_dir=/sites/ftp.redhat.com/pub/redhat/linux/7.3/en/os/i386
 local_dir=/home/luigi/tmp/redhat-cd/redhat-7.3

La commande suivante va copier l'arbre RedHat en entier sur votre disque local. **Pensez**, avant de faire cela, que vous allez télécharger à peu près 1,5Go de données (si vous avez exclu le répertoire SRPMS)!

 $ mirror -pdist mirror.redhat

Ceci va créer le miroir du site FTP de RedHat sur votre disque local. Le contenu de la distribution RedHat ne change pas entre les releases, donc vous avez seulement besoin de télécharger ces paquets UNE FOIS. Tout changement dans la distribution se trouve dans le répertoire updates. Donc, si vous voulez que votre miroir reste à jour, vous avez seulement besoin d'actualiser le répertoire updates. Cela se fait avec la commande suivante:

 $ mirror -pupdates mirror.redhat

Vous pouvez la lancer régulièrement, disons une fois par semaine, avec un script cron. La distribution RedHat est disponible sur un grand nombre de serveurs FTP tout autour du monde, mis à jour quotidiennement à partir du site maître ftp.redhat.com. Vous devriez choisir un site FTP proche de vous, en consultant la liste des sites miroirs RedHat.

Note

Je n'ai pas personnellement testé cette procédure. C'était la seule procédure proposée sur les anciennes versions de ce howto (jusqu'à la version 1.34, concernant RedHat <6.1). Néanmoins, je pense qu'elle a été bien plus testée que mes scripts, donc vous pouvez certainement l'utiliser.