14ad8b75dSGlen Barber#!/bin/sh 24ad8b75dSGlen Barber#- 3*751c20d8SGlen Barber# Copyright (c) 2015-2017 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# 30*751c20d8SGlen Barber# Common subroutines used to build arm SD card 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} 68*751c20d8SGlen Barber chroot ${CHROOTDIR} gpart add -t '!12' -a 512k -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 754ad8b75dSGlen Barber 764ad8b75dSGlen Barber return 0 774ad8b75dSGlen Barber} 784ad8b75dSGlen Barber 7988feae84SGlen Barberarm_create_user() { 8088feae84SGlen Barber # Create a default user account 'freebsd' with the password 'freebsd', 8188feae84SGlen Barber # and set the default password for the 'root' user to 'root'. 82b07d911fSGlen Barber chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 83f3ca4d91SGlen Barber groupadd freebsd -g 1001 84717a45fcSGlen Barber chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/home/freebsd 85b07d911fSGlen Barber chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 86f3ca4d91SGlen Barber useradd freebsd \ 8788feae84SGlen Barber -m -M 0755 -w yes -n freebsd -u 1001 -g 1001 -G 0 \ 88b07d911fSGlen Barber -c 'FreeBSD User' -d '/home/freebsd' -s '/bin/csh' 89b07d911fSGlen Barber chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 90f3ca4d91SGlen Barber usermod root -w yes 9188feae84SGlen Barber 9288feae84SGlen Barber return 0 9388feae84SGlen Barber} 9488feae84SGlen Barber 954ad8b75dSGlen Barberarm_install_base() { 9604b7fd00SGlen Barber chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${DESTDIR} 9704b7fd00SGlen Barber eval chroot ${CHROOTDIR} make -C ${WORLDDIR} \ 9804b7fd00SGlen Barber TARGET=${EMBEDDED_TARGET} \ 994ad8b75dSGlen Barber TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \ 1004ad8b75dSGlen Barber DESTDIR=${DESTDIR} KERNCONF=${KERNEL} \ 1014ad8b75dSGlen Barber installworld installkernel distribution 102fef41f60SGlen Barber chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/boot/msdos 1034ad8b75dSGlen Barber 104f3ca4d91SGlen Barber arm_create_user 10588feae84SGlen Barber 1064ad8b75dSGlen Barber echo '# Custom /etc/fstab for FreeBSD embedded images' \ 10704b7fd00SGlen Barber > ${CHROOTDIR}/${DESTDIR}/etc/fstab 1084ad8b75dSGlen Barber echo "/dev/ufs/rootfs / ufs rw 1 1" \ 10904b7fd00SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 110869ef347SGlen Barber echo "/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0" \ 111869ef347SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 112c7161c4aSEmmanuel Vadot echo "tmpfs /tmp tmpfs rw,mode=1777,size=50m 0 0" \ 11304b7fd00SGlen Barber >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 1144ad8b75dSGlen Barber 1154ad8b75dSGlen Barber local hostname 1164ad8b75dSGlen Barber hostname="$(echo ${KERNEL} | tr '[:upper:]' '[:lower:]')" 11704b7fd00SGlen Barber echo "hostname=\"${hostname}\"" > ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 11804b7fd00SGlen Barber echo 'ifconfig_DEFAULT="DHCP"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 11904b7fd00SGlen Barber echo 'sshd_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12004b7fd00SGlen Barber echo 'sendmail_enable="NONE"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12104b7fd00SGlen Barber echo 'sendmail_submit_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12204b7fd00SGlen Barber echo 'sendmail_outbound_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12304b7fd00SGlen Barber echo 'sendmail_msp_queue_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 12460bc17f4SGlen Barber echo 'growfs_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 1254ad8b75dSGlen Barber 1264ad8b75dSGlen Barber sync 12704b7fd00SGlen Barber umount_loop ${CHROOTDIR}/${DESTDIR} 1284ad8b75dSGlen Barber 1294ad8b75dSGlen Barber return 0 1304ad8b75dSGlen Barber} 1314ad8b75dSGlen Barber 1324ad8b75dSGlen Barberarm_install_uboot() { 1334ad8b75dSGlen Barber # Override in the arm/KERNEL.conf file. 1344ad8b75dSGlen Barber 1354ad8b75dSGlen Barber return 0 1364ad8b75dSGlen Barber} 137