254 lines
6.1 KiB
Plaintext
254 lines
6.1 KiB
Plaintext
|
#!/bin/bash
|
||
|
#
|
||
|
# $Id$
|
||
|
#
|
||
|
# (c) Steve McIntyre <stevem@chiark.greenend.org.uk> 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
|
||
|
#
|
||
|
|
||
|
set -e
|
||
|
|
||
|
# Configuration goes here.
|
||
|
|
||
|
# Where is your mirror?
|
||
|
MIRROR=${MIRROR:-/mirror/debian}
|
||
|
|
||
|
# If you have a non-US mirror, where is it? Leave blank if you don't have one.
|
||
|
NONUS=${NONUS:-/mirror/debian-non-US}
|
||
|
|
||
|
# Do you want non-free? 1 for yes, 0 for no
|
||
|
#NONFREE=1
|
||
|
|
||
|
# What release version is this?
|
||
|
VER=3.0r3
|
||
|
|
||
|
# Path to use with mkisofs/mkhybrid
|
||
|
MKISOFS=${MKISOFS:-"mkhybrid"}
|
||
|
MKISOFS=mkisofs-jte
|
||
|
|
||
|
# Use JTE extensions to mkisofs to make jigdo files?
|
||
|
JTE=1
|
||
|
|
||
|
# The working directory to use. MUST be on the same partition as the mirror.
|
||
|
TDIR=/mirror/debian-cd
|
||
|
|
||
|
# Building woody cd set ...
|
||
|
CODENAME=woody
|
||
|
|
||
|
# Path where the images will be written
|
||
|
OUT=/mirror/woody-update/r3
|
||
|
|
||
|
# 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=/mirror/lists/$CODENAME/r0-r3.diff #~/r3.diff
|
||
|
|
||
|
CDSIZE=620 # megabytes, leaving space for metadata
|
||
|
REL=Debian"$VER"
|
||
|
CLOG=dists/$CODENAME/ChangeLog
|
||
|
NUCLOG=dists/$CODENAME/non-US/ChangeLog
|
||
|
UPD=$TDIR/$CODENAME-update
|
||
|
DATE=`date +%Y%m%d`
|
||
|
BASEDIR=`pwd`
|
||
|
SECTS="main non-free contrib"
|
||
|
VERBOSE=2
|
||
|
GRAB_MD5=$BASEDIR/tools/grab_md5
|
||
|
export VERBOSE BASEDIR SECTS
|
||
|
|
||
|
ARCHLIST="alpha arm hppa i386 ia64 m68k mips mipsel powerpc s390 sparc src" # all dealt with specially
|
||
|
|
||
|
export TDIR NONFREE NONUS VER MIRROR CODENAME OUT BASEDIR
|
||
|
|
||
|
CDSIZE=$(($CDSIZE * 1024))
|
||
|
|
||
|
scanpackages=$BASEDIR/tools/scanpackages.old
|
||
|
scansources=$BASEDIR/tools/scansources.old
|
||
|
set_mkisofs_opts=$BASEDIR/tools/set_mkisofs_opts
|
||
|
addfiles=$BASEDIR/tools/add_files
|
||
|
|
||
|
create_control_files () {
|
||
|
CDDIR=$1
|
||
|
shift
|
||
|
ARCHES=$*
|
||
|
echo " Creating control files for \"$ARCHES\" on $CDDIR"
|
||
|
for ARCH in $ARCHES
|
||
|
do
|
||
|
case "$ARCH" in
|
||
|
src)
|
||
|
echo " src"
|
||
|
for SECT in $SECTS
|
||
|
do
|
||
|
mkdir -p $CDDIR/dists/$CODENAME/$SECT/source
|
||
|
mkdir -p $CDDIR/dists/$CODENAME/non-US/$SECT/source
|
||
|
done
|
||
|
cd $UPD
|
||
|
$scansources $CDDIR >/dev/null 2>&1
|
||
|
;;
|
||
|
all)
|
||
|
;;
|
||
|
*)
|
||
|
echo " $ARCH"
|
||
|
for SECT in $SECTS
|
||
|
do
|
||
|
mkdir -p $CDDIR/dists/$CODENAME/$SECT/binary-$ARCH
|
||
|
mkdir -p $CDDIR/dists/$CODENAME/non-US/$SECT/binary-$ARCH
|
||
|
done
|
||
|
ARCH=$ARCH $scanpackages scan $CDDIR > /dev/null 2>&1
|
||
|
ARCH=$ARCH $scanpackages -noPackages.cd install $CDDIR > /dev/null 2>&1
|
||
|
rm -f $CDDIR/*.Packages* #>/dev/null 2>&1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
}
|
||
|
|
||
|
copy_file () {
|
||
|
ROOTDIR=$1
|
||
|
shift
|
||
|
FILE=$1
|
||
|
DIR=`echo $FILE | sed 's?/[-_\.A-Za-z0-9\+]*$??'`
|
||
|
if [ ! -d $ROOTDIR/$DIR ] ; then
|
||
|
mkdir -p $ROOTDIR/$DIR
|
||
|
fi
|
||
|
if [ -e $MIRROR/$FILE ] ; then
|
||
|
cp -l $MIRROR/$FILE $ROOTDIR/$FILE
|
||
|
elif [ -e $NONUS/$FILE ] ; then
|
||
|
cp -l $NONUS/$FILE $ROOTDIR/$FILE
|
||
|
else
|
||
|
echo
|
||
|
echo "File $FILE not found!"
|
||
|
exit 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
make_cd () {
|
||
|
CDNUM=$1
|
||
|
shift
|
||
|
THISNUM=$1
|
||
|
shift
|
||
|
THISARCH=$1
|
||
|
shift
|
||
|
SRCFILES=$1
|
||
|
shift
|
||
|
ARCHFILES=$1
|
||
|
shift
|
||
|
ALLFILES=$1
|
||
|
echo
|
||
|
echo " Creating Packages and Sources files for CD$CDNUM"
|
||
|
cd $UPD
|
||
|
create_control_files CD$CDNUM $THISARCH
|
||
|
echo " Creating image for CD$CDNUM ($SRCFILES source files, $ARCHFILES $ARCH debs, $ALLFILES all debs)"
|
||
|
echo -n " "
|
||
|
if [ $JTE = 1 ] ; then
|
||
|
${MKISOFS} -J -r -V "Debian $VER update CD" -o \
|
||
|
/dev/null \
|
||
|
-jigdo-jigdo $OUT/$CODENAME-update-$THISARCH-$THISNUM.jigdo \
|
||
|
-jigdo-template $OUT/$CODENAME-update-$THISARCH-$THISNUM.template \
|
||
|
-jigdo-map Debian=$MIRROR/ \
|
||
|
-jigdo-map Non-US=$NONUS/ \
|
||
|
-jigdo-force-md5 /pool/ \
|
||
|
-md5-list $UPD/md5-check \
|
||
|
$UPD/CD$CDNUM 2>&1 | grep "extents written"
|
||
|
else
|
||
|
${MKISOFS} -J -r -V "Debian $VER update CD" -o \
|
||
|
$OUT/$CODENAME-update-$THISARCH-$THISNUM.raw \
|
||
|
$UPD/CD$CDNUM 2>&1 | grep "extents written"
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
|
||
|
echo Cleaning up
|
||
|
rm -rf $UPD
|
||
|
mkdir $UPD
|
||
|
CDNUM=1
|
||
|
|
||
|
cd $MIRROR
|
||
|
echo Creating file list
|
||
|
|
||
|
if [ ! -e $DIFF ] ; then
|
||
|
echo "NO DIFF FOUND. ABORT!"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
cp $DIFF $UPD/list
|
||
|
if [ "$NONUS"x == ""x ] ; then
|
||
|
echo "Removing non-US files from the list"
|
||
|
grep -v non-US $UPD/list > $UPD/list1
|
||
|
mv -f $UPD/list1 $UPD/list
|
||
|
fi
|
||
|
if [ "$NONFREE"x != "1"x ] ; then
|
||
|
echo "Removing non-free files from the list"
|
||
|
grep -v non-free $UPD/list > $UPD/list1
|
||
|
mv -f $UPD/list1 $UPD/list
|
||
|
fi
|
||
|
|
||
|
for THISARCH in $ARCHLIST
|
||
|
do
|
||
|
THISNUM=0
|
||
|
|
||
|
rm -f $UPD/md5-check
|
||
|
$GRAB_MD5 $MIRROR $THISARCH $CODENAME $UPD/md5-check
|
||
|
if [ "$NONUS"x != ""x ] ; then
|
||
|
$GRAB_MD5 $NONUS $THISARCH $CODENAME $UPD/md5-check
|
||
|
fi
|
||
|
|
||
|
for file in `cat $UPD/list`
|
||
|
do
|
||
|
if [ ! -d $UPD/CD$CDNUM ] ; then
|
||
|
echo
|
||
|
cd $MIRROR
|
||
|
THISNUM=$((THISNUM + 1))
|
||
|
if [ $THISARCH = "src" ] ; then
|
||
|
echo "Creating CD$CDNUM for source (part $THISNUM)"
|
||
|
else
|
||
|
echo "Creating CD$CDNUM for binary-$THISARCH (part $THISNUM)"
|
||
|
fi
|
||
|
mkdir $UPD/CD$CDNUM $UPD/CD$CDNUM/.disk
|
||
|
INFO="Debian GNU/Linux $VER Update CD $DATE: $THISARCH CD $THISNUM"
|
||
|
echo $INFO > $UPD/CD$CDNUM/.disk/info
|
||
|
SIZE_USED=0
|
||
|
SRCFILES=0
|
||
|
ARCHFILES=0
|
||
|
ALLFILES=0
|
||
|
fi
|
||
|
|
||
|
SIZE_USED=`du -sk $UPD/CD$CDNUM | awk '{print $1}'`
|
||
|
|
||
|
if [ $SIZE_USED -gt $CDSIZE ] ; then
|
||
|
make_cd $CDNUM $THISNUM $THISARCH $SRCFILES $ARCHFILES $ALLFILES
|
||
|
CDNUM=$(($CDNUM + 1))
|
||
|
continue
|
||
|
fi
|
||
|
|
||
|
case "$THISARCH" in
|
||
|
src)
|
||
|
case "$file" in
|
||
|
*.gz|*.dsc)
|
||
|
copy_file $UPD/CD$CDNUM $file
|
||
|
SRCFILES=$(($SRCFILES + 1))
|
||
|
;;
|
||
|
esac
|
||
|
echo -en "\r$SRCFILES copied"
|
||
|
;;
|
||
|
*)
|
||
|
case "$file" in
|
||
|
*_$THISARCH.deb)
|
||
|
copy_file $UPD/CD$CDNUM $file
|
||
|
ARCHFILES=$(($ARCHFILES + 1))
|
||
|
;;
|
||
|
*_all.deb)
|
||
|
copy_file $UPD/CD$CDNUM $file
|
||
|
ALLFILES=$(($ALLFILES + 1))
|
||
|
;;
|
||
|
esac
|
||
|
echo -en "\r$THISARCH:$ARCHFILES all:$ALLFILES copied"
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
make_cd $CDNUM $THISNUM $THISARCH $SRCFILES $ARCHFILES $ALLFILES
|
||
|
CDNUM=$(($CDNUM + 1))
|
||
|
done
|
||
|
|