14ad8b75dSGlen Barber#!/bin/sh 24ad8b75dSGlen Barber#- 34ad8b75dSGlen Barber# Copyright (c) 2015 The FreeBSD Foundation 44ad8b75dSGlen Barber# All rights reserved. 54ad8b75dSGlen Barber# 64ad8b75dSGlen Barber# Portions of this software were developed by Glen Barber 74ad8b75dSGlen Barber# under sponsorship from the FreeBSD Foundation. 84ad8b75dSGlen Barber# 94ad8b75dSGlen Barber# Redistribution and use in source and binary forms, with or without 104ad8b75dSGlen Barber# modification, are permitted provided that the following conditions 114ad8b75dSGlen Barber# are met: 124ad8b75dSGlen Barber# 1. Redistributions of source code must retain the above copyright 134ad8b75dSGlen Barber# notice, this list of conditions and the following disclaimer. 144ad8b75dSGlen Barber# 2. Redistributions in binary form must reproduce the above copyright 154ad8b75dSGlen Barber# notice, this list of conditions and the following disclaimer in the 164ad8b75dSGlen Barber# documentation and/or other materials provided with the distribution. 174ad8b75dSGlen Barber# 184ad8b75dSGlen Barber# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 194ad8b75dSGlen Barber# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 204ad8b75dSGlen Barber# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 214ad8b75dSGlen Barber# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 224ad8b75dSGlen Barber# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 234ad8b75dSGlen Barber# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 244ad8b75dSGlen Barber# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 254ad8b75dSGlen Barber# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 264ad8b75dSGlen Barber# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 274ad8b75dSGlen Barber# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 284ad8b75dSGlen Barber# SUCH DAMAGE. 294ad8b75dSGlen Barber# 304ad8b75dSGlen Barber# Common subroutines used to build arm/armv6 images. 314ad8b75dSGlen Barber# 324ad8b75dSGlen Barber# $FreeBSD$ 334ad8b75dSGlen Barber# 344ad8b75dSGlen Barber 354ad8b75dSGlen Barbercleanup() { 364ad8b75dSGlen Barber if [ -c "${DESTDIR}/dev/null" ]; then 374ad8b75dSGlen Barber umount_loop ${DESTDIR}/dev 2>/dev/null 384ad8b75dSGlen Barber fi 394ad8b75dSGlen Barber umount_loop ${DESTDIR} 404ad8b75dSGlen Barber if [ ! -z "${mddev}" ]; then 414ad8b75dSGlen Barber mdconfig -d -u ${mddev} 424ad8b75dSGlen Barber fi 434ad8b75dSGlen Barber 444ad8b75dSGlen Barber return 0 454ad8b75dSGlen Barber} 464ad8b75dSGlen Barber 474ad8b75dSGlen Barberumount_loop() { 484ad8b75dSGlen Barber DIR=$1 494ad8b75dSGlen Barber i=0 504ad8b75dSGlen Barber sync 514ad8b75dSGlen Barber while ! umount ${DIR}; do 524ad8b75dSGlen Barber i=$(( $i + 1 )) 534ad8b75dSGlen Barber if [ $i -ge 10 ]; then 544ad8b75dSGlen Barber # This should never happen. But, it has happened. 554ad8b75dSGlen Barber echo "Cannot umount(8) ${DIR}" 564ad8b75dSGlen Barber echo "Something has gone horribly wrong." 574ad8b75dSGlen Barber return 1 584ad8b75dSGlen Barber fi 594ad8b75dSGlen Barber sleep 1 604ad8b75dSGlen Barber done 614ad8b75dSGlen Barber 624ad8b75dSGlen Barber return 0 634ad8b75dSGlen Barber} 644ad8b75dSGlen Barber 654ad8b75dSGlen Barberarm_create_disk() { 664ad8b75dSGlen Barber # Create the target raw file and temporary work directory. 6704b7fd00SGlen Barber chroot ${CHROOTDIR} gpart create -s ${PART_SCHEME} ${mddev} 6804b7fd00SGlen Barber chroot ${CHROOTDIR} gpart add -t '!12' -a 63 -s ${FAT_SIZE} ${mddev} 6904b7fd00SGlen Barber chroot ${CHROOTDIR} gpart set -a active -i 1 ${mddev} 7004b7fd00SGlen Barber chroot ${CHROOTDIR} newfs_msdos -L msdosboot -F ${FAT_TYPE} /dev/${mddev}s1 7104b7fd00SGlen Barber chroot ${CHROOTDIR} gpart add -t freebsd ${mddev} 7204b7fd00SGlen Barber chroot ${CHROOTDIR} gpart create -s bsd ${mddev}s2 7304b7fd00SGlen Barber chroot ${CHROOTDIR} gpart add -t freebsd-ufs -a 64k /dev/${mddev}s2 7404b7fd00SGlen Barber chroot ${CHROOTDIR} newfs -U -L rootfs /dev/${mddev}s2a 75915f44d0SGlen Barber chroot ${CHROOTDIR} tunefs -N enable /dev/${mddev}s2a 764ad8b75dSGlen Barber 774ad8b75dSGlen Barber return 0 784ad8b75dSGlen Barber} 794ad8b75dSGlen Barber 8088feae84SGlen Barberarm_create_user() { 8188feae84SGlen Barber # Create a default user account 'freebsd' with the password 'freebsd', 8288feae84SGlen Barber # and set the default password for the 'root' user to 'root'. 83b07d911fSGlen Barber chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 84f3ca4d91SGlen Barber groupadd freebsd -g 1001 85*717a45fcSGlen Barber chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/home/freebsd 86b07d911fSGlen Barber chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 87f3ca4d91SGlen Barber useradd freebsd \ 8888feae84SGlen Barber -m -M 0755 -w yes -n freebsd -u 1001 -g 1001 -G 0 \ 89b07d911fSGlen Barber -c 'FreeBSD User' -d '/home/freebsd' -s '/bin/csh' 90b07d911fSGlen Barber chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 91f3ca4d91SGlen Barber usermod root -w yes 9288feae84SGlen Barber 9388feae84SGlen Barber return 0 9488feae84SGlen Barber} 9588feae84SGlen Barber 964ad8b75dSGlen Barberarm_install_base() { 9704b7fd00SGlen Barber chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${DESTDIR} 9804b7fd00SGlen Barber eval chroot ${CHROOTDIR} make -C ${WORLDDIR} \ 9904b7fd00SGlen Barber TARGET=${EMBEDDED_TARGET} \ 1004ad8b75dSGlen Barber TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \ 1014ad8b75dSGlen Barber DESTDIR=${DESTDIR} KERNCONF=${KERNEL} \ 1024ad8b75dSGlen Barber installworld installkernel distribution 103fef41f60SGlen Barber chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/boot/msdos 1044ad8b75dSGlen Barber 105f3ca4d91SGlen Barber arm_create_user 10688feae84SGlen Barber 1074ad8b75dSGlen Barber echo '# Custom /etc/fstab for FreeBSD embedded images' \ 10804b7fd00SGlen Barber > ${CHROOTDIR}/${DESTDIR}/etc/fstab 1094ad8b75dSGlen Barber echo "/dev/ufs/rootfs / ufs rw 1 1" \ 11004b7fd00SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 111869ef347SGlen Barber echo "/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0" \ 112869ef347SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 1134ad8b75dSGlen Barber echo "md /tmp mfs rw,noatime,-s30m 0 0" \ 11404b7fd00SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 1154ad8b75dSGlen Barber echo "md /var/log mfs rw,noatime,-s15m 0 0" \ 11604b7fd00SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 1174ad8b75dSGlen Barber echo "md /var/tmp mfs rw,noatime,-s12m 0 0" \ 11804b7fd00SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 1194ad8b75dSGlen Barber 1204ad8b75dSGlen Barber local hostname 1214ad8b75dSGlen Barber hostname="$(echo ${KERNEL} | tr '[:upper:]' '[:lower:]')" 12204b7fd00SGlen Barber echo "hostname=\"${hostname}\"" > ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12304b7fd00SGlen Barber echo 'ifconfig_DEFAULT="DHCP"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12404b7fd00SGlen Barber echo 'sshd_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12504b7fd00SGlen Barber echo 'sendmail_enable="NONE"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12604b7fd00SGlen Barber echo 'sendmail_submit_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12704b7fd00SGlen Barber echo 'sendmail_outbound_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12804b7fd00SGlen Barber echo 'sendmail_msp_queue_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12960bc17f4SGlen Barber echo 'growfs_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 1304ad8b75dSGlen Barber 1314ad8b75dSGlen Barber sync 13204b7fd00SGlen Barber umount_loop ${CHROOTDIR}/${DESTDIR} 1334ad8b75dSGlen Barber 1344ad8b75dSGlen Barber return 0 1354ad8b75dSGlen Barber} 1364ad8b75dSGlen Barber 1374ad8b75dSGlen Barberarm_install_uboot() { 1384ad8b75dSGlen Barber # Override in the arm/KERNEL.conf file. 1394ad8b75dSGlen Barber 1404ad8b75dSGlen Barber return 0 1414ad8b75dSGlen Barber} 142