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 rpm.
Vous procéderez ensuite en trois étapes :
Si vous maintenez un miroir du répertoire updates, vous pourrez
produire à tout moment un CD-ROM incluant les dernières mises à jour en
répétant ces trois étapes.
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
updatePerm sur la copie locale de la distribution :
#!/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
Le script suivant, appelé updateCD, copie tous les fichiers
depuis le répertoire de mise à jour vers l'arborescence des RPM.
Le script utilise quelques commandes magiques de 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 ${OLD}.
#! /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
Lors d'une installation par CD-ROM, le programme d'installation qui se
trouve sur le CD-ROM (misc/src/install/genhdlist)
s'appuie sur le fichier RedHat/base/hdlist
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 updateHdlist :
#!/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
Remarque : 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 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.