~persia/debian-cd/mid.seed-cleanup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
#!/bin/bash
#
# $Id: update-cd,v 1.11 2004/10/31 01:10:41 93sam Exp $
# 
# (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:-$CDIMAGE_ROOT/ftp}

# 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