Next Previous Contents

5. Toevoegen van updates

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:

  1. Pas de file permissies aan.
  2. Vervang de updated RPMs.
  3. Genereer een nieuwe hdlist file.

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.

5.1 Pas de file permissies aan

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 directories 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}

# 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

5.2 Vervang de updated RPMS

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


# 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

5.3 Genereer een nieuwe hdlist file

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.

Belangrijke opmerking voor Red Hat 5.2

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.


Next Previous Contents