-
Notifications
You must be signed in to change notification settings - Fork 2
/
update-cd
executable file
·253 lines (221 loc) · 6.13 KB
/
update-cd
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
#!/bin/bash
#
# $Id: update-cd,v 1.11 2004/10/31 01:10:41 93sam Exp $
#
# (c) Steve McIntyre <[email protected]> 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