1162485Sjulian#!/bin/sh - 2162485Sjulian# Copyright (c) 2006 Jean Milanez Melo <jmelo@freebsdbrasil.com.br> 3162485Sjulian# <jmelo@FreeBSD.org> 4162485Sjulian# Patrick Tracanelli <eksffa@freebsdbrasil.com.br> 5162485Sjulian# 6162485Sjulian# $FreeBSD$ 7162485Sjulian#set -xv 8162485SjulianCURRENTDIR=/usr/src/tools/tools/tinybsd 9163253Sjulianif [ ! -d $CURRENTDIR ] 10163253Sjulianthen 11163253Sjulian CURRENTDIR=`pwd` 12163254Sjulianelse 13163254Sjulian cd $CURRENTDIR 14163253Sjulianfi 15176934Sremko 16162485SjulianWORKDIR=/usr/obj/tinybsdbuild 17162485SjulianKERNCONF=TINYBSD 18163806SjulianBASEFILE="tinybsd.basefiles" 19163854SjulianPORTSFILE="tinybsd.ports" 20163854SjulianPORTSDIR=/usr/ports 21162485SjulianDEFINSTARGS="-o 0 -g 0 -m 555" 22194558SremkoTINYARCH=$(uname -p) 23194558Sremko 24162485SjulianTS="=====>" 25162485Sjulian 26163017Sjuliansplitarg1 () { 27163017Sjulian local IFS 28163017Sjulian IFS='=' 29163017Sjulian set $1 30163017Sjulian echo $1 31163017Sjulian} 32162485Sjulian 33163017Sjuliansplitarg2 () { 34163017Sjulian local IFS 35163017Sjulian IFS='=' 36163017Sjulian set $1 37163017Sjulian echo $2 38163017Sjulian} 39162485Sjulian 40163017Sjuliangetargs () { 41163017Sjulian ARGS="$*" 42163017Sjulian for arg in $* 43163017Sjulian do 44163017Sjulian ARG=`splitarg1 $arg` 45163017Sjulian VAL=`splitarg2 $arg` 46163017Sjulian case $ARG in 47163017Sjulian sectors) 48163017Sjulian SECTUNIT=$VAL 49163017Sjulian ;; 50163017Sjulian heads) 51163017Sjulian TRACKCYL=$VAL 52163017Sjulian ;; 53163017Sjulian spt) 54163017Sjulian SECTRACK=$VAL 55163017Sjulian ;; 56163017Sjulian conf) 57163017Sjulian CONF=$VAL 58163017Sjulian ;; 59163017Sjulian mfsroot) 60163017Sjulian MFSROOT=$VAL 61163017Sjulian ;; 62163017Sjulian image) 63163017Sjulian IMG=$VAL 64163017Sjulian ;; 65163017Sjulian batch) 66163017Sjulian NO_PROMPTS="YES" 67163017Sjulian ;; 68163017Sjulian new) 69163017Sjulian NO_READ="YES" 70163017Sjulian ;; 71163017Sjulian *) 72163017Sjulian usage 73163017Sjulian ;; 74163017Sjulian esac 75163017Sjulian done 76163017Sjulian} 77162485Sjulian 78163017Sjulianusage () { 79163017Sjulian echo "Woops 80163017Sjulian Usage: $0 sectors=<size of media> [80000] 81163017Sjulian heads=<heads according to firmware> [4] 82163017Sjulian spt=<sectors per track according to firmware> [32] 83163017Sjulian conf=<configuration name> (see conf/name) [default] 84163017Sjulian mfsroot[=<yes|no>] [no] 85163017Sjulian image=<tinybsd image name> [tinybsd.bin] 86163017Sjulian batch[=<anything>] (do not ask interactively) 87163017Sjulian new[=<anything>] (do not read previous values) 88162485Sjulian 89163017Sjulian Examples: 90163017Sjulian $0 sectors=65536 heads=8 spt=16 conf=wireless mfsroot=yes image=myimage.img batch 91162485Sjulian 92163017Sjulian Default values are set in the program. 93163017Sjulian Environment values override defaults. 94163017Sjulian Previous values override environment values but can be disabled. 95163017Sjulian Command arguments override previous values. 96163017Sjulian Interactive values override command arguments but can be disabled. 97163017Sjulian 98163017Sjulian Run diskinfo(8) -v against your CF device to get correct information 99163017Sjulian about your disk. USB keys do not need any specific geometry" 100163017Sjulian exit 1 101163017Sjulian} 102163017Sjulian 103163017Sjulian######## 104163017Sjulian# Load variables from stdin (could be a file) 105163017Sjulian# Look for lines that match foo=bar 106163017Sjulian# do not run the file.. that is asking for trouble 107163017Sjulian######## 108163017Sjulianloadvars () { 109163017Sjulian while : 110163017Sjulian do 111163017Sjulian OIFS=$IFS 112163017Sjulian IFS="=" 113163017Sjulian if read PART1 PART2 114163017Sjulian then 115163017Sjulian IFS="$OIFS" 116163017Sjulian case "$PART1" in 117163017Sjulian \#*) 118163017Sjulian ;; 119163017Sjulian "") 120163017Sjulian ;; 121163017Sjulian *) 122163017Sjulian set "${PART1}" 123163017Sjulian if [ $# = "1" ] 124163017Sjulian then 125163017Sjulian eval "${PART1}='${PART2}'" 126163017Sjulian fi 127163017Sjulian ;; 128163017Sjulian esac 129163017Sjulian else 130163017Sjulian IFS="$OIFS" 131163017Sjulian return 0 132163017Sjulian fi 133163017Sjulian done 134163017Sjulian} 135163017Sjulian 136163017Sjulian######## 137163017Sjulian# get values from the user 138163017Sjulian######## 139163017Sjulianconfirm_action(){ 140163017Sjulian local ANSWER 141163017Sjulian local MESSAGE 142163017Sjulian ANSWER=$1 143163017Sjulian MESSAGE=$2 144163017Sjulian if [ "$NO_PROMPTS" != "YES" ] 145163017Sjulian then 146163253Sjulian echo -n "$MESSAGE [$ANSWER] " > /dev/tty 147163017Sjulian read result 148163017Sjulian [ "$result" != "" ] && ANSWER=$result 149163017Sjulian fi 150163017Sjulian 151163017Sjulian ANSWER=`eval "echo $ANSWER"` 152163017Sjulian echo $ANSWER 153163017Sjulian} 154163017Sjulian 155163017Sjulian######## 156163017Sjulian# These are only used the VERY first time you run the program (on this machine) 157163017Sjulian######## 158163017Sjuliansetdefaults () { 159163017Sjulian NO_PROMPTS=${NO_PROMPTS:-NO} 160163017Sjulian NO_READ=${NO_READ:-NO} 161163017Sjulian SECTUNIT=${SECTUNIT:-80000}; export SECTUNIT 162163017Sjulian TRACKCYL=${TRACKCYL:-4}; export TRACKCYL 163163017Sjulian SECTRACK=${SECTRACK:-32}; export SECTRACK 164163017Sjulian CONF=${CONF:-default}; export CONF 165163017Sjulian MFSROOT=${MFSROOT:-NO}; export MFSROOT 166163017Sjulian IMG=${IMG:-tinybsd.bin}; export IMG 167163017Sjulian 168163017Sjulian} 169163017Sjulian 170163017Sjulian####### 171163017Sjulian# get ourselves set up. 172163017Sjulian# Partly by reading config files and partly from asking questions. 173163017Sjulian####### 174163017Sjulianloadconfig () { 175163017Sjulian if [ "${NO_READ}" = "YES" ] 176163017Sjulian then 177163017Sjulian return 178163017Sjulian fi 179163017Sjulian 180163017Sjulian HOSTNAME=`hostname` 181163017Sjulian HOSTPART=${HOSTNAME%%.*} 182163017Sjulian FILENAME=".tinybsd.${HOSTPART}.${USER}" 183163017Sjulian FULLFILENAME=$HOME/$FILENAME 184163017Sjulian 185163017Sjulian if [ -f ${FULLFILENAME} ] 186163017Sjulian then 187163017Sjulian loadvars <${FULLFILENAME} 188163017Sjulian fi 189163017Sjulian 190163017Sjulian SECTUNIT=`confirm_action "$SECTUNIT" "512 byte sectors per unit?"` 191163017Sjulian TRACKCYL=`confirm_action "$TRACKCYL" "Tracks per cylinder?"` 192163017Sjulian SECTRACK=`confirm_action "$SECTRACK" "Sectors per track?"` 193163253Sjulian while : 194163253Sjulian do 195163253Sjulian echo "The following configurations exist:" 196163253Sjulian ls -l conf|awk '/^d/{print " ",$9}'|grep -v CVS 197163253Sjulian CONF=`confirm_action "$CONF" "Configuration name?"` 198163253Sjulian if [ ! -d "${CURRENTDIR}/conf/$CONF" ] 199163253Sjulian then 200163253Sjulian echo "${TS} Error: Could not find config (${CONF})" 201163253Sjulian if [ "$NO_PROMPTS" = "YES" ] 202163253Sjulian then 203163253Sjulian exit 1 204163253Sjulian fi 205163253Sjulian else 206163253Sjulian break 207163253Sjulian fi 208163253Sjulian done 209163253Sjulian MFSROOT=`confirm_action "$MFSROOT" "Use an MFSROOT? (YES/NO)"` 210163017Sjulian IMG=`confirm_action "$IMG" "Image file to generate?"` 211163017Sjulian 212163017Sjulian# example of formatted value (NNN in this case) 213163017Sjulian# #condition and format the number 214163017Sjulian# if [ -z "${BUILDNUM}" ] 215163017Sjulian# then 216163017Sjulian# echo "Starting with build 001" 217163017Sjulian# BUILDNUM="001" 218163017Sjulian# else 219163017Sjulian# BUILDNUM=`printf "%03d\n" $(($BUILDNUM))` 220163017Sjulian# fi 221163017Sjulian 222163017Sjulian 223163017Sjulian} 224163017Sjulian 225163017Sjuliansaveconfig () { 226163017Sjulian HOSTNAME=`hostname` 227163017Sjulian HOSTPART=${HOSTNAME%%.*} 228163017Sjulian FILENAME=".tinybsd.${HOSTPART}.${USER}" 229163017Sjulian FULLFILENAME=$HOME/$FILENAME 230163017Sjulian ( 231163017Sjulian echo "# written by tinybsd" `date` 232163017Sjulian echo "SECTUNIT=${SECTUNIT}" 233163017Sjulian echo "TRACKCYL=${TRACKCYL}" 234163017Sjulian echo "SECTRACK=${SECTRACK}" 235163017Sjulian echo "CONF=${CONF}" 236163017Sjulian echo "MFSROOT=${MFSROOT:-NO}" 237163017Sjulian echo "IMG=${IMG}" 238163017Sjulian ) >${FULLFILENAME} 239163017Sjulian} 240163017Sjulian 241162485Sjuliancheck_alt_imgname() { 242163017Sjulian if [ ${IMG} = 'tinybsd.bin' ] 243162485Sjulian then 244162485Sjulian echo "${TS} Alternative image name not set; defaulting to 'tinybsd.bin'" 245162485Sjulian fi 246162485Sjulian} 247162485Sjulian 248163806Sjulianrotate_buidlog() { 249163806Sjulian mv -f ${HOME}/tinybsd.log ${HOME}/tinybsd.log.old 250163806Sjulian} 251163806Sjulian 252162485Sjulianremove_workdir() { 253177453Sremko # Before removing check if there is not a mount under $WORKDIR anymore 254177453Sremko MOUNT_CHECK=`mount|egrep "on ${WORKDIR}"` 255177453Sremko 256177453Sremko if [ ! -z "${MOUNT_CHECK}" ]; then 257177453Sremko echo "There are mounts under the workdir (${WORKDIR}). Please umount them before running this script" 258177453Sremko exit 1 259177453Sremko else 260177453Sremko chflags -R noschg ${WORKDIR} 261177453Sremko echo "${TS} Removing "${WORKDIR} 262177453Sremko rm -rf ${WORKDIR} 263177453Sremko echo "${TS} Removing Build Kernel Directory" 264177453Sremko rm -rf /usr/obj/usr/src/sys/${KERNCONF} 265177453Sremko echo "${TS} done." 266177453Sremko fi 267162485Sjulian} 268162485Sjulian 269162485Sjulian 270162485Sjulianprework() { 271163806Sjulian remove_workdir 272162485Sjulian mkdir -p ${WORKDIR} 273162485Sjulian} 274162485Sjulian 275162485Sjulian 276162485Sjuliancreate_tree() { 277162485Sjulian echo "${TS} Creating directory hierarchy... " 278162485Sjulian mtree -deU -f /etc/mtree/BSD.root.dist -p ${WORKDIR} 279171923Sremko mtree -deU -f /etc/mtree/BIND.chroot.dist -p ${WORKDIR} 280162485Sjulian mtree -deU -f /etc/mtree/BSD.usr.dist -p ${WORKDIR}/usr 281163806Sjulian mtree -deU -f /etc/mtree/BSD.local.dist -p ${WORKDIR}/usr/local 282162485Sjulian mtree -deU -f /etc/mtree/BSD.var.dist -p ${WORKDIR}/var 283162485Sjulian} 284162485Sjulian 285163806Sjuliancopy_binaries() { 286163806Sjulian cd ${CURRENTDIR}/conf/${CONF} 287162485Sjulian 288176934Sremko for file in `cat ${CURRENTDIR}/conf/${CONF}/${BASEFILE} | grep -v "#" | \ 289162485Sjulian cut -f1 -d":" | sort | uniq` ; do 290162485Sjulian echo "${TS} Copying "/${file}" to "${WORKDIR}/${file} 291162485Sjulian cp -fp /${file} ${WORKDIR}/${file} ; 292162485Sjulian done 293162485Sjulian} 294162485Sjulian 295163854Sjulianinstall_ports() { 296176934Sremko for portname in `cat ${CURRENTDIR}/conf/${CONF}/${PORTSFILE} | grep -v '#'` ; do 297176934Sremko if [ ! -d "${WORKDIR}/usr/ports" ]; then 298176934Sremko mkdir -p "${WORKDIR}/usr/ports" 299176934Sremko fi 300163854Sjulian 301176934Sremko PNAME=`/usr/bin/basename "${portname}"` 302176934Sremko PORT_OPTION_FILE="/var/db/ports/${PNAME}/options" 303176934Sremko 304176934Sremko if [ -f "${PORT_OPTION_FILE}" ]; then 305176934Sremko mkdir -p "${WORKDIR}/var/db/ports/${PNAME}" 306176934Sremko cp "${PORT_OPTION_FILE}" "${WORKDIR}/var/db/ports/${PNAME}/" 307176934Sremko fi 308176934Sremko 309176934Sremko mount_nullfs /lib "${WORKDIR}/lib" 310176934Sremko mount_nullfs /usr/bin "${WORKDIR}/usr/bin" 311176934Sremko mount_nullfs /usr/sbin "${WORKDIR}/usr/sbin" 312176934Sremko mount_nullfs /usr/ports "${WORKDIR}/usr/ports" 313176934Sremko mount_nullfs /usr/share "${WORKDIR}/usr/share" 314176934Sremko mount_nullfs /usr/libexec "${WORKDIR}/usr/libexec" 315176934Sremko mount_nullfs /usr/lib "${WORKDIR}/usr/lib" 316176934Sremko mount_nullfs /usr/include "${WORKDIR}/usr/include" 317176934Sremko 318176934Sremko cd ${PORTSDIR}/${portname} 319176934Sremko make fetch-recursive 320176934Sremko make DESTDIR_ENV_LIST=PATH DESTDIR="${WORKDIR}" install 321176934Sremko make clean 322176934Sremko 323176934Sremko umount "${WORKDIR}/lib" 324176934Sremko umount "${WORKDIR}/usr/ports" 325176934Sremko umount "${WORKDIR}/usr/bin" 326176934Sremko umount "${WORKDIR}/usr/sbin" 327176934Sremko umount "${WORKDIR}/usr/share" 328176934Sremko umount "${WORKDIR}/usr/libexec" 329176934Sremko umount "${WORKDIR}/usr/lib" 330176934Sremko umount "${WORKDIR}/usr/include" 331163854Sjulian done 332163854Sjulian} 333163854Sjulian 334162485Sjulianmake_kernel() { 335162485Sjulian echo "${TS} Building customized tiny beastie kernel... " 336194558Sremko cp -p ${CURRENTDIR}/conf/${CONF}/${KERNCONF} /usr/src/sys/${TINYARCH}/conf 337162485Sjulian cd /usr/src 338162485Sjulian make buildkernel KERNCONF=${KERNCONF} || exit 1 339162485Sjulian gzip -9 /usr/obj/usr/src/sys/${KERNCONF}/kernel 340162485Sjulian install ${DEFINSTARGS} /usr/obj/usr/src/sys/${KERNCONF}/kernel.gz ${WORKDIR}/boot/kernel/ 341162485Sjulian install ${DEFINSTARGS} \ 342162485Sjulian /usr/obj/usr/src/sys/${KERNCONF}/modules/usr/src/sys/modules/acpi/acpi/acpi.ko \ 343162485Sjulian ${WORKDIR}/boot/kernel 344194558Sremko install -o 0 -g 0 -m 444 /sys/${TINYARCH}/conf/GENERIC.hints ${WORKDIR}/boot/device.hints 345162485Sjulian} 346162485Sjulian 347162485Sjuliancopy_libraries() { 348162485Sjulian TDEPFILE="`mktemp -t deps`" 349162485Sjulian TDEPFILES="`mktemp -t depsymlnk`" 350162485Sjulian 351176934Sremko find "${WORKDIR}" -type f |while read file; do 352176934Sremko ldd -f "%p\n" ${file} >> ${TDEPFILE} ; # don't worry on progs been "not dynamic" 353162485Sjulian done 354162485Sjulian 355162485Sjulian for libdeplib in `cat ${TDEPFILE} | sort | uniq`; do 356162485Sjulian ldd -f "%p\n" /${libdeplib} >> ${TDEPFILE} ; 357162485Sjulian done 358163854Sjulian 359162485Sjulian for pamdep in `ls -1 /usr/lib/pam*`; do 360162485Sjulian echo $pamdep >> ${TDEPFILE} ; 361162485Sjulian ldd -f "%p\n" /${pamdep} >> ${TDEPFILE} ; 362162485Sjulian done 363163806Sjulian 364162485Sjulian for lib in `cat ${TDEPFILE} | sort | uniq`; do 365162485Sjulian echo "${TS} Copying "${lib}" to "${WORKDIR}${lib} 366162485Sjulian cp -fp ${lib} ${WORKDIR}${lib} ; 367162485Sjulian done 368162485Sjulian 369162485Sjulian for depsymlink in `cat ${TDEPFILE}`; do 370162485Sjulian echo "${TS} Checking if ${depsymlink} is a symbolic link" 371162485Sjulian /bin/ls -l $depsymlink | grep "\->" | awk '{print $11":"$9}' >> ${TDEPFILES} 372162485Sjulian done 373162485Sjulian 374162485Sjulian for i in `cat ${TDEPFILES}`; do 375162485Sjulian SOURCE_FILE=`echo $i | awk -F ":" '{print $1}'` 376162485Sjulian TARGET_FILE=`echo $i | awk -F ":" '{print $2}'` 377162485Sjulian 378162485Sjulian echo "${TS} Unlinking ${WORKDIR}${TARGET_FILE}" 379163806Sjulian chroot ${WORKDIR} /bin/chflags 0 ${TARGET_FILE} 380162485Sjulian chroot ${WORKDIR} /bin/rm -f ${TARGET_FILE} 381162485Sjulian 382162485Sjulian echo "${TS} Symlinking ${SOURCE_FILE} to ${TARGET_FILE}" 383162485Sjulian chroot ${WORKDIR} /bin/ln -s ${SOURCE_FILE} ${TARGET_FILE} 384162485Sjulian done 385162485Sjulian 386162485Sjulian echo -n "${TS} Unlinking " 387162485Sjulian rm -fv ${TDEPFILE} ${TDEPFILES} 388162485Sjulian} 389162485Sjulian 390162485Sjuliancreate_etc() { 391162485Sjulian cd /usr/src/etc/sendmail/ 392162485Sjulian make freebsd.cf freebsd.submit.cf 393162485Sjulian 394162485Sjulian cd /usr/src/etc/ 395162485Sjulian mkdir -p ${WORKDIR}/var/named/etc/namedb 396199812Sjulian make distribution DESTDIR=${WORKDIR} || exit 1 397162485Sjulian} 398162485Sjulian 399163017Sjuliancreate_ssh_keys() { 400163017Sjulian echo "Creating ssh keys..." 401163017Sjulian ssh-keygen -t rsa1 -b 1024 -f ${WORKDIR}/etc/ssh/ssh_host_key -N '' 402163017Sjulian ssh-keygen -t dsa -f ${WORKDIR}/etc/ssh/ssh_host_dsa_key -N '' 403163017Sjulian ssh-keygen -t rsa -f ${WORKDIR}/etc/ssh/ssh_host_rsa_key -N '' 404163017Sjulian} 405163017Sjulian 406163806Sjulianpersonal_conf() { 407162485Sjulian echo "${TS} Copying your custom configuration on conf/ ..." 408163806Sjulian for custom in `find ${CURRENTDIR}/conf/${CONF}/ -type d -depth 1 \! -name CVS`; do 409162485Sjulian cp -Rp ${custom}/* ${WORKDIR}/${custom#${CURRENTDIR}/conf/${CONF}/}/ 410162485Sjulian done 411163806Sjulian 412163806Sjulian if [ -f ${CURRENTDIR}/conf/${CONF}/boot.config ]; then 413163806Sjulian cp ${CURRENTDIR}/conf/${CONF}/boot.config ${WORKDIR}/boot.config 414163806Sjulian fi 415162485Sjulian} 416162485Sjulian 417162485Sjuliansymlinks() { 418163854Sjulian#set -xv 419176934Sremko for i in `cat ${CURRENTDIR}/conf/${CONF}/${BASEFILE}| grep -v "#" | grep ":"`; do 420162485Sjulian SOURCE_FILE=`echo $i | awk -F ":" {'print $1'}` 421162485Sjulian TARGET_FILE=`echo $i | awk -F ":" {'print $2'}` 422162485Sjulian chroot ${WORKDIR} /bin/ln -vs /${SOURCE_FILE} ${TARGET_FILE} 423162485Sjulian done 424163854Sjulian#set +xv 425162485Sjulian} 426162485Sjulian 427162485Sjulian 428162485Sjuliancreate_image() { 429162485Sjulian VNODEFILE=`mktemp -t tinybsd` 430162485Sjulian IMGMNT=`mktemp -d -t tinybsd` 431162485Sjulian 432162485Sjulian dd if=/dev/zero of=${VNODEFILE} count=${SECTUNIT} 433162485Sjulian 434162485Sjulian MD=`mdconfig -a -t vnode -f ${VNODEFILE} -x ${SECTRACK} -y ${TRACKCYL}` 435162485Sjulian 436162485Sjulian diskinfo -v /dev/${MD} 437162485Sjulian 438162485Sjulian fdisk -I /dev/${MD} 439162485Sjulian fdisk /dev/${MD} 440162485Sjulian 441162485Sjulian cp -p /boot/boot0 ${WORKDIR}/boot/boot0 442162485Sjulian bsdlabel -w -B /dev/${MD} 443162485Sjulian newfs -O2 -U /dev/${MD}a 444162485Sjulian 445162485Sjulian mount /dev/${MD}a ${IMGMNT} 446162485Sjulian 447163017Sjulian if [ ${MFSROOT} = 'yes' ] 448163017Sjulian then 449163017Sjulian echo "${TS} Creating MFS root..." 450163017Sjulian # Update is not done yet 451163017Sjulian #mkdir -p ${WORKDIR}/usr/local/bin/ 452163017Sjulian #cp -p ${CURRENTDIR}/update/update ${WORKDIR}/usr/local/bin/ 453163017Sjulian rm ${WORKDIR}/etc/fstab 454163017Sjulian cd ${WORKDIR} && find . -print | sed '/kernel/ d' | cpio -dump ${IMGMNT} || true 455163017Sjulian umount ${IMGMNT} 456163017Sjulian dd if=/dev/${MD} of=${CURRENTDIR}/mfsroot.img 457163017Sjulian gzip -9 < ${CURRENTDIR}/mfsroot.img > ${CURRENTDIR}/mfsroot.gz 458163017Sjulian rm ${CURRENTDIR}/mfsroot.img 459163017Sjulian mount /dev/${MD}a ${IMGMNT} 460163017Sjulian rm -rf ${IMGMNT}/* 461163017Sjulian cp -rp ${WORKDIR}/boot ${IMGMNT} 462163017Sjulian rm ${IMGMNT}/boot/device.hints 463163017Sjulian ( \ 464163017Sjulian echo 'set vfs.root.mountfrom="ufs:/dev/md0a"' ; \ 465163017Sjulian echo 'set bootfile="/boot/kernel/kernel"' ; \ 466163017Sjulian sed -e '/^#/ d' -e 's/^/set /' < ${WORKDIR}/boot/device.hints ; \ 467163017Sjulian echo 'load /boot/kernel/kernel' ; \ 468163017Sjulian echo 'echo Loading mfsroot' ; \ 469163017Sjulian echo 'load -t mfs_root /mfsroot' ;\ 470163017Sjulian echo 'boot' ; \ 471163017Sjulian ) > ${IMGMNT}/boot/loader.rc 472163017Sjulian mv ${CURRENTDIR}/mfsroot.gz ${IMGMNT} 473163017Sjulian else 474163017Sjulian ( cd ${WORKDIR} && find . -print | cpio -dump ${IMGMNT} ) || true 475163017Sjulian fi 476162485Sjulian 477162485Sjulian df ${IMGMNT} 478163017Sjulian sleep 1 479162485Sjulian umount ${IMGMNT} 480162485Sjulian 481162485Sjulian dd if=/dev/${MD} of=${CURRENTDIR}/${IMG} bs=64k 482162485Sjulian 483162485Sjulian rm -vf ${VNODEFILE} 484162485Sjulian rm -rvf ${IMGMNT} 485162485Sjulian mdconfig -d -u ${MD} 486163017Sjulian echo "" 487163017Sjulian echo "${TS} Done!" 488163017Sjulian echo "${TS} Your configuration options were saved in ${FULLFILENAME}" 489163017Sjulian echo "${TS} You can see your build log in ${HOME}/tinybsd.log" 490163017Sjulian echo "${TS} Your final image is in ${CURRENTDIR}/${IMG}" 491163017Sjulian echo "${TS} Now use dd(1) to write it." 492162485Sjulian} 493162485Sjulian 494162485Sjulian########################## 495162485Sjulian# run things 496163017Sjulian 497163017Sjulian########################################## 498163017Sjulian## The actual program 499163017Sjulian########################################## 500163017Sjuliangetargs $* 501163017Sjuliansetdefaults 502163017Sjulian# Load as many of the configuration options as we can 503163017Sjulianloadconfig 504163017Sjuliansaveconfig 505163017Sjulian 506163806Sjulian# Rotate build log 507163806Sjulianrotate_buidlog 508163806Sjulian 509163017Sjulian# Now start logging. 510163017Sjulian( 511163017Sjulian # Do the build 512163017Sjulian prework 513163017Sjulian check_alt_imgname 514163017Sjulian create_tree 515163017Sjulian copy_binaries 516176934Sremko create_etc 517163854Sjulian install_ports 518163017Sjulian make_kernel 519163017Sjulian copy_libraries 520163017Sjulian symlinks 521163017Sjulian create_ssh_keys 522163806Sjulian personal_conf 523163017Sjulian create_image 524162485Sjulian#set +xv 525163017Sjulian) 2>&1 |tee -a ${HOME}/tinybsd.log 526162485Sjulian 527