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.
updatePerm
script op je lokale kopier van de distributie:
#!/bin/bash RHVERSION=5.1 LIST=/tmp/er3hd3w25 CDDIR=/jaz/redhat-${RHVERSION} # Find all directories, and make sure they have +x permission find $CDDIR -type d -exec chmod -c 755 {} \; # Find all files that are executables, shell or perl scripts find $CDDIR -type f | file -f - | grep -v RPM \ | egrep -i 'executable|perl|bourne|shell' | cut -f1 -d: > $LIST # Find shared libraries find $CDDIR -name \*.so >> $LIST # Make them executable while read file do if [ ! -x $file ] ; then chmod -c 755 $file fi done < $LIST /bin/rm $LIST exit 0
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 # Copy new boot image files to the right place... 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
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.
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.