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.