tinybsd revision 177453
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: head/tools/tools/tinybsd/tinybsd 177453 2008-03-20 12:56:49Z remko $ 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" 22162485SjulianTS="=====>" 23162485Sjulian 24163017Sjuliansplitarg1 () { 25163017Sjulian local IFS 26163017Sjulian IFS='=' 27163017Sjulian set $1 28163017Sjulian echo $1 29163017Sjulian} 30162485Sjulian 31163017Sjuliansplitarg2 () { 32163017Sjulian local IFS 33163017Sjulian IFS='=' 34163017Sjulian set $1 35163017Sjulian echo $2 36163017Sjulian} 37162485Sjulian 38163017Sjuliangetargs () { 39163017Sjulian ARGS="$*" 40163017Sjulian for arg in $* 41163017Sjulian do 42163017Sjulian ARG=`splitarg1 $arg` 43163017Sjulian VAL=`splitarg2 $arg` 44163017Sjulian case $ARG in 45163017Sjulian sectors) 46163017Sjulian SECTUNIT=$VAL 47163017Sjulian ;; 48163017Sjulian heads) 49163017Sjulian TRACKCYL=$VAL 50163017Sjulian ;; 51163017Sjulian spt) 52163017Sjulian SECTRACK=$VAL 53163017Sjulian ;; 54163017Sjulian conf) 55163017Sjulian CONF=$VAL 56163017Sjulian ;; 57163017Sjulian mfsroot) 58163017Sjulian MFSROOT=$VAL 59163017Sjulian ;; 60163017Sjulian image) 61163017Sjulian IMG=$VAL 62163017Sjulian ;; 63163017Sjulian batch) 64163017Sjulian NO_PROMPTS="YES" 65163017Sjulian ;; 66163017Sjulian new) 67163017Sjulian NO_READ="YES" 68163017Sjulian ;; 69163017Sjulian *) 70163017Sjulian usage 71163017Sjulian ;; 72163017Sjulian esac 73163017Sjulian done 74163017Sjulian} 75162485Sjulian 76163017Sjulianusage () { 77163017Sjulian echo "Woops 78163017Sjulian Usage: $0 sectors=<size of media> [80000] 79163017Sjulian heads=<heads according to firmware> [4] 80163017Sjulian spt=<sectors per track according to firmware> [32] 81163017Sjulian conf=<configuration name> (see conf/name) [default] 82163017Sjulian mfsroot[=<yes|no>] [no] 83163017Sjulian image=<tinybsd image name> [tinybsd.bin] 84163017Sjulian batch[=<anything>] (do not ask interactively) 85163017Sjulian new[=<anything>] (do not read previous values) 86162485Sjulian 87163017Sjulian Examples: 88163017Sjulian $0 sectors=65536 heads=8 spt=16 conf=wireless mfsroot=yes image=myimage.img batch 89162485Sjulian 90163017Sjulian Default values are set in the program. 91163017Sjulian Environment values override defaults. 92163017Sjulian Previous values override environment values but can be disabled. 93163017Sjulian Command arguments override previous values. 94163017Sjulian Interactive values override command arguments but can be disabled. 95163017Sjulian 96163017Sjulian Run diskinfo(8) -v against your CF device to get correct information 97163017Sjulian about your disk. USB keys do not need any specific geometry" 98163017Sjulian exit 1 99163017Sjulian} 100163017Sjulian 101163017Sjulian######## 102163017Sjulian# Load variables from stdin (could be a file) 103163017Sjulian# Look for lines that match foo=bar 104163017Sjulian# do not run the file.. that is asking for trouble 105163017Sjulian######## 106163017Sjulianloadvars () { 107163017Sjulian while : 108163017Sjulian do 109163017Sjulian OIFS=$IFS 110163017Sjulian IFS="=" 111163017Sjulian if read PART1 PART2 112163017Sjulian then 113163017Sjulian IFS="$OIFS" 114163017Sjulian case "$PART1" in 115163017Sjulian \#*) 116163017Sjulian ;; 117163017Sjulian "") 118163017Sjulian ;; 119163017Sjulian *) 120163017Sjulian set "${PART1}" 121163017Sjulian if [ $# = "1" ] 122163017Sjulian then 123163017Sjulian eval "${PART1}='${PART2}'" 124163017Sjulian fi 125163017Sjulian ;; 126163017Sjulian esac 127163017Sjulian else 128163017Sjulian IFS="$OIFS" 129163017Sjulian return 0 130163017Sjulian fi 131163017Sjulian done 132163017Sjulian} 133163017Sjulian 134163017Sjulian######## 135163017Sjulian# get values from the user 136163017Sjulian######## 137163017Sjulianconfirm_action(){ 138163017Sjulian local ANSWER 139163017Sjulian local MESSAGE 140163017Sjulian ANSWER=$1 141163017Sjulian MESSAGE=$2 142163017Sjulian if [ "$NO_PROMPTS" != "YES" ] 143163017Sjulian then 144163253Sjulian echo -n "$MESSAGE [$ANSWER] " > /dev/tty 145163017Sjulian read result 146163017Sjulian [ "$result" != "" ] && ANSWER=$result 147163017Sjulian fi 148163017Sjulian 149163017Sjulian ANSWER=`eval "echo $ANSWER"` 150163017Sjulian echo $ANSWER 151163017Sjulian} 152163017Sjulian 153163017Sjulian######## 154163017Sjulian# These are only used the VERY first time you run the program (on this machine) 155163017Sjulian######## 156163017Sjuliansetdefaults () { 157163017Sjulian NO_PROMPTS=${NO_PROMPTS:-NO} 158163017Sjulian NO_READ=${NO_READ:-NO} 159163017Sjulian SECTUNIT=${SECTUNIT:-80000}; export SECTUNIT 160163017Sjulian TRACKCYL=${TRACKCYL:-4}; export TRACKCYL 161163017Sjulian SECTRACK=${SECTRACK:-32}; export SECTRACK 162163017Sjulian CONF=${CONF:-default}; export CONF 163163017Sjulian MFSROOT=${MFSROOT:-NO}; export MFSROOT 164163017Sjulian IMG=${IMG:-tinybsd.bin}; export IMG 165163017Sjulian 166163017Sjulian} 167163017Sjulian 168163017Sjulian####### 169163017Sjulian# get ourselves set up. 170163017Sjulian# Partly by reading config files and partly from asking questions. 171163017Sjulian####### 172163017Sjulianloadconfig () { 173163017Sjulian if [ "${NO_READ}" = "YES" ] 174163017Sjulian then 175163017Sjulian return 176163017Sjulian fi 177163017Sjulian 178163017Sjulian HOSTNAME=`hostname` 179163017Sjulian HOSTPART=${HOSTNAME%%.*} 180163017Sjulian FILENAME=".tinybsd.${HOSTPART}.${USER}" 181163017Sjulian FULLFILENAME=$HOME/$FILENAME 182163017Sjulian 183163017Sjulian if [ -f ${FULLFILENAME} ] 184163017Sjulian then 185163017Sjulian loadvars <${FULLFILENAME} 186163017Sjulian fi 187163017Sjulian 188163017Sjulian SECTUNIT=`confirm_action "$SECTUNIT" "512 byte sectors per unit?"` 189163017Sjulian TRACKCYL=`confirm_action "$TRACKCYL" "Tracks per cylinder?"` 190163017Sjulian SECTRACK=`confirm_action "$SECTRACK" "Sectors per track?"` 191163253Sjulian while : 192163253Sjulian do 193163253Sjulian echo "The following configurations exist:" 194163253Sjulian ls -l conf|awk '/^d/{print " ",$9}'|grep -v CVS 195163253Sjulian CONF=`confirm_action "$CONF" "Configuration name?"` 196163253Sjulian if [ ! -d "${CURRENTDIR}/conf/$CONF" ] 197163253Sjulian then 198163253Sjulian echo "${TS} Error: Could not find config (${CONF})" 199163253Sjulian if [ "$NO_PROMPTS" = "YES" ] 200163253Sjulian then 201163253Sjulian exit 1 202163253Sjulian fi 203163253Sjulian else 204163253Sjulian break 205163253Sjulian fi 206163253Sjulian done 207163253Sjulian MFSROOT=`confirm_action "$MFSROOT" "Use an MFSROOT? (YES/NO)"` 208163017Sjulian IMG=`confirm_action "$IMG" "Image file to generate?"` 209163017Sjulian 210163017Sjulian# example of formatted value (NNN in this case) 211163017Sjulian# #condition and format the number 212163017Sjulian# if [ -z "${BUILDNUM}" ] 213163017Sjulian# then 214163017Sjulian# echo "Starting with build 001" 215163017Sjulian# BUILDNUM="001" 216163017Sjulian# else 217163017Sjulian# BUILDNUM=`printf "%03d\n" $(($BUILDNUM))` 218163017Sjulian# fi 219163017Sjulian 220163017Sjulian 221163017Sjulian} 222163017Sjulian 223163017Sjuliansaveconfig () { 224163017Sjulian HOSTNAME=`hostname` 225163017Sjulian HOSTPART=${HOSTNAME%%.*} 226163017Sjulian FILENAME=".tinybsd.${HOSTPART}.${USER}" 227163017Sjulian FULLFILENAME=$HOME/$FILENAME 228163017Sjulian ( 229163017Sjulian echo "# written by tinybsd" `date` 230163017Sjulian echo "SECTUNIT=${SECTUNIT}" 231163017Sjulian echo "TRACKCYL=${TRACKCYL}" 232163017Sjulian echo "SECTRACK=${SECTRACK}" 233163017Sjulian echo "CONF=${CONF}" 234163017Sjulian echo "MFSROOT=${MFSROOT:-NO}" 235163017Sjulian echo "IMG=${IMG}" 236163017Sjulian ) >${FULLFILENAME} 237163017Sjulian} 238163017Sjulian 239162485Sjuliancheck_alt_imgname() { 240163017Sjulian if [ ${IMG} = 'tinybsd.bin' ] 241162485Sjulian then 242162485Sjulian echo "${TS} Alternative image name not set; defaulting to 'tinybsd.bin'" 243162485Sjulian fi 244162485Sjulian} 245162485Sjulian 246163806Sjulianrotate_buidlog() { 247163806Sjulian mv -f ${HOME}/tinybsd.log ${HOME}/tinybsd.log.old 248163806Sjulian} 249163806Sjulian 250162485Sjulianremove_workdir() { 251177453Sremko # Before removing check if there is not a mount under $WORKDIR anymore 252177453Sremko MOUNT_CHECK=`mount|egrep "on ${WORKDIR}"` 253177453Sremko 254177453Sremko if [ ! -z "${MOUNT_CHECK}" ]; then 255177453Sremko echo "There are mounts under the workdir (${WORKDIR}). Please umount them before running this script" 256177453Sremko exit 1 257177453Sremko else 258177453Sremko chflags -R noschg ${WORKDIR} 259177453Sremko echo "${TS} Removing "${WORKDIR} 260177453Sremko rm -rf ${WORKDIR} 261177453Sremko echo "${TS} Removing Build Kernel Directory" 262177453Sremko rm -rf /usr/obj/usr/src/sys/${KERNCONF} 263177453Sremko echo "${TS} done." 264177453Sremko fi 265162485Sjulian} 266162485Sjulian 267162485Sjulian 268162485Sjulianprework() { 269163806Sjulian remove_workdir 270162485Sjulian mkdir -p ${WORKDIR} 271162485Sjulian} 272162485Sjulian 273162485Sjulian 274162485Sjuliancreate_tree() { 275162485Sjulian echo "${TS} Creating directory hierarchy... " 276162485Sjulian mtree -deU -f /etc/mtree/BSD.root.dist -p ${WORKDIR} 277171923Sremko mtree -deU -f /etc/mtree/BIND.chroot.dist -p ${WORKDIR} 278162485Sjulian mtree -deU -f /etc/mtree/BSD.usr.dist -p ${WORKDIR}/usr 279163806Sjulian mtree -deU -f /etc/mtree/BSD.local.dist -p ${WORKDIR}/usr/local 280162485Sjulian mtree -deU -f /etc/mtree/BSD.var.dist -p ${WORKDIR}/var 281162485Sjulian} 282162485Sjulian 283163806Sjuliancopy_binaries() { 284163806Sjulian cd ${CURRENTDIR}/conf/${CONF} 285162485Sjulian 286176934Sremko for file in `cat ${CURRENTDIR}/conf/${CONF}/${BASEFILE} | grep -v "#" | \ 287162485Sjulian cut -f1 -d":" | sort | uniq` ; do 288162485Sjulian echo "${TS} Copying "/${file}" to "${WORKDIR}/${file} 289162485Sjulian cp -fp /${file} ${WORKDIR}/${file} ; 290162485Sjulian done 291162485Sjulian} 292162485Sjulian 293163854Sjulianinstall_ports() { 294176934Sremko for portname in `cat ${CURRENTDIR}/conf/${CONF}/${PORTSFILE} | grep -v '#'` ; do 295176934Sremko if [ ! -d "${WORKDIR}/usr/ports" ]; then 296176934Sremko mkdir -p "${WORKDIR}/usr/ports" 297176934Sremko fi 298163854Sjulian 299176934Sremko PNAME=`/usr/bin/basename "${portname}"` 300176934Sremko PORT_OPTION_FILE="/var/db/ports/${PNAME}/options" 301176934Sremko 302176934Sremko if [ -f "${PORT_OPTION_FILE}" ]; then 303176934Sremko mkdir -p "${WORKDIR}/var/db/ports/${PNAME}" 304176934Sremko cp "${PORT_OPTION_FILE}" "${WORKDIR}/var/db/ports/${PNAME}/" 305176934Sremko fi 306176934Sremko 307176934Sremko mount_nullfs /lib "${WORKDIR}/lib" 308176934Sremko mount_nullfs /usr/bin "${WORKDIR}/usr/bin" 309176934Sremko mount_nullfs /usr/sbin "${WORKDIR}/usr/sbin" 310176934Sremko mount_nullfs /usr/ports "${WORKDIR}/usr/ports" 311176934Sremko mount_nullfs /usr/share "${WORKDIR}/usr/share" 312176934Sremko mount_nullfs /usr/libexec "${WORKDIR}/usr/libexec" 313176934Sremko mount_nullfs /usr/lib "${WORKDIR}/usr/lib" 314176934Sremko mount_nullfs /usr/include "${WORKDIR}/usr/include" 315176934Sremko 316176934Sremko cd ${PORTSDIR}/${portname} 317176934Sremko make fetch-recursive 318176934Sremko make DESTDIR_ENV_LIST=PATH DESTDIR="${WORKDIR}" install 319176934Sremko make clean 320176934Sremko 321176934Sremko umount "${WORKDIR}/lib" 322176934Sremko umount "${WORKDIR}/usr/ports" 323176934Sremko umount "${WORKDIR}/usr/bin" 324176934Sremko umount "${WORKDIR}/usr/sbin" 325176934Sremko umount "${WORKDIR}/usr/share" 326176934Sremko umount "${WORKDIR}/usr/libexec" 327176934Sremko umount "${WORKDIR}/usr/lib" 328176934Sremko umount "${WORKDIR}/usr/include" 329163854Sjulian done 330163854Sjulian} 331163854Sjulian 332162485Sjulianmake_kernel() { 333162485Sjulian echo "${TS} Building customized tiny beastie kernel... " 334162485Sjulian cp -p ${CURRENTDIR}/conf/${CONF}/${KERNCONF} /usr/src/sys/i386/conf 335162485Sjulian cd /usr/src 336162485Sjulian make buildkernel KERNCONF=${KERNCONF} || exit 1 337162485Sjulian gzip -9 /usr/obj/usr/src/sys/${KERNCONF}/kernel 338162485Sjulian install ${DEFINSTARGS} /usr/obj/usr/src/sys/${KERNCONF}/kernel.gz ${WORKDIR}/boot/kernel/ 339162485Sjulian install ${DEFINSTARGS} \ 340162485Sjulian /usr/obj/usr/src/sys/${KERNCONF}/modules/usr/src/sys/modules/acpi/acpi/acpi.ko \ 341162485Sjulian ${WORKDIR}/boot/kernel 342162485Sjulian install -o 0 -g 0 -m 444 /sys/i386/conf/GENERIC.hints ${WORKDIR}/boot/device.hints 343162485Sjulian} 344162485Sjulian 345162485Sjuliancopy_libraries() { 346162485Sjulian TDEPFILE="`mktemp -t deps`" 347162485Sjulian TDEPFILES="`mktemp -t depsymlnk`" 348162485Sjulian 349176934Sremko find "${WORKDIR}" -type f |while read file; do 350176934Sremko ldd -f "%p\n" ${file} >> ${TDEPFILE} ; # don't worry on progs been "not dynamic" 351162485Sjulian done 352162485Sjulian 353162485Sjulian for libdeplib in `cat ${TDEPFILE} | sort | uniq`; do 354162485Sjulian ldd -f "%p\n" /${libdeplib} >> ${TDEPFILE} ; 355162485Sjulian done 356163854Sjulian 357162485Sjulian for pamdep in `ls -1 /usr/lib/pam*`; do 358162485Sjulian echo $pamdep >> ${TDEPFILE} ; 359162485Sjulian ldd -f "%p\n" /${pamdep} >> ${TDEPFILE} ; 360162485Sjulian done 361163806Sjulian 362162485Sjulian for lib in `cat ${TDEPFILE} | sort | uniq`; do 363162485Sjulian echo "${TS} Copying "${lib}" to "${WORKDIR}${lib} 364162485Sjulian cp -fp ${lib} ${WORKDIR}${lib} ; 365162485Sjulian done 366162485Sjulian 367162485Sjulian for depsymlink in `cat ${TDEPFILE}`; do 368162485Sjulian echo "${TS} Checking if ${depsymlink} is a symbolic link" 369162485Sjulian /bin/ls -l $depsymlink | grep "\->" | awk '{print $11":"$9}' >> ${TDEPFILES} 370162485Sjulian done 371162485Sjulian 372162485Sjulian for i in `cat ${TDEPFILES}`; do 373162485Sjulian SOURCE_FILE=`echo $i | awk -F ":" '{print $1}'` 374162485Sjulian TARGET_FILE=`echo $i | awk -F ":" '{print $2}'` 375162485Sjulian 376162485Sjulian echo "${TS} Unlinking ${WORKDIR}${TARGET_FILE}" 377163806Sjulian chroot ${WORKDIR} /bin/chflags 0 ${TARGET_FILE} 378162485Sjulian chroot ${WORKDIR} /bin/rm -f ${TARGET_FILE} 379162485Sjulian 380162485Sjulian echo "${TS} Symlinking ${SOURCE_FILE} to ${TARGET_FILE}" 381162485Sjulian chroot ${WORKDIR} /bin/ln -s ${SOURCE_FILE} ${TARGET_FILE} 382162485Sjulian done 383162485Sjulian 384162485Sjulian echo -n "${TS} Unlinking " 385162485Sjulian rm -fv ${TDEPFILE} ${TDEPFILES} 386162485Sjulian} 387162485Sjulian 388162485Sjuliancreate_etc() { 389162485Sjulian cd /usr/src/etc/sendmail/ 390162485Sjulian make freebsd.cf freebsd.submit.cf 391162485Sjulian 392162485Sjulian cd /usr/src/etc/ 393162485Sjulian mkdir -p ${WORKDIR}/var/named/etc/namedb 394162485Sjulian make distribution DESTDIR=${WORKDIR} 395162485Sjulian} 396162485Sjulian 397163017Sjuliancreate_ssh_keys() { 398163017Sjulian echo "Creating ssh keys..." 399163017Sjulian ssh-keygen -t rsa1 -b 1024 -f ${WORKDIR}/etc/ssh/ssh_host_key -N '' 400163017Sjulian ssh-keygen -t dsa -f ${WORKDIR}/etc/ssh/ssh_host_dsa_key -N '' 401163017Sjulian ssh-keygen -t rsa -f ${WORKDIR}/etc/ssh/ssh_host_rsa_key -N '' 402163017Sjulian} 403163017Sjulian 404163806Sjulianpersonal_conf() { 405162485Sjulian echo "${TS} Copying your custom configuration on conf/ ..." 406163806Sjulian for custom in `find ${CURRENTDIR}/conf/${CONF}/ -type d -depth 1 \! -name CVS`; do 407162485Sjulian cp -Rp ${custom}/* ${WORKDIR}/${custom#${CURRENTDIR}/conf/${CONF}/}/ 408162485Sjulian done 409163806Sjulian 410163806Sjulian if [ -f ${CURRENTDIR}/conf/${CONF}/boot.config ]; then 411163806Sjulian cp ${CURRENTDIR}/conf/${CONF}/boot.config ${WORKDIR}/boot.config 412163806Sjulian fi 413162485Sjulian} 414162485Sjulian 415162485Sjuliansymlinks() { 416163854Sjulian#set -xv 417176934Sremko for i in `cat ${CURRENTDIR}/conf/${CONF}/${BASEFILE}| grep -v "#" | grep ":"`; do 418162485Sjulian SOURCE_FILE=`echo $i | awk -F ":" {'print $1'}` 419162485Sjulian TARGET_FILE=`echo $i | awk -F ":" {'print $2'}` 420162485Sjulian chroot ${WORKDIR} /bin/ln -vs /${SOURCE_FILE} ${TARGET_FILE} 421162485Sjulian done 422163854Sjulian#set +xv 423162485Sjulian} 424162485Sjulian 425162485Sjulian 426162485Sjuliancreate_image() { 427162485Sjulian VNODEFILE=`mktemp -t tinybsd` 428162485Sjulian IMGMNT=`mktemp -d -t tinybsd` 429162485Sjulian 430162485Sjulian dd if=/dev/zero of=${VNODEFILE} count=${SECTUNIT} 431162485Sjulian 432162485Sjulian MD=`mdconfig -a -t vnode -f ${VNODEFILE} -x ${SECTRACK} -y ${TRACKCYL}` 433162485Sjulian 434162485Sjulian diskinfo -v /dev/${MD} 435162485Sjulian 436162485Sjulian fdisk -I /dev/${MD} 437162485Sjulian fdisk /dev/${MD} 438162485Sjulian 439162485Sjulian cp -p /boot/boot0 ${WORKDIR}/boot/boot0 440162485Sjulian bsdlabel -w -B /dev/${MD} 441162485Sjulian newfs -O2 -U /dev/${MD}a 442162485Sjulian 443162485Sjulian mount /dev/${MD}a ${IMGMNT} 444162485Sjulian 445163017Sjulian if [ ${MFSROOT} = 'yes' ] 446163017Sjulian then 447163017Sjulian echo "${TS} Creating MFS root..." 448163017Sjulian # Update is not done yet 449163017Sjulian #mkdir -p ${WORKDIR}/usr/local/bin/ 450163017Sjulian #cp -p ${CURRENTDIR}/update/update ${WORKDIR}/usr/local/bin/ 451163017Sjulian rm ${WORKDIR}/etc/fstab 452163017Sjulian cd ${WORKDIR} && find . -print | sed '/kernel/ d' | cpio -dump ${IMGMNT} || true 453163017Sjulian umount ${IMGMNT} 454163017Sjulian dd if=/dev/${MD} of=${CURRENTDIR}/mfsroot.img 455163017Sjulian gzip -9 < ${CURRENTDIR}/mfsroot.img > ${CURRENTDIR}/mfsroot.gz 456163017Sjulian rm ${CURRENTDIR}/mfsroot.img 457163017Sjulian mount /dev/${MD}a ${IMGMNT} 458163017Sjulian rm -rf ${IMGMNT}/* 459163017Sjulian cp -rp ${WORKDIR}/boot ${IMGMNT} 460163017Sjulian rm ${IMGMNT}/boot/device.hints 461163017Sjulian ( \ 462163017Sjulian echo 'set vfs.root.mountfrom="ufs:/dev/md0a"' ; \ 463163017Sjulian echo 'set bootfile="/boot/kernel/kernel"' ; \ 464163017Sjulian sed -e '/^#/ d' -e 's/^/set /' < ${WORKDIR}/boot/device.hints ; \ 465163017Sjulian echo 'load /boot/kernel/kernel' ; \ 466163017Sjulian echo 'echo Loading mfsroot' ; \ 467163017Sjulian echo 'load -t mfs_root /mfsroot' ;\ 468163017Sjulian echo 'boot' ; \ 469163017Sjulian ) > ${IMGMNT}/boot/loader.rc 470163017Sjulian mv ${CURRENTDIR}/mfsroot.gz ${IMGMNT} 471163017Sjulian else 472163017Sjulian ( cd ${WORKDIR} && find . -print | cpio -dump ${IMGMNT} ) || true 473163017Sjulian fi 474162485Sjulian 475162485Sjulian df ${IMGMNT} 476163017Sjulian sleep 1 477162485Sjulian umount ${IMGMNT} 478162485Sjulian 479162485Sjulian dd if=/dev/${MD} of=${CURRENTDIR}/${IMG} bs=64k 480162485Sjulian 481162485Sjulian rm -vf ${VNODEFILE} 482162485Sjulian rm -rvf ${IMGMNT} 483162485Sjulian mdconfig -d -u ${MD} 484163017Sjulian echo "" 485163017Sjulian echo "${TS} Done!" 486163017Sjulian echo "${TS} Your configuration options were saved in ${FULLFILENAME}" 487163017Sjulian echo "${TS} You can see your build log in ${HOME}/tinybsd.log" 488163017Sjulian echo "${TS} Your final image is in ${CURRENTDIR}/${IMG}" 489163017Sjulian echo "${TS} Now use dd(1) to write it." 490162485Sjulian} 491162485Sjulian 492162485Sjulian########################## 493162485Sjulian# run things 494163017Sjulian 495163017Sjulian########################################## 496163017Sjulian## The actual program 497163017Sjulian########################################## 498163017Sjuliangetargs $* 499163017Sjuliansetdefaults 500163017Sjulian# Load as many of the configuration options as we can 501163017Sjulianloadconfig 502163017Sjuliansaveconfig 503163017Sjulian 504163806Sjulian# Rotate build log 505163806Sjulianrotate_buidlog 506163806Sjulian 507163017Sjulian# Now start logging. 508163017Sjulian( 509163017Sjulian # Do the build 510163017Sjulian prework 511163017Sjulian check_alt_imgname 512163017Sjulian create_tree 513163017Sjulian copy_binaries 514176934Sremko create_etc 515163854Sjulian install_ports 516163017Sjulian make_kernel 517163017Sjulian copy_libraries 518163017Sjulian symlinks 519163017Sjulian create_ssh_keys 520163806Sjulian personal_conf 521163017Sjulian create_image 522162485Sjulian#set +xv 523163017Sjulian) 2>&1 |tee -a ${HOME}/tinybsd.log 524162485Sjulian 525