1#!/bin/sh 2#- 3# Copyright (c) 2015 The FreeBSD Foundation 4# All rights reserved. 5# 6# Portions of this software were developed by Glen Barber 7# under sponsorship from the FreeBSD Foundation. 8# 9# Redistribution and use in source and binary forms, with or without 10# modification, are permitted provided that the following conditions 11# are met: 12# 1. Redistributions of source code must retain the above copyright 13# notice, this list of conditions and the following disclaimer. 14# 2. Redistributions in binary form must reproduce the above copyright 15# notice, this list of conditions and the following disclaimer in the 16# documentation and/or other materials provided with the distribution. 17# 18# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28# SUCH DAMAGE. 29# 30# Common subroutines used to build arm/armv6 images. 31# 32# $FreeBSD$ 33# 34 35cleanup() { 36 if [ -c "${DESTDIR}/dev/null" ]; then 37 umount_loop ${DESTDIR}/dev 2>/dev/null 38 fi 39 umount_loop ${DESTDIR} 40 if [ ! -z "${mddev}" ]; then 41 mdconfig -d -u ${mddev} 42 fi 43 44 return 0 45} 46 47umount_loop() { 48 DIR=$1 49 i=0 50 sync 51 while ! umount ${DIR}; do 52 i=$(( $i + 1 )) 53 if [ $i -ge 10 ]; then 54 # This should never happen. But, it has happened. 55 echo "Cannot umount(8) ${DIR}" 56 echo "Something has gone horribly wrong." 57 return 1 58 fi 59 sleep 1 60 done 61 62 return 0 63} 64 65arm_create_disk() { 66 # XXX: This is potentially dangerous, but works around an issue 67 # properly labeling md(4) devices when the label already 68 # exists. 69 # EVERYTHINGISFINE should *never* be set for non-RE use. 70 # Trust me. I'm an engineer. 71 if [ ! -z "${EVERYTHINGISFINE}" ]; then 72 for _label in ufs/rootfs msdosfs/MSDOSBOOT; do 73 if [ -e "/dev/${_label}" ]; then 74 rm /dev/${_label} 75 fi 76 done 77 fi 78 # Create the target raw file and temporary work directory. 79 chroot ${CHROOTDIR} gpart create -s ${PART_SCHEME} ${mddev} 80 chroot ${CHROOTDIR} gpart add -t '!12' -a 63 -s ${FAT_SIZE} ${mddev} 81 chroot ${CHROOTDIR} gpart set -a active -i 1 ${mddev} 82 chroot ${CHROOTDIR} newfs_msdos -L msdosboot -F ${FAT_TYPE} /dev/${mddev}s1 83 chroot ${CHROOTDIR} gpart add -t freebsd ${mddev} 84 chroot ${CHROOTDIR} gpart create -s bsd ${mddev}s2 85 chroot ${CHROOTDIR} gpart add -t freebsd-ufs -a 64k /dev/${mddev}s2 86 chroot ${CHROOTDIR} newfs -U -L rootfs /dev/${mddev}s2a 87 chroot ${CHROOTDIR} tunefs -N enable /dev/${mddev}s2a 88 89 return 0 90} 91 92arm_create_user() { 93 # Create a default user account 'freebsd' with the password 'freebsd', 94 # and set the default password for the 'root' user to 'root'. 95 chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 96 groupadd freebsd -g 1001 97 chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/home/freebsd 98 chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 99 useradd freebsd \ 100 -m -M 0755 -w yes -n freebsd -u 1001 -g 1001 -G 0 \ 101 -c 'FreeBSD User' -d '/home/freebsd' -s '/bin/csh' 102 chroot ${CHROOTDIR} /usr/sbin/pw -R ${DESTDIR} \ 103 usermod root -w yes 104 105 return 0 106} 107 108arm_install_base() { 109 chroot ${CHROOTDIR} mount /dev/${mddev}s2a ${DESTDIR} 110 eval chroot ${CHROOTDIR} make -C ${WORLDDIR} \ 111 TARGET=${EMBEDDED_TARGET} \ 112 TARGET_ARCH=${EMBEDDED_TARGET_ARCH} \ 113 DESTDIR=${DESTDIR} KERNCONF=${KERNEL} \ 114 installworld installkernel distribution 115 chroot ${CHROOTDIR} mkdir -p ${DESTDIR}/boot/msdos 116 117 arm_create_user 118 119 echo '# Custom /etc/fstab for FreeBSD embedded images' \ 120 > ${CHROOTDIR}/${DESTDIR}/etc/fstab 121 echo "/dev/ufs/rootfs / ufs rw 1 1" \ 122 >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 123 echo "/dev/msdosfs/MSDOSBOOT /boot/msdos msdosfs rw,noatime 0 0" \ 124 >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 125 echo "md /tmp mfs rw,noatime,-s30m 0 0" \ 126 >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 127 echo "md /var/log mfs rw,noatime,-s15m 0 0" \ 128 >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 129 echo "md /var/tmp mfs rw,noatime,-s12m 0 0" \ 130 >> ${CHROOTDIR}/${DESTDIR}/etc/fstab 131 132 local hostname 133 hostname="$(echo ${KERNEL} | tr '[:upper:]' '[:lower:]')" 134 echo "hostname=\"${hostname}\"" > ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 135 echo 'ifconfig_DEFAULT="DHCP"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 136 echo 'sshd_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 137 echo 'sendmail_enable="NONE"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 138 echo 'sendmail_submit_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 139 echo 'sendmail_outbound_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 140 echo 'sendmail_msp_queue_enable="NO"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 141 echo 'growfs_enable="YES"' >> ${CHROOTDIR}/${DESTDIR}/etc/rc.conf 142 143 sync 144 umount_loop ${CHROOTDIR}/${DESTDIR} 145 146 return 0 147} 148 149arm_install_uboot() { 150 # Override in the arm/KERNEL.conf file. 151 152 return 0 153} 154