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 RELEASEPACKAGE
=${RELEASEDIR}/usr
/install
/packages
117 RELEASEPACKAGESOURCES
=${RELEASEDIR}/usr
/install
/package-sources
118 IMAGE
=..
/boot
/cdbootblock
120 CDFILES
=/usr
/tmp
/cdreleasefiles
121 sh tell_config OS_RELEASE . OS_VERSION
>/tmp
/rel.$$
122 version_pretty
=`sed 's/[" ]//g;/^$/d' </tmp/rel.$$`
123 version
=`sed 's/[" ]//g;/^$/d' </tmp/rel.$$ | tr . _`
124 IMG_BASE
=minix
${version}_ide
135 while getopts "s:pchu?r:f:" c
139 echo "Usage: $0 [-p] [-c] [-h] [-r <tag>] [-u] [-f <filename>] [-s <username>]" >&2
143 echo " * Making HD image"
144 IMG_BASE
=minix
${version}_bios
148 echo " * Copying, not SVN"
158 echo " * Making live USB-stick image"
159 IMG_BASE
=minix
${version}_usb
164 FILENAMEOUT
="$OPTARG"
166 s
) USERNAME
="--username=$OPTARG"
175 if [ $PACKAGES -ne 0 ]
176 then mkdir
-p $PACKAGEDIR || true
177 mkdir
-p $PACKAGESOURCEDIR || true
178 rm -f $PACKAGEDIR/List
179 retrieve
$PACKAGEDIR $PACKAGELIST packages
/`uname -p`/`uname -r`.
`uname -v`
180 retrieve
$PACKAGESOURCEDIR $PACKAGESOURCELIST software
185 USRKB
=$
(($USRMB*1024))
186 USRBLOCKS
=$
(($USRMB * 1024 * 1024 / $BS))
187 USRSECTS
=$
(($USRMB * 1024 * 2))
189 ROOTSECTS
=$
(($ROOTKB * 2))
190 ROOTBLOCKS
=$
(($ROOTKB * 1024 / $BS))
194 echo "Note: this script wants to do svn operations."
201 if [ ! -b $TMPDISK1 -o ! -b $TMPDISK2 -o ! $TMPDISK3 ]
202 then echo "$TMPDISK1, $TMPDISK2 or $TMPDISK3 is not a block device.."
206 umount
$TMPDISK1 || true
207 umount
$TMPDISK2 || true
208 umount
$TMPDISK3 || true
210 ramdisk
$USRKB $TMPDISK1
211 ramdisk
$TMPKB $TMPDISK2
212 ramdisk
$ROOTKB $TMPDISK3
214 if [ $TMPDISK1 = $TMPDISK2 -o $TMPDISK1 = $TMPDISK3 -o $TMPDISK2 = $TMPDISK3 ]
216 echo "Temporary devices can't be equal."
220 echo " * Cleanup old files"
221 rm -rf $RELEASEDIR $IMG $ROOTIMAGE $CDFILES image
*
222 mkdir
-p $CDFILES ||
exit
224 mkfs
-i 2000 -B $BS -b $ROOTBLOCKS $TMPDISK3 ||
exit
225 mkfs
-B 1024 -b $TMPKB $TMPDISK2 ||
exit
226 echo " * mounting $TMPDISK3 as $RELEASEDIR"
227 mount
$TMPDISK3 $RELEASEDIR ||
exit
228 mkdir
-m 755 $RELEASEDIR/usr
229 mkdir
-m 1777 $RELEASEDIR/tmp
230 mount
$TMPDISK2 $RELEASEDIR/tmp
232 mkfs
-B $BS -i 30000 -b $USRBLOCKS $TMPDISK1 ||
exit
233 echo " * Mounting $TMPDISK1 as $RELEASEDIR/usr"
234 mount
$TMPDISK1 $RELEASEDIR/usr ||
exit
235 mkdir
-p $RELEASEDIR/tmp
236 mkdir
-p $RELEASEDIR/usr
/tmp
237 mkdir
-p $RELEASEDIR/$XBIN
238 mkdir
-p $RELEASEDIR/usr
/bin
239 mkdir
-p $RELEASEDIR/bin
240 mkdir
-p $RELEASEPACKAGE
241 mkdir
-p $RELEASEPACKAGESOURCES
243 echo " * Transfering bootstrap dirs to $RELEASEDIR"
244 cp -p /bin
/* /usr
/bin
/* $RELEASEDIR/$XBIN
245 cp -rp /usr
/lib
$RELEASEDIR/usr
246 cp -rp /bin
/bigsh
/bin
/sh
/bin
/echo $RELEASEDIR/bin
247 cp -rp /usr
/bin
/make /usr
/bin
/install /usr
/bin
/yacc /usr
/bin
/flex
/usr
/bin
/asmconv
$RELEASEDIR/usr
/bin
249 if [ -d $PACKAGEDIR -a -d $PACKAGESOURCEDIR -a -f $PACKAGELIST -a -f $PACKAGESOURCELIST -a $PACKAGES -ne 0 ]
250 then echo " * Transfering $PACKAGEDIR to $RELEASEPACKAGE"
251 : >$RELEASEPACKAGE/List
252 for p
in `cat $PACKAGELIST`
253 do if [ -f $PACKAGEDIR/$p.
tar.bz2
]
255 cp $PACKAGEDIR/$p.
tar.bz2
$RELEASEPACKAGE/
256 grep "^$p|" $PACKAGEDIR/List
>>$RELEASEPACKAGE/List ||
echo "$p not found in List"
258 echo "Can't copy $PACKAGEDIR/$p.tar.bz2. Missing."
262 echo " * Transfering $PACKAGESOURCEDIR to $RELEASEPACKAGESOURCES"
263 for p
in `cat $PACKAGESOURCELIST`
265 if [ -f $PACKAGESOURCEDIR/$p.
tar.bz2
]
267 cp $PACKAGESOURCEDIR/$p.
tar.bz2
$RELEASEPACKAGESOURCES/
269 echo "Can't copy $PACKAGESOURCEDIR/$p.tar.bz2. Missing."
274 # Make sure compilers and libraries are bin-owned
275 chown
-R bin
$RELEASEDIR/usr
/lib
276 chmod -R u
+w
$RELEASEDIR/usr
/lib
280 echo " * Doing new svn export"
281 TOOLSREPO
="`svn info | grep '^URL: ' | awk '{ print $2 }'`"
282 REPO
="`echo $TOOLSREPO | sed 's/.tools$//'`"
283 BRANCHNAME
="`echo $REPO | awk -F/ '{ print $NF }'`"
284 REVISION
="`svn info $USERNAME $SVNREV $REPO | grep '^Revision: ' | awk '{ print $2 }'`"
285 echo "Doing export of revision $REVISION from $REPO."
286 ( cd $RELEASEDIR/usr
&& svn
-q $USERNAME export -r$REVISION $REPO $SRC )
287 if [ $BRANCHNAME = src
]
288 then REVTAG
=r
$REVISION
289 else REVTAG
=branch-
$BRANCHNAME-r$REVISION
294 /* Added by release script */
295 #ifndef _SVN_REVISION
296 #define _SVN_REVISION \"$REVTAG\"
297 #endif" >>$RELEASEDIR/usr
/src
/include
/minix
/sys_config.h
300 if [ "$USB" -ne 0 ]; then
301 IMG
=${IMG_BASE}_
${REVTAG}.img
303 IMG
=${IMG_BASE}_
${REVTAG}.iso
307 ( cd ..
&& make depend
&& make clean
)
309 ( cd $srcdir && tar cf
- .
) |
( cd $RELEASEDIR/usr
&& mkdir
$SRC && cd $SRC && tar xf
- )
312 IMG
=${IMG_BASE}_copy.iso
315 echo " * Fixups for owners and modes of dirs and files"
316 chown
-R bin
$RELEASEDIR/usr
/$SRC
317 chmod -R u
+w
$RELEASEDIR/usr
/$SRC
318 find $RELEASEDIR/usr
/$SRC -type d |
xargs chmod 755
319 find $RELEASEDIR/usr
/$SRC -type f |
xargs chmod 644
320 find $RELEASEDIR/usr
/$SRC -name configure |
xargs chmod 755
321 find $RELEASEDIR/usr
/$SRC/commands
-name build |
xargs chmod 755
322 # Bug tracking system not for on cd
323 rm -rf $RELEASEDIR/usr
/$SRC/doc
/bugs
325 # Make sure the CD knows it's a CD, unless it's not
327 then date >$RELEASEDIR/CD
329 echo " * Bootstrap /etc/mk files"
330 # Need /etc/mk in the new system to invoke make. Real ownerships
331 # and permissions will be set by its own src/etc/Makefile.
332 # They have to be owned by bin so that the new make can do its work.
333 mkdir
-p $RELEASEDIR/etc
/mk
334 chmod 755 $RELEASEDIR/etc
/mk
335 cp $RELEASEDIR/usr
/src
/etc
/mk
/* $RELEASEDIR/etc
/mk
/
336 chown
-R bin
$RELEASEDIR/etc
/mk
337 echo " * Chroot build"
338 cp chrootmake.sh
$RELEASEDIR/usr
/$SRC/tools
/chrootmake.sh
339 chroot
$RELEASEDIR "PATH=/$XBIN sh -x /usr/$SRC/tools/chrootmake.sh" ||
exit 1
340 # Copy built images for cd booting
341 cp $RELEASEDIR/boot
/image_big image
342 echo " * Chroot build done"
343 echo " * Removing bootstrap files"
344 rm -rf $RELEASEDIR/$XBIN
345 # The build process leaves some file in $SRC as root.
346 chown
-R bin
$RELEASEDIR/usr
/src
*
347 cp issue.
install $RELEASEDIR/etc
/issue
352 elif [ "$HDEMU" -ne 0 ]
357 echo $version_pretty, SVN revision
$REVISION, generated
`date` >$RELEASEDIR/etc
/version
358 echo " * Counting files"
359 extrakb
=`du -s $RELEASEDIR/usr/install | awk '{ print $1 }'`
360 expr `df $TMPDISK1 | tail -1 | awk '{ print $4 }'` - $extrakb >$RELEASEDIR/.usrkb
361 find $RELEASEDIR/usr | fgrep
-v /install
/ |
wc -l >$RELEASEDIR/.usrfiles
362 find $RELEASEDIR -xdev |
wc -l >$RELEASEDIR/.rootfiles
363 echo " * Zeroing remainder of temporary areas"
366 cp /dev
/zero
$RELEASEDIR/usr
/.x
2>/dev
/null || true
367 rm $RELEASEDIR/usr
/.x
368 cp /dev
/zero
$RELEASEDIR/.x
2>/dev
/null || true
371 umount
$TMPDISK1 ||
exit
372 umount
$TMPDISK2 ||
exit
373 umount
$TMPDISK3 ||
exit
375 # Boot monitor variables for boot CD
376 edparams
$TMPDISK3 'unset bootopts;
385 bootbig(1, Regular MINIX 3) { unset image; boot }
386 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; };
390 dd if=$TMPDISK3 of
=$ROOTIMAGE bs
=$BS count
=$ROOTBLOCKS
391 cp release
/cd
/* $CDFILES || true
392 echo "This is Minix version $version_pretty prepared `date`." >$CDFILES/VERSION.TXT
396 if [ "$HDEMU" -ne 0 ]; then
402 if [ "$USB" -ne 0 ]; then
405 cp ..
/boot
/boot
$CDFILES
406 writeisofs
-s0x0 -l MINIX
-a boot
-b $bootimage $boottype $CDFILES $IMG ||
exit 1
408 if [ "$HDEMU" -eq 0 ]
410 echo "Appending Minix root and usr filesystem"
411 # Pad ISO out to cylinder boundary
412 isobytes
=`stat -size $IMG`
413 isosects
=`expr $isobytes / 512`
414 isopad
=`expr $secs - '(' $isosects % $secs ')'`
415 dd if=/dev
/zero count
=$isopad >>$IMG
417 isosects
=`expr $isosects + $isopad`
418 ( cat $IMG $ROOTIMAGE ;
419 dd if=$TMPDISK1 bs
=$BS count
=$USRBLOCKS ) >m
421 # Make CD partition table
422 installboot
-m $IMG /usr
/mdec
/masterboot
423 # Make sure there is no hole..! Otherwise the ISO format is
425 partition
-m $IMG 0 81:$isosects 81:$ROOTSECTS 81:$USRSECTS
431 if [ "$FILENAMEOUT" ]
432 then echo "$IMG" >$FILENAMEOUT