#!/bin/sh # # update-cd v 0.2 # # (c) Steve McIntyre Released under # GNU GPL v2 1st January 2001 # # Quick and dirty script to create update CDs for people to upgrade # from potato (2.2r0) to the latest release level # # Configuration goes here. # Where is your mirror? MIRROR=${MIRROR:-/scratch/debian} # If you have a non-US mirror, where is it? Leave blank if you don't have one. NONUS=${NONUS:-$MIRROR/non-US} # Do you want non-free? 1 for yes, 0 for no NONFREE=1 # What release version is this? VER=2.2r3 # Path to use with mkisofs/mkhybrid MKISOFS=${MKISOFS:-"mkhybrid"} # The working directory to use. MUST be on the same partition as the mirror. TDIR=/scratch/debian-cd # Building potato cd set ... CODENAME=potato # Path where the images will be written OUT=/scratch/debian-cd # Location of the diff file to use to determine the changes. If you leave # this blank, we'll try to determine the changes from the ChangeLog files, # which is probably less accurate. DIFF=/wibble #~/r2.diff REL=Debian"$VER" CLOG=dists/potato/ChangeLog NUCLOG=dists/potato/non-US/ChangeLog UPD=$TDIR/potato-update DATE=`date +%Y%m%d` BASEDIR=`pwd` INFO1="Debian GNU/Linux $VER Update CD $DATE for Alpha, Arm and i386" INFO2="Debian GNU/Linux $VER Update CD $DATE for M68k, PowerPC and Sparc" ARCH1="alpha arm i386" ARCH2="m68k powerpc sparc" export TDIR NONFREE NONUS VER MIRROR CODENAME OUT BASEDIR scanpackages=$BASEDIR/tools/scanpackages scansources=$BASEDIR/tools/scansources set_mkisofs_opts=$BASEDIR/tools/set_mkisofs_opts adddirs=$BASEDIR/tools/add_dirs addfiles=$BASEDIR/tools/add_files echo Cleaning up rm -rf $UPD mkdir $UPD $UPD/CD1 $UPD/CD2 echo Creating directory trees for ARCH in $ARCH1 do export ARCH $adddirs $UPD/CD1 done for ARCH in $ARCH2 do export ARCH $adddirs $UPD/CD2 done cd $MIRROR echo Creating main-section list if [ -e $DIFF ] ; then grep -v non-US $DIFF >$UPD/list else egrep -e ^dists.*\\.deb$ -e ^dists.*\\.gz$ -e ^dists.*\\.dsc$ $CLOG >$UPD/list fi if [ "$NONFREE"x != "1"x ] ; then echo Removing non-free grep -v non-free $UPD/list > $UPD/list1 mv -f $UPD/list1 $UPD/list fi echo Creating trees cat $UPD/list | xargs $addfiles $UPD/CD1 $MIRROR cat $UPD/list | xargs $addfiles $UPD/CD2 $MIRROR if [ "$NONUS"x != ""x ] ; then echo Creating non-US list cd $NONUS if [ -e $DIFF ] ; then grep non-US $DIFF >$UPD/nu-list else egrep -e ^dists.*\\.deb$ -e ^dists.*\\.gz$ -e ^dists.*\\.dsc$ $NUCLOG | sed 's?^stable?dists/potato?g' > $UPD/nu-list fi if [ "$NONFREE"x != "1"x ] ; then echo Removing non-free grep -v non-free $UPD/nu-list > $UPD/nu-list1 mv -f $UPD/nu-list1 $UPD/nu-list fi echo Creating non-US trees cat $UPD/nu-list | xargs $addfiles $UPD/CD1 $MIRROR cat $UPD/nu-list | xargs $addfiles $UPD/CD2 $MIRROR fi # The full update will not fit on a single CD, so split it by architecture, arbitrarily # CD 1 gets alpha/arm/i386 # CD 2 gets m68k/sparc/powerpc # binary-all goes on both, as does source cd $UPD echo Splitting binary dirs between trees for ARCH in $ARCH2 do find CD1 -type d | egrep -e binary-$ARCH$ | xargs rm -r done for ARCH in $ARCH1 do find CD2 -type d | egrep -e binary-$ARCH$ | xargs rm -r done # Now create the binary-all symlinks echo Creating binary-all symlinks for DIR in `find . -name binary-all` do cd $DIR for CAT in * do if [ $CAT != '*' ] ; then if [ -d $CAT ] ; then cd $CAT fi for FILE in *.deb do if [ $FILE != '*.deb' ] ; then for ARCH in alpha arm i386 m68k powerpc sparc do if [ -d ../../binary-$ARCH ] ; then if [ ! -d ../../binary-$ARCH/$CAT ] ; then mkdir ../../binary-$ARCH/$CAT fi ln -s ../../binary-all/$CAT/$FILE ../../binary-$ARCH/$CAT fi done fi done if [ -d ../$CAT ] ; then cd .. fi fi done cd $UPD done echo Creating .disk/info files echo $INFO1 >CD1/.disk/info echo $INFO2 >CD2/.disk/info echo Creating Packages files for ARCH in $ARCH1 do echo $ARCH ARCH=$ARCH $scanpackages scan CD1 ARCH=$ARCH $scanpackages -noPackages.cd install CD1 rm -f CD1/*.Packages* done for ARCH in $ARCH2 do echo $ARCH ARCH=$ARCH $scanpackages scan CD2 ARCH=$ARCH $scanpackages -noPackages.cd install CD2 rm -f CD2/*.Packages* done echo Creating Sources files $scansources CD1 $scansources CD2 rm CD?/CD?.* ${MKISOFS} -J -r -V "Debian $VER update CD" -o $OUT/potato-update-1.raw CD1 ${MKISOFS} -J -r -V "Debian $VER update CD" -o $OUT/potato-update-2.raw CD2