5 PATH
=$PATH:/usr
/local
/bin
10 # size of /tmp during build
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
22 RELEASERC
=$HOME/.releaserc
31 TRUNK
=https
://gforge.cs.vu.nl
/svn
/minix
/trunk
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
57 dd < /dev
/zero count
=$padsects
59 partition
-m hdimage
81:`expr $primsects + $padsects`*
60 installboot
-m hdimage
/usr
/mdec
/masterboot
67 url
=http
://www.minix3.org
/$3
71 echo " * Updating $dir
74 files
=`awk <$list '{ print "'$url'/" $1 ".tar.bz2" }'`
75 wget
-c $url/List
$files || true
81 $RELEASEDIR/usr
/bin
/installboot
-d $TMPDISK3 \
82 $RELEASEDIR/usr
/mdec
/bootblock boot
/boot
89 bootbig(1, Regular MINIX 3) { image=/boot/image_big; boot }
90 main() { trap 10000 boot ; menu; }
91 save' |
$RELEASEDIR/usr
/bin
/edparams
$TMPDISK3
96 usr_roflag="-r"' > $RELEASEDIR/etc
/fstab
101 $RELEASEDIR/usr
/bin
/installboot
-d $TMPDISK3 \
102 $RELEASEDIR/usr
/mdec
/bootblock boot
/boot
107 save' |
$RELEASEDIR/usr
/bin
/edparams
$TMPDISK3
112 ' > $RELEASEDIR/etc
/fstab
116 RELEASEMNTDIR
=$RELEASEDIR
117 RELEASEPACKAGE
=${RELEASEDIR}/usr
/install
/packages
118 RELEASEPACKAGESOURCES
=${RELEASEDIR}/usr
/install
/package-sources
119 IMAGE
=..
/boot
/cdbootblock
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
138 while getopts "s:pmchu?r:f:" c
142 echo "Usage: $0 [-p] [-c] [-h] [-m] [-r <tag>] [-u] [-f <filename>] [-s <username>]" >&2
146 echo " * Making HD image"
147 IMG_BASE
=minix
${version}_bios
151 echo " * Copying, not SVN"
161 echo " * Making live USB-stick image"
162 IMG_BASE
=minix
${version}_usb
167 FILENAMEOUT
="$OPTARG"
169 s
) USERNAME
="--username=$OPTARG"
173 RELEASEDIR
=/usr
/r-staging
174 RELEASEPACKAGE
=${RELEASEDIR}/usr
/install
/packages
175 RELEASEPACKAGESOURCES
=${RELEASEDIR}/usr
/install
/package-sources
177 [ ! "$USRMB" ] && USRMB
=22
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
200 USRKB
=$
(($USRMB*1024))
201 USRBLOCKS
=$
(($USRMB * 1024 * 1024 / $BS))
202 USRSECTS
=$
(($USRMB * 1024 * 2))
203 ROOTSECTS
=$
(($ROOTKB * 2))
204 ROOTBLOCKS
=$
(($ROOTKB * 1024 / $BS))
208 echo "Note: this script wants to do svn operations."
215 if [ ! -b $TMPDISK1 -o ! -b $TMPDISK2 -o ! $TMPDISK3 ]
216 then echo "$TMPDISK1, $TMPDISK2 or $TMPDISK3 is not a block device.."
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 ]
230 echo "Temporary devices can't be equal."
234 echo " * Cleanup old files"
235 rm -rf $RELEASEDIR $RELEASEMNTDIR $IMG $ROOTIMAGE $CDFILES image
*
236 mkdir
-p $CDFILES ||
exit
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
]
271 cp $PACKAGEDIR/$p.
tar.bz2
$RELEASEPACKAGE/
272 grep "^$p|" $PACKAGEDIR/List
>>$RELEASEPACKAGE/List ||
echo "$p not found in List"
274 echo "Can't copy $PACKAGEDIR/$p.tar.bz2. Missing."
278 echo " * Transfering $PACKAGESOURCEDIR to $RELEASEPACKAGESOURCES"
279 for p
in `cat $PACKAGESOURCELIST`
281 if [ -f $PACKAGESOURCEDIR/$p.
tar.bz2
]
283 cp $PACKAGESOURCEDIR/$p.
tar.bz2
$RELEASEPACKAGESOURCES/
285 echo "Can't copy $PACKAGESOURCEDIR/$p.tar.bz2. Missing."
290 # Make sure compilers and libraries are bin-owned
291 chown
-R bin
$RELEASEDIR/usr
/lib
292 chmod -R u
+w
$RELEASEDIR/usr
/lib
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
310 /* Added by release script */
311 #ifndef _SVN_REVISION
312 #define _SVN_REVISION \"$REVTAG\"
313 #endif" >>$RELEASEDIR/usr
/src
/include
/minix
/sys_config.h
316 if [ "$USB" -ne 0 ]; then
317 IMG
=${IMG_BASE}_
${REVTAG}.img
319 IMG
=${IMG_BASE}_
${REVTAG}.iso
323 ( cd ..
&& make depend
&& make clean
)
325 ( cd $srcdir && tar cf
- .
) |
( cd $RELEASEDIR/usr
&& mkdir
$SRC && cd $SRC && tar xf
- )
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
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
368 elif [ "$HDEMU" -ne 0 ]
373 echo $version_pretty, SVN revision
$REVISION, generated
`date` >$RELEASEDIR/etc
/version
374 if [ $MINIMAL -ne 0 ]
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 \
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 ]
390 echo " * Copying files from staging to image"
391 synctree
-f $RELEASEDIR $RELEASEMNTDIR > /dev
/null || true
393 echo " * Zeroing remainder of temporary areas"
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
402 umount
$TMPDISK1 ||
exit
403 umount
$TMPDISK2 ||
exit
404 umount
$TMPDISK3 ||
exit
406 # Boot monitor variables for boot CD
407 edparams
$TMPDISK3 'unset bootopts;
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; };
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
427 if [ "$HDEMU" -ne 0 ]; then
433 if [ "$USB" -ne 0 ]; then
436 cp ..
/boot
/boot
$CDFILES
437 writeisofs
-s0x0 -l MINIX
-a boot
-b $bootimage $boottype $CDFILES $IMG ||
exit 1
439 if [ "$HDEMU" -eq 0 ]
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
448 isosects
=`expr $isosects + $isopad`
449 ( cat $IMG $ROOTIMAGE ;
450 dd if=$TMPDISK1 bs
=$BS count
=$USRBLOCKS ) >m
452 # Make CD partition table
453 installboot
-m $IMG /usr
/mdec
/masterboot
454 # Make sure there is no hole..! Otherwise the ISO format is
456 partition
-m $IMG 0 81:$isosects 81:$ROOTSECTS 81:$USRSECTS
457 echo "${ZIP}ping $IMG"
462 if [ "$FILENAMEOUT" ]
463 then echo "$IMG" >$FILENAMEOUT