Om updates toe te voegen, heb je write-access nodig op dedistributie-directory, met een werkende versie van rpm. Er zijn 3 stappen die je moet volgen:
Als je een mirror onderhoudt van de updates directory, dan kan je op ieder
moment een CD produceren met de nieuwe updates door deze drie stappen te herhalen.
Tijdens het installatie process worden sommige programma's rechtstreeks van CD gestart.
Spijtig genoeg behoudt een FTP programma niet altijd de file permissies van de files en
directory's die hij afhaalt. Daarom is het belangrijk dat je ervoor zorgt dat de
execute-permissie wordt gegeven aan programma's, shellscripts en shared libraries,
voordat het geheel op CD wordt gezet. Dit wordt gedaan door het runnen van het
updatePerm script op je lokale kopier van de distributie:
#!/bin/bash
RHVERSION=5.1
LIST=/tmp/er3hd3w25
CDDIR=/jaz/redhat-${RHVERSION}
# Zoek naar alle directory's en zorg dat ze allen de +x permissie hebben
find $CDDIR -type d -exec chmod -c 755 {} \;
# Zoek naar alle bestanden die uitvoerbaar, shell- of perlscripts zijn
find $CDDIR -type f | file -f - | grep -v RPM \
| egrep -i 'executable|perl|bourne|shell' | cut -f1 -d: > $LIST
# Zoek naar gedeelde library's
find $CDDIR -name \*.so >> $LIST
# Maak ze uitvoerbaar
while read file
do
if [ ! -x $file ] ; then
chmod -c 755 $file
fi
done < $LIST
/bin/rm $LIST
exit 0
Het volgende scriptje met de naam updateDC kopieert alle files van de update
directory naar de RPMS-directory. Het script gebruikt rpm om te achterhalen welk
package nieuwer is in de update directory. Oudere packages worden verplaatst naar
${OLD} directory.
#! /bin/bash
# This script updates rpms in a RedHat distribution found in $RPMDIR.
# The old rpms will be placed in $OLDDIR.
# The new rpms should be located in $UPDDIR.
# The architechture is $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
# Kopieer de nieuwe boot image bestanden naar de juiste plek...
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
Als je installeert van CD dan heeft het installatie programma op CD de file
RedHat/base/hdlist nodig. Deze file beschrijft welke RPM
packages beschikbaar zijn op de CD. De hdlist file kan gegenereerd
worden door het programma misc/src/install/genhdlist.
Het programma moet worden gestart met de 'root name' van de distributie als
het enige argument. Hier is de updateHdlist script die dat programma
aanroept:
#!/bin/bash
RHVERSION=5.1
ARCH=i386
echo generating hdlist...
CDDIR=/jaz/redhat-${RHVERSION}
GENHDDIR=${CDDIR}/${ARCH}/misc/src/install
chmod u+x ${GENHDDIR}/genhdlist
chmod 644 ${CDDIR}/${ARCH}/RedHat/base/hdlist
${GENHDDIR}/genhdlist ${CDDIR}/${ARCH} || echo "*** GENHDLIST FAILED ***"
exit 0
OPMERKING: Nadat je de updates hebt toegevoegd in de RedHat/RPMS directory,
is je kopie van de distributie niet langer een mirror van de Red Hat distributie
site. Eigenlijk is het meer up-to-date! Daarom zal je, als je opnieuw de distributie
gaat mirroren, weer de oude versie van de updates afhalen, en zullen de updates
verwijderd worden.
Zoals bij Red Hat 5.2 en vroeger meegeleverd was, CRASHTE genhdlist als er
files in de RedHat/RPMS directory stonden die niet RPM files waren!
Dit zorgt voor problemen, want in de 5.2 distributie zijn er een paar non-RPM files
die ls-lR en ls-lR.gz heten. Daarom veeg je best all non-RPM files weg uit
die directory.