File: update-cd

package info (click to toggle)
debian-cd 3.1.1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 2,296 kB
  • ctags: 98
  • sloc: sh: 4,875; perl: 1,884; makefile: 325
file content (305 lines) | stat: -rwxr-xr-x 8,025 bytes parent folder | download
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
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
#!/bin/bash
#
# $Id: update-cd 1745 2008-11-02 02:59:10Z 93sam $
# 
# (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 an initial stable release (r0) to the latest point release level
#

set -e

# Configuration goes here.

# Where is your mirror?
MIRROR_NORM=/org/cdbuilder.debian.org/src/ftp/debian
MIRROR_AMD64=/org/cdbuilder.debian.org/src/ftp/debian-amd64/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=0

# What release version is this?
VER=4.0r1

# Is this an official CD?
OFFICIAL=Official
# OFFICIAL="Unofficial snapshot"

# Path to use with mkisofs/mkhybrid
#MKISOFS=${MKISOFS:-"mkhybrid"}
MKISOFS=$PWD/../mkisofs/usr/bin/mkisofs

# 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=/org/cdbuilder.debian.org/src/deb-cd/tmp/etch-update/cd-work

# Building etch cd set ...
CODENAME=etch

# Path where the images will be written
OUT=/org/cdbuilder.debian.org/src/deb-cd/tmp/etch-update/cd-out

# Location(s) for the snapshot(s)
SNAPSHOT='Debian=http://us.cdimage.debian.org/cdimage/snapshot/Debian/ --try-last'

# Type of disc image, cd or dvd (lower case)
if [ "$1"x = ""x ] ; then
    TYPE=cd
else
    TYPE=$1
fi
case $TYPE in
    cd|CD)
    TYPE=cd
    TYPEUP=CD;;
    dvd|DVD)
    TYPE=dvd
    TYPEUP=DVD;;
    *)
    echo "Specify a disk type..."
    exit 1;;
esac

# 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=/home/deb-cd/r0-r1.diff

if [ "$TYPE" = "cd" ] ; then
    CDSIZE=610 # megabytes, leaving space for metadata
else
    CDSIZE=4300 # megabytes, leaving space for metadata
fi

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

FIRSTVER=`echo $VER | sed 's?r.*$?r0?g'`
VERSPACE=`echo $VER | sed 's?r? r?g'`
CAPCODE=`perl -e "print ucfirst("$CODENAME")"`

export FIRSTVER VERSPACE CAPCODE

if [ "$ARCHLIST"x = ""x ] ; then
    ARCHLIST="alpha amd64 arm hppa i386 ia64 mips mipsel powerpc s390 sparc source" # amd64 # all dealt with specially
fi

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
            source)
                echo "    source"
                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=`dirname $FILE`
    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 [ ! -d $OUT/$THISARCH/iso-$TYPE ] ; then
	    mkdir -p $OUT/$THISARCH/iso-$TYPE
	fi
	if [ $JTE = 1 ] ; then
	    if [ ! -d $OUT/$THISARCH/jigdo-$TYPE ] ; then
		mkdir -p $OUT/$THISARCH/jigdo-$TYPE
	    fi
		${MKISOFS} -J -r -V "Debian $VER update $TYPEUP" -o \
			$OUT/$THISARCH/iso-$TYPE/debian-update-$VER-$THISARCH-$TYPEUP-$THISNUM.iso \
			-jigdo-jigdo $OUT/$THISARCH/jigdo-$TYPE/debian-update-$VER-$THISARCH-$TYPEUP-$THISNUM.jigdo \
			-jigdo-template $OUT/$THISARCH/jigdo-$TYPE/debian-update-$VER-$THISARCH-$TYPEUP-$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"
		$BASEDIR/tools/jigdo_cleanup \
			$OUT/$THISARCH/jigdo-$TYPE/debian-update-$VER-$THISARCH-$TYPEUP-$THISNUM.jigdo \
			debian-update-$VER-$THISARCH-$TYPEUP-$THISNUM.iso \
			$OUT debian-update-$VER-$THISARCH-$TYPEUP-$THISNUM.template \
			"Debian GNU/Linux $VERSPACE - $OFFICIAL $THISARCH $FIRSTVER->$VER update $TYPEUP #$THISNUM"
		echo $SNAPSHOT >> $OUT/$THISARCH/jigdo-$TYPE/debian-update-$VER-$THISARCH-$TYPEUP-$THISNUM.jigdo
	else
		${MKISOFS} -J -r -V "Debian $VER update $TYPEUP" -o \
		$OUT/iso-$TYPE/$CODENAME-update-$THISARCH-$TYPEUP-$THISNUM.raw \
		$UPD/CD$CDNUM 2>&1 | grep "extents written"
	fi
}


echo Cleaning up
rm -rf $UPD
mkdir -p $UPD
CDNUM=1

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

	MIRROR=$MIRROR_NORM

	rm -f $UPD/md5-check
	$GRAB_MD5 $MIRROR $THISARCH $CODENAME $CODENAME $UPD/md5-check
	if [ "$NONUS"x != ""x ] ; then
		$GRAB_MD5 $NONUS $THISARCH $CODENAME $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 = "source" ] ; then
				echo "Creating $TYPEUP$CDNUM for source (part $THISNUM)"
			else
				echo "Creating $TYPEUP$CDNUM for binary-$THISARCH (part $THISNUM)"
			fi
			mkdir $UPD/CD$CDNUM $UPD/CD$CDNUM/.disk
			INFO="Debian GNU/Linux $VER Update $TYPEUP $DATE: $THISARCH $TYPEUP $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
            source)
				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