15523003aSGlen Barber#!/bin/sh 25523003aSGlen Barber# 35523003aSGlen Barber# This script generates a "memstick image" (image that can be copied to a 45523003aSGlen Barber# USB memory stick) from a directory tree. Note that the script does not 55523003aSGlen Barber# clean up after itself very well for error conditions on purpose so the 65523003aSGlen Barber# problem can be diagnosed (full filesystem most likely but ...). 75523003aSGlen Barber# 813cb0041SJessica Clarke# Usage: make-memstick.sh <directory tree or manifest> <image filename> 95523003aSGlen Barber# 105523003aSGlen Barber# 115523003aSGlen Barber 125523003aSGlen Barberset -e 135523003aSGlen Barber 14*1a9b1c36SJessica Clarkeif [ "$(uname -s)" = "FreeBSD" ]; then 155523003aSGlen Barber PATH=/bin:/usr/bin:/sbin:/usr/sbin 165523003aSGlen Barber export PATH 17*1a9b1c36SJessica Clarkefi 185523003aSGlen Barber 195523003aSGlen Barberscriptdir=$(dirname $(realpath $0)) 205523003aSGlen Barber. ${scriptdir}/../../tools/boot/install-boot.sh 215523003aSGlen Barber 225523003aSGlen Barberif [ $# -ne 2 ]; then 2313cb0041SJessica Clarke echo "make-memstick.sh /path/to/directory/or/manifest /path/to/image/file" 245523003aSGlen Barber exit 1 255523003aSGlen Barberfi 265523003aSGlen Barber 2713cb0041SJessica ClarkeMAKEFSARG=${1} 2813cb0041SJessica Clarke 2913cb0041SJessica Clarkeif [ -f ${MAKEFSARG} ]; then 3013cb0041SJessica Clarke BASEBITSDIR=`dirname ${MAKEFSARG}` 3113cb0041SJessica Clarke METALOG=${MAKEFSARG} 3213cb0041SJessica Clarkeelif [ -d ${MAKEFSARG} ]; then 3313cb0041SJessica Clarke BASEBITSDIR=${MAKEFSARG} 3413cb0041SJessica Clarke METALOG= 3513cb0041SJessica Clarkeelse 3613cb0041SJessica Clarke echo "${MAKEFSARG} must exist" 375523003aSGlen Barber exit 1 385523003aSGlen Barberfi 395523003aSGlen Barber 405523003aSGlen Barberif [ -e ${2} ]; then 415523003aSGlen Barber echo "won't overwrite ${2}" 425523003aSGlen Barber exit 1 435523003aSGlen Barberfi 445523003aSGlen Barber 4513cb0041SJessica Clarkeecho '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${BASEBITSDIR}/etc/fstab 4613cb0041SJessica Clarkeecho 'root_rw_mount="NO"' > ${BASEBITSDIR}/etc/rc.conf.local 4713cb0041SJessica Clarkeif [ -n "${METALOG}" ]; then 4813cb0041SJessica Clarke metalogfilename=$(mktemp /tmp/metalog.XXXXXX) 4913cb0041SJessica Clarke cat ${METALOG} > ${metalogfilename} 5013cb0041SJessica Clarke echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename} 5113cb0041SJessica Clarke echo "./etc/rc.conf.local type=file uname=root gname=wheel mode=0644" >> ${metalogfilename} 5213cb0041SJessica Clarke MAKEFSARG=${metalogfilename} 5313cb0041SJessica Clarkefi 54*1a9b1c36SJessica Clarkemakefs -D -N ${BASEBITSDIR}/etc -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${MAKEFSARG} 5513cb0041SJessica Clarkerm ${BASEBITSDIR}/etc/fstab 5613cb0041SJessica Clarkerm ${BASEBITSDIR}/etc/rc.conf.local 5713cb0041SJessica Clarkeif [ -n "${METALOG}" ]; then 5813cb0041SJessica Clarke rm ${metalogfilename} 5913cb0041SJessica Clarkefi 605523003aSGlen Barber 615523003aSGlen Barber# Make an ESP in a file. 625523003aSGlen Barberespfilename=$(mktemp /tmp/efiboot.XXXXXX) 6313cb0041SJessica Clarkemake_esp_file ${espfilename} ${fat32min} ${BASEBITSDIR}/boot/loader.efi 645523003aSGlen Barber 655523003aSGlen Barbermkimg -s gpt \ 665523003aSGlen Barber -p efi:=${espfilename} \ 675523003aSGlen Barber -p freebsd-ufs:=${2}.part \ 685523003aSGlen Barber -o ${2} 695523003aSGlen Barberrm ${espfilename} 705523003aSGlen Barberrm ${2}.part 715523003aSGlen Barber 72