nanobsd.sh revision 150717
1148422Sphk#!/bin/sh 2150366Sphk# 3148422Sphk# Copyright (c) 2005 Poul-Henning Kamp. 4150366Sphk# All rights reserved. 5148422Sphk# 6150366Sphk# Redistribution and use in source and binary forms, with or without 7150366Sphk# modification, are permitted provided that the following conditions 8150366Sphk# are met: 9150366Sphk# 1. Redistributions of source code must retain the above copyright 10150366Sphk# notice, this list of conditions and the following disclaimer. 11150366Sphk# 2. Redistributions in binary form must reproduce the above copyright 12150366Sphk# notice, this list of conditions and the following disclaimer in the 13150366Sphk# documentation and/or other materials provided with the distribution. 14148422Sphk# 15150366Sphk# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16150366Sphk# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17150366Sphk# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18150366Sphk# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19150366Sphk# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20150366Sphk# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21150366Sphk# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22150366Sphk# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23150366Sphk# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24150366Sphk# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25150366Sphk# SUCH DAMAGE. 26150366Sphk# 27148422Sphk# $FreeBSD: head/tools/tools/nanobsd/nanobsd.sh 150717 2005-09-29 16:06:59Z phk $ 28148422Sphk# 29148422Sphk 30148422Sphkset -e 31148422Sphk 32150366Sphk####################################################################### 33150366Sphk# 34150366Sphk# Setup default values for all controlling variables. 35150366Sphk# These values can be overridden from the config file(s) 36150366Sphk# 37150366Sphk####################################################################### 38150366Sphk 39148422Sphk# Name of this NanoBSD build. (Used to construct workdir names) 40148422SphkNANO_NAME=full 41148422Sphk 42148422Sphk# Source tree directory 43148422SphkNANO_SRC=/usr/src 44148422Sphk 45150366Sphk# Where nanobsd additional files live under the source tree 46150366SphkNANO_TOOLS=tools/tools/nanobsd 47150366Sphk 48148422Sphk# Object tree directory 49148422Sphk# default is subdir of /usr/obj 50148422Sphk# XXX: MAKEOBJDIRPREFIX handling... ? 51148648Sphk#NANO_OBJ="" 52148422Sphk 53148422Sphk# Parallel Make 54148422SphkNANO_PMAKE="make -j 3" 55148422Sphk 56148422Sphk# Options to put in make.conf during buildworld only 57148422SphkCONF_BUILD=' ' 58148422Sphk 59148422Sphk# Options to put in make.conf during installworld only 60148422SphkCONF_INSTALL=' ' 61148422Sphk 62148422Sphk# Options to put in make.conf during both build- & installworld. 63148422SphkCONF_WORLD=' ' 64148422Sphk 65148422Sphk# Kernel config file to use 66148422SphkNANO_KERNEL=GENERIC 67148422Sphk 68149073Sphk# Customize commands. 69149073SphkNANO_CUSTOMIZE="" 70149073Sphk 71148648Sphk# Newfs paramters to use 72148648SphkNANO_NEWFS="-b 4096 -f 512 -i 8192 -O1 -U" 73148648Sphk 74149082Sphk# The drive name of the media at runtime 75149082SphkNANO_DRIVE=ad0 76149082Sphk 77148648Sphk# Target media size in 512 bytes sectors 78149120SphkNANO_MEDIASIZE=1048576 79148648Sphk 80148648Sphk# Number of code images on media (1 or 2) 81148422SphkNANO_IMAGES=2 82148648Sphk 83149535Ssimon# Size of code file system in 512 bytes sectors 84149120Sphk# If zero, size will be as large as possible. 85149120SphkNANO_CODESIZE=0 86149120Sphk 87149120Sphk# Size of configuration file system in 512 bytes sectors 88149120Sphk# Cannot be zero. 89148422SphkNANO_CONFSIZE=2048 90148648Sphk 91148648Sphk# Size of data file system in 512 bytes sectors 92149120Sphk# If zero: no partition configured. 93149120Sphk# If negative: max size possible 94149120SphkNANO_DATASIZE=0 95148422Sphk 96148422Sphk# Media geometry, only relevant if bios doesn't understand LBA. 97148422SphkNANO_SECTS=32 98148422SphkNANO_HEADS=16 99148422Sphk 100148422Sphk####################################################################### 101148648Sphk# Not a variable at this time 102148648Sphk 103148648SphkNANO_ARCH=i386 104148648Sphk 105148648Sphk####################################################################### 106150366Sphk# 107150366Sphk# The functions which do the real work. 108150366Sphk# Can be overridden from the config file(s) 109150366Sphk# 110150366Sphk####################################################################### 111148422Sphk 112149120Sphkclean_build ( ) ( 113148422Sphk echo "## Clean and create object directory (${MAKEOBJDIRPREFIX})" 114148422Sphk 115148422Sphk if rm -rf ${MAKEOBJDIRPREFIX} > /dev/null 2>&1 ; then 116148422Sphk true 117148422Sphk else 118148422Sphk chflags -R noschg ${MAKEOBJDIRPREFIX} 119148422Sphk rm -rf ${MAKEOBJDIRPREFIX} 120148422Sphk fi 121148422Sphk mkdir -p ${MAKEOBJDIRPREFIX} 122150343Sphk printenv > ${MAKEOBJDIRPREFIX}/_.env 123148422Sphk) 124148422Sphk 125148422Sphkmake_conf_build ( ) ( 126148422Sphk echo "## Construct build make.conf ($NANO_MAKE_CONF)" 127148422Sphk 128148648Sphk echo "${CONF_WORLD}" > ${NANO_MAKE_CONF} 129148648Sphk echo "${CONF_BUILD}" >> ${NANO_MAKE_CONF} 130148422Sphk) 131148422Sphk 132148422Sphkbuild_world ( ) ( 133148422Sphk echo "## run buildworld" 134148422Sphk echo "### log: ${MAKEOBJDIRPREFIX}/_.bw" 135148422Sphk 136148422Sphk cd ${NANO_SRC} 137148422Sphk ${NANO_PMAKE} __MAKE_CONF=${NANO_MAKE_CONF} buildworld \ 138148422Sphk > ${MAKEOBJDIRPREFIX}/_.bw 2>&1 139148422Sphk) 140148422Sphk 141148422Sphkbuild_kernel ( ) ( 142150321Sphk echo "## build kernel ($NANO_KERNEL)" 143148422Sphk echo "### log: ${MAKEOBJDIRPREFIX}/_.bk" 144148422Sphk 145148422Sphk if [ -f ${NANO_KERNEL} ] ; then 146148422Sphk cp ${NANO_KERNEL} ${NANO_SRC}/sys/${NANO_ARCH}/conf 147148422Sphk fi 148148422Sphk 149148422Sphk cd ${NANO_SRC} 150148422Sphk ${NANO_PMAKE} buildkernel \ 151148422Sphk __MAKE_CONF=${NANO_MAKE_CONF} KERNCONF=${NANO_KERNEL} \ 152148422Sphk > ${MAKEOBJDIRPREFIX}/_.bk 2>&1 153148422Sphk) 154148422Sphk 155148422Sphkclean_world ( ) ( 156148422Sphk echo "## Clean and create world directory (${NANO_WORLDDIR})" 157148422Sphk if rm -rf ${NANO_WORLDDIR}/ > /dev/null 2>&1 ; then 158148422Sphk true 159148422Sphk else 160148422Sphk chflags -R noschg ${NANO_WORLDDIR}/ 161148422Sphk rm -rf ${NANO_WORLDDIR}/ 162148422Sphk fi 163148422Sphk mkdir -p ${NANO_WORLDDIR}/ 164148422Sphk) 165148422Sphk 166148422Sphkmake_conf_install ( ) ( 167148422Sphk echo "## Construct install make.conf ($NANO_MAKE_CONF)" 168148422Sphk 169148648Sphk echo "${CONF_WORLD}" > ${NANO_MAKE_CONF} 170148648Sphk echo "${CONF_INSTALL}" >> ${NANO_MAKE_CONF} 171148422Sphk) 172148422Sphk 173148422Sphkinstall_world ( ) ( 174148422Sphk echo "## installworld" 175148422Sphk echo "### log: ${MAKEOBJDIRPREFIX}/_.iw" 176148422Sphk 177148422Sphk cd ${NANO_SRC} 178148422Sphk ${NANO_PMAKE} __MAKE_CONF=${NANO_MAKE_CONF} installworld \ 179148422Sphk DESTDIR=${NANO_WORLDDIR} \ 180148422Sphk > ${MAKEOBJDIRPREFIX}/_.iw 2>&1 181148422Sphk chflags -R noschg ${NANO_WORLDDIR} 182148422Sphk) 183148422Sphk 184148422Sphkinstall_etc ( ) ( 185148422Sphk 186148422Sphk echo "## install /etc" 187148422Sphk echo "### log: ${MAKEOBJDIRPREFIX}/_.etc" 188148422Sphk 189148422Sphk cd ${NANO_SRC}/etc 190148422Sphk ${NANO_PMAKE} __MAKE_CONF=${NANO_MAKE_CONF} distribution \ 191148422Sphk DESTDIR=${NANO_WORLDDIR} \ 192148422Sphk > ${MAKEOBJDIRPREFIX}/_.etc 2>&1 193148422Sphk) 194148422Sphk 195148422Sphkinstall_kernel ( ) ( 196148422Sphk echo "## install kernel" 197148422Sphk echo "### log: ${MAKEOBJDIRPREFIX}/_.ik" 198148422Sphk 199148422Sphk cd ${NANO_SRC} 200148422Sphk ${NANO_PMAKE} installkernel \ 201148422Sphk DESTDIR=${NANO_WORLDDIR} \ 202148422Sphk __MAKE_CONF=${NANO_MAKE_CONF} KERNCONF=${NANO_KERNEL} \ 203148422Sphk > ${MAKEOBJDIRPREFIX}/_.ik 2>&1 204148422Sphk) 205148422Sphk 206150366Sphkrun_customize() ( 207150366Sphk 208150366Sphk echo "## run customize scripts" 209150366Sphk for c in $NANO_CUSTOMIZE 210150366Sphk do 211150366Sphk echo "## customize \"$c\"" 212150366Sphk echo "### log: ${MAKEOBJDIRPREFIX}/_.cust.$c" 213150366Sphk echo "### `type $c`" 214150366Sphk ( $c ) > ${MAKEOBJDIRPREFIX}/_.cust.$c 2>&1 215150366Sphk done 216150366Sphk) 217150366Sphk 218150366Sphksetup_nanobsd ( ) ( 219150366Sphk echo "## configure nanobsd setup" 220149103Sphk echo "### log: ${MAKEOBJDIRPREFIX}/_.dl" 221148422Sphk 222149103Sphk ( 223148422Sphk cd ${NANO_WORLDDIR} 224148422Sphk 225148422Sphk # create diskless marker file 226148422Sphk touch etc/diskless 227148422Sphk 228150366Sphk # save config file for scripts 229150366Sphk echo "NANO_DRIVE=${NANO_DRIVE}" > etc/nanobsd.conf 230150366Sphk 231150328Sphk echo "/dev/${NANO_DRIVE}s1a / ufs ro 1 1" > etc/fstab 232150366Sphk echo "/dev/${NANO_DRIVE}s3 /cfg ufs rw,noauto 2 2" >> etc/fstab 233150366Sphk mkdir -p cfg 234150328Sphk 235149082Sphk for d in var etc 236149082Sphk do 237149082Sphk # link /$d under /conf 238149082Sphk # we use hard links so we have them both places. 239149082Sphk # the files in /$d will be hidden by the mount. 240149082Sphk # XXX: configure /$d ramdisk size 241149082Sphk mkdir -p conf/base/$d conf/default/$d 242149082Sphk find $d -print | cpio -dumpl conf/base/ 243149082Sphk done 244148422Sphk 245148422Sphk # pick up config files from the special partition 246149082Sphk echo "mount -o ro /dev/${NANO_DRIVE}s3" > conf/default/etc/remount 247148422Sphk 248149082Sphk # Put /tmp on the /var ramdisk (could be symlink already) 249149082Sphk rmdir tmp || true 250149082Sphk rm tmp || true 251148422Sphk ln -s var/tmp tmp 252149082Sphk 253149103Sphk ) > ${MAKEOBJDIRPREFIX}/_.dl 2>&1 254148422Sphk) 255148422Sphk 256149014Sphkprune_usr() ( 257149014Sphk 258149014Sphk # Remove all empty directories in /usr 259149014Sphk find ${NANO_WORLDDIR}/usr -type d -depth -print | 260149014Sphk while read d 261149014Sphk do 262149014Sphk rmdir $d > /dev/null 2>&1 || true 263149014Sphk done 264149014Sphk) 265149014Sphk 266148422Sphkcreate_i386_diskimage ( ) ( 267149103Sphk echo "## build diskimage" 268149103Sphk echo "### log: ${MAKEOBJDIRPREFIX}/_.di" 269148422Sphk 270149103Sphk ( 271149120Sphk echo $NANO_MEDIASIZE $NANO_IMAGES \ 272149120Sphk $NANO_SECTS $NANO_HEADS \ 273149120Sphk $NANO_CODESIZE $NANO_CONFSIZE $NANO_DATASIZE | 274148422Sphk awk ' 275150717Sphk { 276149120Sphk printf "# %s\n", $0 277149120Sphk 278148422Sphk # size of cylinder in sectors 279149120Sphk cs = $3 * $4 280148422Sphk 281148422Sphk # number of full cylinders on media 282148422Sphk cyl = int ($1 / cs) 283148422Sphk 284149120Sphk # output fdisk geometry spec, truncate cyls to 1023 285148422Sphk if (cyl <= 1023) 286149120Sphk print "g c" cyl " h" $4 " s" $3 287148422Sphk else 288149120Sphk print "g c" 1023 " h" $4 " s" $3 289148422Sphk 290149120Sphk if ($7 > 0) { 291149120Sphk # size of data partition in full cylinders 292149120Sphk dsl = int (($7 + cs - 1) / cs) 293149120Sphk } else { 294149120Sphk dsl = 0; 295149120Sphk } 296148422Sphk 297148422Sphk # size of config partition in full cylinders 298149120Sphk csl = int (($6 + cs - 1) / cs) 299148422Sphk 300150717Sphk if ($5 == 0) { 301149120Sphk # size of image partition(s) in full cylinders 302149120Sphk isl = int ((cyl - dsl - csl) / $2) 303149120Sphk } else { 304149120Sphk isl = int (($5 + cs - 1) / cs) 305149120Sphk } 306148422Sphk 307148422Sphk # First image partition start at second track 308149120Sphk print "p 1 165 " $3, isl * cs - $3 309148422Sphk c = isl * cs; 310148422Sphk 311148422Sphk # Second image partition (if any) also starts offset one 312148422Sphk # track to keep them identical. 313148422Sphk if ($2 > 1) { 314149120Sphk print "p 2 165 " $3 + c, isl * cs - $3 315148422Sphk c += isl * cs; 316148422Sphk } 317148422Sphk 318148422Sphk # Config partition starts at cylinder boundary. 319148422Sphk print "p 3 165 " c, csl * cs 320148422Sphk c += csl * cs 321148422Sphk 322148422Sphk # Data partition (if any) starts at cylinder boundary. 323149120Sphk if ($7 > 0) { 324148422Sphk print "p 4 165 " c, dsl * cs 325149120Sphk } else if ($7 < 0 && $1 > $c) { 326149120Sphk print "p 4 165 " c, $1 - $c 327150717Sphk } else if ($1 < c) { 328150717Sphk print "Disk space overcommitted by", \ 329150717Sphk c - $1, "sectors" > "/dev/stderr" 330150717Sphk exit 2 331148422Sphk } 332150717Sphk } 333148422Sphk ' > ${MAKEOBJDIRPREFIX}/_.fdisk 334148422Sphk 335148422Sphk IMG=${MAKEOBJDIRPREFIX}/_.disk.full 336148422Sphk MNT=${MAKEOBJDIRPREFIX}/_.mnt 337148422Sphk mkdir -p ${MNT} 338148422Sphk 339148422Sphk dd if=/dev/zero of=${IMG} bs=${NANO_SECTS}b \ 340149120Sphk count=`expr ${NANO_MEDIASIZE} / ${NANO_SECTS}` 341148422Sphk 342148422Sphk MD=`mdconfig -a -t vnode -f ${IMG} -x ${NANO_SECTS} -y ${NANO_HEADS}` 343148422Sphk 344149014Sphk trap "df -i ${MNT} ; umount ${MNT} || true ; mdconfig -d -u $MD" 1 2 15 EXIT 345148422Sphk 346148422Sphk fdisk -i -f ${MAKEOBJDIRPREFIX}/_.fdisk ${MD} 347149120Sphk fdisk ${MD} 348148422Sphk # XXX: params 349148422Sphk # XXX: pick up cached boot* files, they may not be in image anymore. 350148422Sphk boot0cfg -B -b ${NANO_WORLDDIR}/boot/boot0sio -o packet -s 1 -m 3 ${MD} 351148422Sphk bsdlabel -w -B ${MD}s1 352149120Sphk bsdlabel ${MD}s1 353148422Sphk 354148422Sphk # Create first image 355148648Sphk newfs ${NANO_NEWFS} /dev/${MD}s1a 356148422Sphk mount /dev/${MD}s1a ${MNT} 357149014Sphk df -i ${MNT} 358148422Sphk ( cd ${NANO_WORLDDIR} && find . -print | cpio -dump ${MNT} ) 359148422Sphk df -i ${MNT} 360148648Sphk ( cd ${MNT} && mtree -c ) > ${MAKEOBJDIRPREFIX}/_.mtree 361148648Sphk ( cd ${MNT} && du -k ) > ${MAKEOBJDIRPREFIX}/_.du 362148422Sphk umount ${MNT} 363148422Sphk 364148422Sphk if [ $NANO_IMAGES -gt 1 ] ; then 365148422Sphk # Duplicate to second image (if present) 366148422Sphk dd if=/dev/${MD}s1 of=/dev/${MD}s2 bs=64k 367148422Sphk fi 368148422Sphk 369148422Sphk # Create Config slice 370148648Sphk newfs ${NANO_NEWFS} /dev/${MD}s3 371148422Sphk # XXX: fill from where ? 372148422Sphk 373148422Sphk # Create Data slice, if any. 374148422Sphk if [ $NANO_DATASIZE -gt 0 ] ; then 375148648Sphk newfs ${NANO_NEWFS} /dev/${MD}s4 376148422Sphk # XXX: fill from where ? 377148422Sphk fi 378148422Sphk 379148422Sphk dd if=/dev/${MD}s1 of=${MAKEOBJDIRPREFIX}/_.disk.image bs=64k 380148422Sphk mdconfig -d -u $MD 381149103Sphk ) > ${MAKEOBJDIRPREFIX}/_.di 2>&1 382148422Sphk) 383148422Sphk 384148422Sphk####################################################################### 385148422Sphk# 386150366Sphk# Optional convenience functions. 387148422Sphk# 388148422Sphk####################################################################### 389148422Sphk 390149014Sphk####################################################################### 391150367Sphk# Common Flash device geometries 392150367Sphk# 393150367Sphk 394150367SphkFlashDevice () { 395150717Sphk if [ -d ${NANO_TOOLS} ] ; then 396150717Sphk . ${NANO_TOOLS}/FlashDevice.sub 397150717Sphk else 398150717Sphk . ${NANO_SRC}/${NANO_TOOLS}/FlashDevice.sub 399150717Sphk fi 400150367Sphk sub_FlashDevice $1 $2 401150367Sphk} 402150367Sphk 403150367Sphk 404150367Sphk####################################################################### 405150366Sphk# Setup serial console 406150343Sphk 407150366Sphkcust_comconsole () ( 408150366Sphk # Enable getty on console 409150366Sphk sed -i "" -e /ttyd0/s/off/on/ ${NANO_WORLDDIR}/etc/ttys 410150366Sphk 411150366Sphk # Disable getty on syscons devices 412150366Sphk sed -i "" -e '/^ttyv[0-8]/s/ on/ off/' ${NANO_WORLDDIR}/etc/ttys 413150366Sphk 414150366Sphk # Tell loader to use serial console early. 415150366Sphk echo " -h" > ${NANO_WORLDDIR}/boot.config 416150366Sphk) 417150366Sphk 418150366Sphk####################################################################### 419150366Sphk# Allow root login via ssh 420150366Sphk 421150366Sphkcust_allow_ssh_root () ( 422150366Sphk sed -i "" -e '/PermitRootLogin/s/.*/PermitRootLogin yes/' \ 423150366Sphk ${NANO_WORLDDIR}/etc/ssh/sshd_config 424150366Sphk) 425150366Sphk 426150366Sphk####################################################################### 427150366Sphk# Install the stuff under ./Files 428150366Sphk 429150366Sphkcust_install_files () ( 430150511Ssimon cd ${NANO_TOOLS}/Files 431150366Sphk find . -print | grep -v /CVS | cpio -dumpv ${NANO_WORLDDIR} 432150366Sphk) 433150366Sphk 434150366Sphk####################################################################### 435150366Sphk# Convenience function: 436150366Sphk# Register $1 as customize function. 437150366Sphk 438150343Sphkcustomize_cmd () { 439150343Sphk NANO_CUSTOMIZE="$NANO_CUSTOMIZE $1" 440150343Sphk} 441150343Sphk 442150343Sphk####################################################################### 443150366Sphk# 444150366Sphk# All set up to go... 445150366Sphk# 446150366Sphk####################################################################### 447150366Sphk 448150366Sphk####################################################################### 449149014Sphk# Parse arguments 450148422Sphk 451150366Sphkdo_build=true 452150366Sphk 453150366Sphkargs=`getopt bc:h $*` 454149014Sphkif [ $? -ne 0 ] ; then 455149014Sphk echo "Usage: $0 [-c config file]" 1>&2 456149014Sphk exit 2 457149014Sphkfi 458149014Sphk 459149014Sphkset -- $args 460149014Sphkfor i 461149014Sphkdo 462149014Sphk case "$i" 463149014Sphk in 464150366Sphk -b) 465150366Sphk shift; 466150366Sphk do_build=false 467150366Sphk ;; 468149014Sphk -c) 469149014Sphk . "$2" 470149014Sphk shift; 471149014Sphk shift; 472149014Sphk ;; 473150366Sphk -h) 474150366Sphk echo "Usage: $0 [-b] [-c config file]" 475150366Sphk exit 2 476150366Sphk ;; 477149014Sphk --) 478149014Sphk shift; 479149014Sphk break; 480149014Sphk esac 481149014Sphkdone 482149014Sphk 483150366Sphkif [ $# -gt 0 ] ; then 484150366Sphk echo "Extraneous arguments" 485150366Sphk exit 2 486150366Sphkfi 487150366Sphk 488148422Sphk####################################################################### 489150366Sphk# Setup and Export Internal variables 490150366Sphk# 491148422Sphkif [ "x${NANO_OBJ}" = "x" ] ; then 492148422Sphk MAKEOBJDIRPREFIX=/usr/obj/nanobsd.${NANO_NAME}/ 493149073Sphk NANO_OBJ=${MAKEOBJDIRPREFIX} 494148422Sphkelse 495148422Sphk MAKEOBJDIRPREFIX=${NANO_OBJ} 496148422Sphkfi 497148422Sphk 498148422SphkNANO_WORLDDIR=${MAKEOBJDIRPREFIX}/_.w 499148422SphkNANO_MAKE_CONF=${MAKEOBJDIRPREFIX}/make.conf 500148422Sphk 501150511Ssimonif [ -d ${NANO_TOOLS} ] ; then 502150511Ssimon true 503150511Ssimonelif [ -d ${NANO_SRC}/${NANO_TOOLS} ] ; then 504150511Ssimon NANO_TOOLS=${NANO_SRC}/${NANO_TOOLS} 505150511Ssimonelse 506150511Ssimon echo "NANO_TOOLS directory does not exist" 1>&2 507150511Ssimon exit 1 508150511Ssimonfi 509150511Ssimon 510148422Sphkexport MAKEOBJDIRPREFIX 511148422Sphk 512148422Sphkexport NANO_ARCH 513149120Sphkexport NANO_CODESIZE 514148422Sphkexport NANO_CONFSIZE 515149073Sphkexport NANO_CUSTOMIZE 516148422Sphkexport NANO_DATASIZE 517149082Sphkexport NANO_DRIVE 518148422Sphkexport NANO_HEADS 519148648Sphkexport NANO_IMAGES 520148648Sphkexport NANO_MAKE_CONF 521149120Sphkexport NANO_MEDIASIZE 522148648Sphkexport NANO_NAME 523148648Sphkexport NANO_NEWFS 524148648Sphkexport NANO_OBJ 525148422Sphkexport NANO_PMAKE 526148648Sphkexport NANO_SECTS 527148422Sphkexport NANO_SRC 528150366Sphkexport NANO_TOOLS 529148648Sphkexport NANO_WORLDDIR 530148422Sphk 531148422Sphk####################################################################### 532150366Sphk# And then it is as simple as that... 533148422Sphk 534150366Sphkif $do_build ; then 535150366Sphk clean_build 536150366Sphk make_conf_build 537150366Sphk build_world 538150366Sphk build_kernel 539150366Sphkelse 540150366Sphk echo "## Skipping build steps (as instructed)" 541150366Sphkfi 542149120Sphk 543149120Sphkclean_world 544149082Sphkmake_conf_install 545148422Sphkinstall_world 546148422Sphkinstall_etc 547148422Sphkinstall_kernel 548149120Sphk 549149082Sphkrun_customize 550150366Sphksetup_nanobsd 551149014Sphkprune_usr 552148648Sphkcreate_${NANO_ARCH}_diskimage 553149120Sphk 554149120Sphkecho "# NanoBSD image completed" 555