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