kernel/vm: change pde table info from single buffer to explicit per-process.
[minix.git] / tools / release.sh
blob0936f9a7fe661ae7f65180bf4ed53c72d07461f7
1 #!/bin/sh
3 set -e
5 PATH=$PATH:/usr/local/bin
7 XBIN=usr/xbin
8 SRC=src
10 # size of /tmp during build
11 TMPKB=32000
13 PACKAGEDIR=/usr/bigports/Packages
14 PACKAGESOURCEDIR=/usr/bigports/Sources
15 # List of packages included on installation media
16 PACKAGELIST=packages.install
17 # List of package source included on installation media
18 PACKAGESOURCELIST=package_sources.install
19 secs=`expr 32 '*' 64`
20 export SHELL=/bin/sh
22 RELEASERC=$HOME/.releaserc
24 if [ -f $RELEASERC ]
25 then . $RELEASERC
28 set -- $* $RELOPTS
30 # SVN trunk repo
31 TRUNK=https://gforge.cs.vu.nl/svn/minix/trunk
33 make_hdimage()
35 dd if=$TMPDISK1 of=usrimage bs=$BS count=$USRBLOCKS
37 rootsize=`stat -size rootimage`
38 usrsize=`stat -size usrimage`
40 rootsects=`expr $rootsize / 512`
41 usrsects=`expr $usrsize / 512`
43 # installboot -m needs at least 1KB
44 dd < /dev/zero >tmpimage count=2
45 partition -fm tmpimage 2 81:$rootsects* 0:0 81:$usrsects
46 installboot -m tmpimage /usr/mdec/masterboot
47 dd < tmpimage > subpart count=1
49 primsects=`expr 1 + $rootsects + $usrsects`
50 cyl=`expr '(' $primsects ')' / $secs + 1`
51 padsects=`expr $cyl \* $secs - 1 - $primsects`
53 { dd < /dev/zero count=1
54 cat subpart
55 cat rootimage
56 cat usrimage
57 dd < /dev/zero count=$padsects
58 } > hdimage
59 partition -m hdimage 81:`expr $primsects + $padsects`*
60 installboot -m hdimage /usr/mdec/masterboot
63 retrieve()
65 dir=$1
66 list=`pwd`/$2
67 url=http://www.minix3.org/$3
68 BIGPORTS=bigports
70 cd $dir || exit 1
71 echo " * Updating $dir
72 from $url
73 with $list"
74 files=`awk <$list '{ print "'$url'/" $1 ".tar.bz2" }'`
75 wget -c $url/List $files || true
79 hdemu_root_changes()
81 $RELEASEDIR/usr/bin/installboot -d $TMPDISK3 \
82 $RELEASEDIR/usr/mdec/bootblock boot/boot
83 echo \
84 'bootcd=2
85 disable=inet
86 bios_wini=yes
87 bios_remap_first=1
88 ramimagedev=c0d7p0s0
89 bootbig(1, Regular MINIX 3) { image=/boot/image_big; boot }
90 main() { trap 10000 boot ; menu; }
91 save' | $RELEASEDIR/usr/bin/edparams $TMPDISK3
93 echo \
94 'root=/dev/c0d7p0s0
95 usr=/dev/c0d7p0s2
96 usr_roflag="-r"' > $RELEASEDIR/etc/fstab
99 usb_root_changes()
101 $RELEASEDIR/usr/bin/installboot -d $TMPDISK3 \
102 $RELEASEDIR/usr/mdec/bootblock boot/boot
103 echo \
104 'bios_wini=yes
105 bios_remap_first=1
106 rootdev=c0d7p0s0
107 save' | $RELEASEDIR/usr/bin/edparams $TMPDISK3
109 echo \
110 'root=/dev/c0d7p0s0
111 usr=/dev/c0d7p0s2
112 ' > $RELEASEDIR/etc/fstab
115 RELEASEDIR=/usr/r
116 RELEASEMNTDIR=$RELEASEDIR
117 RELEASEPACKAGE=${RELEASEDIR}/usr/install/packages
118 RELEASEPACKAGESOURCES=${RELEASEDIR}/usr/install/package-sources
119 IMAGE=../boot/cdbootblock
120 ROOTIMAGE=rootimage
121 CDFILES=/usr/tmp/cdreleasefiles
122 sh tell_config OS_RELEASE . OS_VERSION >/tmp/rel.$$
123 version_pretty=`sed 's/[" ]//g;/^$/d' </tmp/rel.$$`
124 version=`sed 's/[" ]//g;/^$/d' </tmp/rel.$$ | tr . _`
125 IMG_BASE=minix${version}_ide
126 BS=4096
128 HDEMU=0
129 COPY=0
130 SVNREV=""
131 REVTAG=""
132 PACKAGES=1
133 MINIMAL=0
134 ROOTKB=8192
136 FILENAMEOUT=""
138 while getopts "s:pmchu?r:f:" c
140 case "$c" in
142 echo "Usage: $0 [-p] [-c] [-h] [-m] [-r <tag>] [-u] [-f <filename>] [-s <username>]" >&2
143 exit 1
146 echo " * Making HD image"
147 IMG_BASE=minix${version}_bios
148 HDEMU=1
151 echo " * Copying, not SVN"
152 COPY=1
155 PACKAGES=0
158 SVNREV=-r$OPTARG
161 echo " * Making live USB-stick image"
162 IMG_BASE=minix${version}_usb
163 HDEMU=1
164 USB=1
167 FILENAMEOUT="$OPTARG"
169 s) USERNAME="--username=$OPTARG"
171 m) MINIMAL=1
172 PACKAGES=0
173 RELEASEDIR=/usr/r-staging
174 RELEASEPACKAGE=${RELEASEDIR}/usr/install/packages
175 RELEASEPACKAGESOURCES=${RELEASEDIR}/usr/install/package-sources
176 ROOTKB=4096
177 [ ! "$USRMB" ] && USRMB=22
179 esac
180 done
182 if [ ! "$USRMB" ]
183 then USRMB=600
186 if [ ! "$ZIP" ]
187 then ZIP=gzip
190 if [ $PACKAGES -ne 0 ]
191 then mkdir -p $PACKAGEDIR || true
192 mkdir -p $PACKAGESOURCEDIR || true
193 rm -f $PACKAGEDIR/List
194 retrieve $PACKAGEDIR $PACKAGELIST packages/`uname -p`/`uname -r`.`uname -v`
195 retrieve $PACKAGESOURCEDIR $PACKAGESOURCELIST software
198 echo $USRMB MB
200 USRKB=$(($USRMB*1024))
201 USRBLOCKS=$(($USRMB * 1024 * 1024 / $BS))
202 USRSECTS=$(($USRMB * 1024 * 2))
203 ROOTSECTS=$(($ROOTKB * 2))
204 ROOTBLOCKS=$(($ROOTKB * 1024 / $BS))
206 if [ "$COPY" -ne 1 ]
207 then
208 echo "Note: this script wants to do svn operations."
211 TMPDISK1=/dev/ram0
212 TMPDISK2=/dev/ram1
213 TMPDISK3=/dev/ram2
215 if [ ! -b $TMPDISK1 -o ! -b $TMPDISK2 -o ! $TMPDISK3 ]
216 then echo "$TMPDISK1, $TMPDISK2 or $TMPDISK3 is not a block device.."
217 exit 1
220 umount $TMPDISK1 || true
221 umount $TMPDISK2 || true
222 umount $TMPDISK3 || true
224 ramdisk $USRKB $TMPDISK1
225 ramdisk $TMPKB $TMPDISK2
226 ramdisk $ROOTKB $TMPDISK3
228 if [ $TMPDISK1 = $TMPDISK2 -o $TMPDISK1 = $TMPDISK3 -o $TMPDISK2 = $TMPDISK3 ]
229 then
230 echo "Temporary devices can't be equal."
231 exit
234 echo " * Cleanup old files"
235 rm -rf $RELEASEDIR $RELEASEMNTDIR $IMG $ROOTIMAGE $CDFILES image*
236 mkdir -p $CDFILES || exit
237 mkdir -p $RELEASEDIR
238 [ "$RELEASEDIR" = "$RELEASEMNTDIR" ] || mkdir -p $RELEASEMNTDIR
239 mkfs -i 2000 -B $BS -b $ROOTBLOCKS $TMPDISK3 || exit
240 mkfs -B 1024 -b $TMPKB $TMPDISK2 || exit
241 echo " * mounting $TMPDISK3 as $RELEASEMNTDIR"
242 mount $TMPDISK3 $RELEASEMNTDIR || exit
243 mkdir -m 755 $RELEASEDIR/usr
244 [ "$RELEASEDIR" = "$RELEASEMNTDIR" ] || mkdir -m 755 $RELEASEMNTDIR/usr
245 mkdir -m 1777 $RELEASEDIR/tmp
246 mount $TMPDISK2 $RELEASEDIR/tmp
248 mkfs -B $BS -i 30000 -b $USRBLOCKS $TMPDISK1 || exit
249 echo " * Mounting $TMPDISK1 as $RELEASEMNTDIR/usr"
250 mount $TMPDISK1 $RELEASEMNTDIR/usr || exit
251 mkdir -p $RELEASEDIR/tmp
252 mkdir -p $RELEASEDIR/usr/tmp
253 mkdir -p $RELEASEDIR/$XBIN
254 mkdir -p $RELEASEDIR/usr/bin
255 mkdir -p $RELEASEDIR/bin
256 mkdir -p $RELEASEPACKAGE
257 mkdir -p $RELEASEPACKAGESOURCES
259 echo " * Transfering bootstrap dirs to $RELEASEDIR"
260 cp -p /bin/* /usr/bin/* $RELEASEDIR/$XBIN
261 cp -rp /usr/lib $RELEASEDIR/usr
262 cp -rp /bin/bigsh /bin/sh /bin/echo $RELEASEDIR/bin
263 cp -rp /usr/bin/make /usr/bin/install /usr/bin/yacc /usr/bin/flex /usr/bin/asmconv $RELEASEDIR/usr/bin
265 if [ -d $PACKAGEDIR -a -d $PACKAGESOURCEDIR -a -f $PACKAGELIST -a -f $PACKAGESOURCELIST -a $PACKAGES -ne 0 ]
266 then echo " * Transfering $PACKAGEDIR to $RELEASEPACKAGE"
267 : >$RELEASEPACKAGE/List
268 for p in `cat $PACKAGELIST`
269 do if [ -f $PACKAGEDIR/$p.tar.bz2 ]
270 then
271 cp $PACKAGEDIR/$p.tar.bz2 $RELEASEPACKAGE/
272 grep "^$p|" $PACKAGEDIR/List >>$RELEASEPACKAGE/List || echo "$p not found in List"
273 else
274 echo "Can't copy $PACKAGEDIR/$p.tar.bz2. Missing."
276 done
278 echo " * Transfering $PACKAGESOURCEDIR to $RELEASEPACKAGESOURCES"
279 for p in `cat $PACKAGESOURCELIST`
281 if [ -f $PACKAGESOURCEDIR/$p.tar.bz2 ]
282 then
283 cp $PACKAGESOURCEDIR/$p.tar.bz2 $RELEASEPACKAGESOURCES/
284 else
285 echo "Can't copy $PACKAGESOURCEDIR/$p.tar.bz2. Missing."
287 done
290 # Make sure compilers and libraries are bin-owned
291 chown -R bin $RELEASEDIR/usr/lib
292 chmod -R u+w $RELEASEDIR/usr/lib
294 if [ "$COPY" -ne 1 ]
295 then
296 echo " * Doing new svn export"
297 TOOLSREPO="`svn info | grep '^URL: ' | awk '{ print $2 }'`"
298 REPO="`echo $TOOLSREPO | sed 's/.tools$//'`"
299 BRANCHNAME="`echo $REPO | awk -F/ '{ print $NF }'`"
300 REVISION="`svn info $USERNAME $SVNREV $REPO | grep '^Revision: ' | awk '{ print $2 }'`"
301 echo "Doing export of revision $REVISION from $REPO."
302 ( cd $RELEASEDIR/usr && svn -q $USERNAME export -r$REVISION $REPO $SRC )
303 if [ $BRANCHNAME = src ]
304 then REVTAG=r$REVISION
305 else REVTAG=branch-$BRANCHNAME-r$REVISION
308 echo "
310 /* Added by release script */
311 #ifndef _SVN_REVISION
312 #define _SVN_REVISION \"$REVTAG\"
313 #endif" >>$RELEASEDIR/usr/src/include/minix/sys_config.h
315 # output image name
316 if [ "$USB" -ne 0 ]; then
317 IMG=${IMG_BASE}_${REVTAG}.img
318 else
319 IMG=${IMG_BASE}_${REVTAG}.iso
322 else
323 ( cd .. && make depend && make clean )
324 srcdir=/usr/$SRC
325 ( cd $srcdir && tar cf - . ) | ( cd $RELEASEDIR/usr && mkdir $SRC && cd $SRC && tar xf - )
326 REVTAG=copy
327 REVISION=unknown
328 IMG=${IMG_BASE}_copy.iso
331 echo " * Fixups for owners and modes of dirs and files"
332 chown -R bin $RELEASEDIR/usr/$SRC
333 chmod -R u+w $RELEASEDIR/usr/$SRC
334 find $RELEASEDIR/usr/$SRC -type d | xargs chmod 755
335 find $RELEASEDIR/usr/$SRC -type f | xargs chmod 644
336 find $RELEASEDIR/usr/$SRC -name configure | xargs chmod 755
337 find $RELEASEDIR/usr/$SRC/commands -name build | xargs chmod 755
338 # Bug tracking system not for on cd
339 rm -rf $RELEASEDIR/usr/$SRC/doc/bugs
341 # Make sure the CD knows it's a CD, unless it's not
342 if [ "$USB" -eq 0 ]
343 then date >$RELEASEDIR/CD
345 echo " * Bootstrap /etc/mk files"
346 # Need /etc/mk in the new system to invoke make. Real ownerships
347 # and permissions will be set by its own src/etc/Makefile.
348 # They have to be owned by bin so that the new make can do its work.
349 mkdir -p $RELEASEDIR/etc/mk
350 chmod 755 $RELEASEDIR/etc/mk
351 cp $RELEASEDIR/usr/src/etc/mk/* $RELEASEDIR/etc/mk/
352 chown -R bin $RELEASEDIR/etc/mk
353 echo " * Chroot build"
354 cp chrootmake.sh $RELEASEDIR/usr/$SRC/tools/chrootmake.sh
355 chroot $RELEASEDIR "PATH=/$XBIN sh -x /usr/$SRC/tools/chrootmake.sh" || exit 1
356 # Copy built images for cd booting
357 cp $RELEASEDIR/boot/image_big image
358 echo " * Chroot build done"
359 echo " * Removing bootstrap files"
360 rm -rf $RELEASEDIR/$XBIN
361 # The build process leaves some file in $SRC as root.
362 chown -R bin $RELEASEDIR/usr/src*
363 cp issue.install $RELEASEDIR/etc/issue
365 if [ "$USB" -ne 0 ]
366 then
367 usb_root_changes
368 elif [ "$HDEMU" -ne 0 ]
369 then
370 hdemu_root_changes
373 echo $version_pretty, SVN revision $REVISION, generated `date` >$RELEASEDIR/etc/version
374 if [ $MINIMAL -ne 0 ]
375 then
376 echo " * Removing files to create minimal image"
377 rm -rf $RELEASEDIR/boot/image/* $RELEASEDIR/usr/man/man*/* \
378 $RELEASEDIR/usr/share/zoneinfo* $RELEASEDIR/usr/src \
379 $RELEASEDIR/tmp/*
380 mkdir -p $RELEASEDIR/usr/src/tools
381 ln $RELEASEDIR/boot/image_big $RELEASEDIR/boot/image/$version
383 echo " * Counting files"
384 extrakb=`du -s $RELEASEDIR/usr/install | awk '{ print $1 }'`
385 expr `df $TMPDISK1 | tail -1 | awk '{ print $4 }'` - $extrakb >$RELEASEDIR/.usrkb
386 find $RELEASEDIR/usr | fgrep -v /install/ | wc -l >$RELEASEDIR/.usrfiles
387 find $RELEASEDIR -xdev | wc -l >$RELEASEDIR/.rootfiles
388 if [ $MINIMAL -ne 0 ]
389 then
390 echo " * Copying files from staging to image"
391 synctree -f $RELEASEDIR $RELEASEMNTDIR > /dev/null || true
392 else
393 echo " * Zeroing remainder of temporary areas"
394 df $TMPDISK1
395 df $TMPDISK3
396 cp /dev/zero $RELEASEDIR/usr/.x 2>/dev/null || true
397 rm $RELEASEDIR/usr/.x
398 cp /dev/zero $RELEASEDIR/.x 2>/dev/null || true
399 rm $RELEASEDIR/.x
402 umount $TMPDISK1 || exit
403 umount $TMPDISK2 || exit
404 umount $TMPDISK3 || exit
406 # Boot monitor variables for boot CD
407 edparams $TMPDISK3 'unset bootopts;
408 unset servers;
409 unset rootdev;
410 unset leader;
411 unset image;
412 disable=inet;
413 bootcd=1;
414 cdproberoot=1;
415 ata_id_timeout=2;
416 bootbig(1, Regular MINIX 3) { unset image; boot }
417 leader() { echo \n--- Welcome to MINIX 3. This is the boot monitor. ---\n\nChoose an option from the menu or press ESC if you need to do anything special.\nOtherwise I will boot with my defaults in 10 seconds.\n\n }; main(){trap 10000 boot; menu; };
418 save'
420 (cd ../boot && make)
421 dd if=$TMPDISK3 of=$ROOTIMAGE bs=$BS count=$ROOTBLOCKS
422 cp release/cd/* $CDFILES || true
423 echo "This is Minix version $version_pretty prepared `date`." >$CDFILES/VERSION.TXT
425 boottype=-n
426 bootimage=$IMAGE
427 if [ "$HDEMU" -ne 0 ]; then
428 make_hdimage
429 boottype='-h'
430 bootimage=hdimage
433 if [ "$USB" -ne 0 ]; then
434 mv $bootimage $IMG
435 else
436 cp ../boot/boot $CDFILES
437 writeisofs -s0x0 -l MINIX -a boot -b $bootimage $boottype $CDFILES $IMG || exit 1
439 if [ "$HDEMU" -eq 0 ]
440 then
441 echo "Appending Minix root and usr filesystem"
442 # Pad ISO out to cylinder boundary
443 isobytes=`stat -size $IMG`
444 isosects=`expr $isobytes / 512`
445 isopad=`expr $secs - '(' $isosects % $secs ')'`
446 dd if=/dev/zero count=$isopad >>$IMG
447 # number of sectors
448 isosects=`expr $isosects + $isopad`
449 ( cat $IMG $ROOTIMAGE ;
450 dd if=$TMPDISK1 bs=$BS count=$USRBLOCKS ) >m
451 mv m $IMG
452 # Make CD partition table
453 installboot -m $IMG /usr/mdec/masterboot
454 # Make sure there is no hole..! Otherwise the ISO format is
455 # unreadable.
456 partition -m $IMG 0 81:$isosects 81:$ROOTSECTS 81:$USRSECTS
457 echo "${ZIP}ping $IMG"
458 $ZIP -f $IMG
462 if [ "$FILENAMEOUT" ]
463 then echo "$IMG" >$FILENAMEOUT