1#!/bin/sh 2 3set -e 4 5. ./release.functions 6 7version_pretty="`sh ../sys/conf/osrelease.sh`" 8version="`echo $version_pretty | tr . _`" 9PACKAGEDIR=/usr/pkgsrc/packages/$version_pretty/`uname -m` 10 11SRC=src 12: ${REPO:=git://git.minix3.org/minix} 13: ${GITBRANCH:=master} 14: ${BUILDOPTIONS:=} 15 16# Packages we have to pre-install, and url to use 17: ${PACKAGEURL="http://www.minix3.org/pkgsrc/packages/$version_pretty/`uname -m`/All/"} 18: ${PREINSTALLED_PACKAGES:="pkg_install pkgin"} 19 20# List of packages included on installation media 21PACKAGELIST=packages.install 22secs=`expr 32 '*' 64` 23export SHELL=/bin/sh 24 25PKG_ADD=/usr/pkg/sbin/pkg_add 26PKG_INFO=/usr/pkg/sbin/pkg_info 27 28if [ ! -x $PKG_ADD ] 29then echo Please install pkg_install from pkgsrc. 30 exit 1 31fi 32 33RELEASERC=$HOME/.releaserc 34 35if [ -f $RELEASERC ] 36then . $RELEASERC 37fi 38 39set -- $* $RELOPTS 40 41export RELEASEDIR=/usr/r-staging 42RELEASEMNTDIR=/usr/r 43 44IMAGE=/usr/mdec/bootxx_cd9660 45ROOTIMAGE=rootimage 46CDFILES=/usr/tmp/cdreleasefiles 47IMG_BASE=minix${version}_ide 48BS=4096 49 50COPY=0 51JAILMODE=0 52REVTAG="" 53PACKAGES=1 54MINIMAL=0 55MAKEMAP=0 56EXTRAS_INSTALL=0 57EXTRAS_PATH= 58 59# Do we have git? 60if git --version >/dev/null 61then if [ -d ../.git ] 62 then LOCAL_REVTAG="`git describe --always`" 63 GITMODE=1 64 fi 65fi 66 67FILENAMEOUT="" 68 69while getopts "b:j:lpmMch?f:L:e:" c 70do 71 case "$c" in 72 \?) 73 echo "Usage: $0 [-l] [-p] [-c] [-m] [-M] [-f <filename>] -j<jaildir> [-L <packageurl>] [-e <extras-path>]" >&2 74 exit 1 75 ;; 76 b) 77 GITBRANCH=$OPTARG 78 ;; 79 c) 80 echo " * Copying, not using GIT" 81 COPY=1 82 ;; 83 p) 84 PACKAGES=0 85 ;; 86 j) 87 RELEASEDIR=$OPTARG 88 JAILMODE=1 89 ;; 90 f) 91 FILENAMEOUT="$OPTARG" 92 ;; 93 m) MINIMAL=1 94 PACKAGES=0 95 ;; 96 M) MAKEMAP=1 97 ;; 98 l) PACKAGEURL=file://$PACKAGEDIR/All 99 ;; 100 L) PACKAGEURL="$OPTARG" 101 CUSTOM_PACKAGES=1 102 ;; 103 e) EXTRAS_INSTALL=1 104 EXTRAS_PATH="$OPTARG" 105 ;; 106 esac 107done 108 109RELEASEPACKAGE=${RELEASEDIR}/usr/install/packages 110 111if [ $GITMODE -ne 1 -a $COPY -ne 1 ] 112then echo "Need git to retrieve latest minix! Copying src instead!" 113 COPY=1 114fi 115 116if [ ! "$ZIP" ] 117then ZIP=bzip2 118fi 119 120if [ $PACKAGES -ne 0 ] 121then mkdir -p $PACKAGEDIR/All || true 122 retrieve $PACKAGEDIR/All $PACKAGELIST packages/`uname -p`/$VERSION_PRETTY 123fi 124 125TMPDISKUSR=/dev/ram0 126TMPDISKROOT=/dev/ram1 127 128if [ ! -b $TMPDISKUSR -o ! $TMPDISKROOT ] 129then echo "$TMPDISKUSR or $TMPDISKROOT is not a block device.." 130 exit 1 131fi 132 133if [ $TMPDISKUSR = $TMPDISKROOT ] 134then 135 echo "Temporary devices can't be equal." 136 exit 137fi 138 139if [ $JAILMODE = 0 ] 140then echo " * Cleanup old files" 141 umount $TMPDISKUSR || true 142 umount $TMPDISKROOT || true 143 umount $RELEASEMNTDIR/usr || true 144 umount $RELEASEMNTDIR || true 145fi 146 147rm -rf $RELEASEDIR $RELEASEMNTDIR $IMG $ROOTIMAGE $CDFILES image* || true 148mkdir -p $CDFILES || exit 149mkdir -p $RELEASEDIR $RELEASEMNTDIR 150mkdir -p $RELEASEPACKAGE 151 152########################################################################## 153echo " * Bootstrapping filesystem in $RELEASEDIR" 154########################################################################## 155CONFIGHEADER=$RELEASEDIR/usr/src/minix/include/minix/sys_config.h 156 157copy_local_packages 158 159if [ "$COPY" -ne 1 ] 160then 161 echo "Retrieving latest minix repo from $REPO branch $GITBRANCH." 162 srcdir=$RELEASEDIR/usr/src 163 git clone -b $GITBRANCH $REPO $srcdir 164 echo "Triggering fetch scripts" 165 ( cd $srcdir && sh ./gnu/dist/fetch.sh ) 166 ( cd $srcdir && sh ./external/gpl3/binutils/fetch.sh ) 167 if [ "$REVTAG" ] 168 then echo "Doing checkout of $REVTAG." 169 (cd $srcdir && git checkout $REVTAG ) 170 else REVTAG=`(cd $srcdir && git rev-parse --short HEAD)` 171 echo "Retrieved repository head in $srcdir is $REVTAG." 172 fi 173 if [ $MINIMAL -ne 0 ] 174 then rm -r $srcdir/.git 175 fi 176 echo " 177/* Added by release script */ 178#ifndef _VCS_REVISION 179#define _VCS_REVISION \"$REVTAG\" 180#endif" >>$CONFIGHEADER 181 DATE=`date +%Y%m%d` 182 # output image name 183 IMG=${IMG_BASE}_${DATE}_${REVTAG}.iso 184else 185 echo "First cleaning current sourcedir.." 186 ( cd .. && make cleandir >/dev/null ) 187 echo "Copying contents from current src dir." 188 srcdir=/usr/$SRC 189 ( cd $srcdir && tar --exclude .git -cf - . ) | ( cd $RELEASEDIR/usr && mkdir $SRC && cd $SRC && tar xf - ) 190 echo "Copying done." 191 REVTAG=copy 192 IMG=${IMG_BASE}_copy.iso 193fi 194 195# Make sure the CD knows it's a CD, unless it's not 196date >$RELEASEDIR/CD 197 198rm -f $RELEASEDIR/usr/$SRC/releasetools/revision 199 200for p in $PREINSTALLED_PACKAGES 201do echo " * Pre-installing: $p from $PACKAGEURL" 202 $PKG_ADD -f -P $RELEASEDIR $PACKAGEURL/$p 203done 204 205if [ "$CUSTOM_PACKAGES" ] 206then echo $PACKAGEURL >$RELEASEDIR/usr/pkg/etc/pkgin/repositories.conf 207fi 208 209echo " * Resetting timestamps" 210find $RELEASEDIR -print0 | xargs -n1000 -0 touch 211 212########################################################################## 213echo " * Build" 214########################################################################## 215 216cd $RELEASEDIR/usr/src 217make distribution MKLIBCXX=yes DESTDIR=$RELEASEDIR SLOPPY_FLIST=yes $BUILDOPTIONS 218make -C releasetools do-hdboot DESTDIR=$RELEASEDIR MKINSTALLBOOT=yes 219cp $RELEASEDIR/usr/mdec/boot_monitor $RELEASEDIR 220cp $RELEASEDIR/boot/minix_latest/* $RELEASEDIR/boot/minix_default/ 221 222if [ $MAKEMAP -ne 0 ]; then 223 find . -type f -perm 755 | xargs nm -n 2> /dev/null > symbols.txt 224fi 225make cleandir 226 227cd - 228 229echo " * build done" 230 231########################################################################## 232echo " * Removing bootstrap files" 233########################################################################## 234# The build process leaves some file in $SRC as bin. 235chown -R root $RELEASEDIR/usr/src* 236cp issue.install $RELEASEDIR/etc/issue 237 238echo $version_pretty, GIT revision $REVTAG, generated `date` >$RELEASEDIR/etc/version 239rm -rf $RELEASEDIR/tmp/* 240 241if [ $MINIMAL -ne 0 ] 242then 243 if [ "$MAKEMAP" -ne 0 ] 244 then 245 echo " * Copying symbol map to ${IMG}-symbols.txt" 246 cp $RELEASEDIR/usr/src/symbols.txt ${IMG}-symbols.txt 247 $ZIP -f ${IMG}-symbols.txt 248 fi 249 250 echo " * Removing files to create minimal image" 251 rm -rf $RELEASEDIR/usr/man/man*/* \ 252 $RELEASEDIR/usr/share/zoneinfo* $RELEASEDIR/usr/src 253 mkdir -p $RELEASEDIR/usr/src/releasetools 254fi 255 256if [ $EXTRAS_INSTALL -ne 0 ] ; then 257 echo " * Copying files from $EXTRAS_PATH" 258 cp -Rv $EXTRAS_PATH/* $RELEASEDIR 259fi 260 261echo " * Removing sources" 262 263rm -rf $RELEASEDIR/usr/src # No space for /usr/src 264rm -f $RELEASEDIR/SETS.* # No need for those. 265 266# If we are making a jail, all is done! 267if [ $JAILMODE = 1 ] 268then echo "Created new minix install in $RELEASEDIR." 269 echo "Enter it by typing: " 270 echo "# chroot $RELEASEDIR /bin/sh" 271 exit 0 272fi 273 274########################################################################## 275echo " * Counting files" 276########################################################################## 277extrakb=`du -ks $RELEASEDIR/usr/install | awk '{ print $1 }'` 278find $RELEASEDIR/usr | fgrep -v /install/ | wc -l >$RELEASEDIR/.usrfiles 279find $RELEASEDIR -print -path $RELEASEDIR/usr -prune | wc -l >$RELEASEDIR/.rootfiles 280 281########################################################################## 282echo " * Mounting $TMPDISKROOT as $RELEASEMNTDIR" 283########################################################################## 284fitfs $RELEASEDIR $TMPDISKROOT 64 256 "$ROOTMB" 285ROOTBLOCKS=$blocks 286ROOTSECTS="`expr $blocks \* \( $BS / 512 \)`" 287mount $TMPDISKROOT $RELEASEMNTDIR || exit 288 289echo " * Mounting $TMPDISKUSR as $RELEASEMNTDIR/usr" 290fitfs $RELEASEDIR/usr $TMPDISKUSR 0 0 "$USRMB" 291USRBLOCKS=$blocks 292USRSECTS="`expr $blocks \* \( $BS / 512 \)`" 293mkdir -m 755 $RELEASEMNTDIR/usr 294mount $TMPDISKUSR $RELEASEMNTDIR/usr || exit 295 296########################################################################## 297echo " * Copying files from staging to image" 298########################################################################## 299synctree -f $RELEASEDIR $RELEASEMNTDIR > /dev/null || true 300expr `df -kP $TMPDISKUSR | tail -1 | awk '{ print $3 }'` - $extrakb >$RELEASEMNTDIR/.usrkb 301 302echo " * Unmounting $TMPDISKUSR from $RELEASEMNTDIR/usr" 303umount $TMPDISKUSR || exit 304 305echo " * Making image bootable" 306cd_root_changes 307 308echo " * Unmounting $TMPDISKROOT from $RELEASEMNTDIR" 309umount $TMPDISKROOT || exit 310rm -r $RELEASEMNTDIR 311 312########################################################################## 313echo " * Generating image files" 314########################################################################## 315dd if=$TMPDISKROOT of=$ROOTIMAGE bs=$BS count=$ROOTBLOCKS 316cp release/cd/* $CDFILES || true 317echo "This is Minix version $version_pretty prepared `date`." >$CDFILES/VERSION.TXT 318 319boottype=-n 320bootimage=$IMAGE 321 322cp $RELEASEDIR/usr/mdec/boot_monitor $CDFILES/boot 323cp -rf $RELEASEDIR/boot/minix_latest/* $CDFILES/ 324gzip -d $CDFILES/*gz 325writeisofs -s0x0 -l MINIX -B $bootimage $boottype $CDFILES $IMG || exit 1 326 327echo "Appending Minix root and usr filesystem" 328# Pad ISO out to cylinder boundary 329isobytes=`stat -f %z $IMG` 330isosects=`expr $isobytes / 512` 331isopad=`expr $secs - '(' $isosects % $secs ')'` 332dd if=/dev/zero count=$isopad >>$IMG 333# number of sectors 334isosects=`expr $isosects + $isopad` 335( cat $IMG $ROOTIMAGE ; 336 dd if=$TMPDISKUSR bs=$BS count=$USRBLOCKS ) >m 337mv m $IMG 338# Make CD partition table 339installboot_nbsd -m $IMG /usr/mdec/mbr 340# Make sure there is no hole..! Otherwise the ISO format is 341# unreadable. 342partition -m $IMG 0 81:$isosects 81:$ROOTSECTS 81:$USRSECTS 343 344# Clean up: RELEASEDIR no longer needed 345rm -r $RELEASEDIR 346 347if [ "$FILENAMEOUT" ] 348then echo "$IMG" >$FILENAMEOUT 349fi 350 351########################################################################## 352echo " * Freeing up memory used by ramdisks" 353########################################################################## 354ramdisk 1 $TMPDISKROOT 355ramdisk 1 $TMPDISKUSR 356