diff options
author | Glen Barber <gjb@FreeBSD.org> | 2020-12-09 02:21:25 +0000 |
---|---|---|
committer | Glen Barber <gjb@FreeBSD.org> | 2020-12-09 02:21:25 +0000 |
commit | 5523003a4cb036c64a3e2b61221c647582c0fafc (patch) | |
tree | 5385885c1f2e981eb0c916c279ed0a142351f3ba /release/riscv | |
parent | 3567a05b56af266b346567a128847fe929d09423 (diff) | |
download | src-5523003a4cb036c64a3e2b61221c647582c0fafc.tar.gz src-5523003a4cb036c64a3e2b61221c647582c0fafc.zip |
Copy arm64 make-memstick.sh and mkisoimages.sh to the riscv
directory to allow properly building *.iso and *.img files.
Sponsored by: Rubicon Communications, LLC (netgate.com)
Notes
Notes:
svn path=/head/; revision=368476
Diffstat (limited to 'release/riscv')
-rwxr-xr-x | release/riscv/make-memstick.sh | 52 | ||||
-rw-r--r-- | release/riscv/mkisoimages.sh | 93 |
2 files changed, 145 insertions, 0 deletions
diff --git a/release/riscv/make-memstick.sh b/release/riscv/make-memstick.sh new file mode 100755 index 000000000000..0cde77b018b8 --- /dev/null +++ b/release/riscv/make-memstick.sh @@ -0,0 +1,52 @@ +#!/bin/sh +# +# This script generates a "memstick image" (image that can be copied to a +# USB memory stick) from a directory tree. Note that the script does not +# clean up after itself very well for error conditions on purpose so the +# problem can be diagnosed (full filesystem most likely but ...). +# +# Usage: make-memstick.sh <directory tree> <image filename> +# +# $FreeBSD$ +# + +set -e + +PATH=/bin:/usr/bin:/sbin:/usr/sbin +export PATH + +scriptdir=$(dirname $(realpath $0)) +. ${scriptdir}/../../tools/boot/install-boot.sh + +if [ $# -ne 2 ]; then + echo "make-memstick.sh /path/to/directory /path/to/image/file" + exit 1 +fi + +if [ ! -d ${1} ]; then + echo "${1} must be a directory" + exit 1 +fi + +if [ -e ${2} ]; then + echo "won't overwrite ${2}" + exit 1 +fi + +echo '/dev/ufs/FreeBSD_Install / ufs ro,noatime 1 1' > ${1}/etc/fstab +echo 'root_rw_mount="NO"' > ${1}/etc/rc.conf.local +makefs -B little -o label=FreeBSD_Install -o version=2 ${2}.part ${1} +rm ${1}/etc/fstab +rm ${1}/etc/rc.conf.local + +# Make an ESP in a file. +espfilename=$(mktemp /tmp/efiboot.XXXXXX) +make_esp_file ${espfilename} ${fat32min} ${1}/boot/loader.efi + +mkimg -s gpt \ + -p efi:=${espfilename} \ + -p freebsd-ufs:=${2}.part \ + -o ${2} +rm ${espfilename} +rm ${2}.part + diff --git a/release/riscv/mkisoimages.sh b/release/riscv/mkisoimages.sh new file mode 100644 index 000000000000..5556336840cd --- /dev/null +++ b/release/riscv/mkisoimages.sh @@ -0,0 +1,93 @@ +#!/bin/sh +# +# $FreeBSD$ +# +# This script is used by release/Makefile to build the (optional) ISO images +# for a FreeBSD release. It is considered architecture dependent since each +# platform has a slightly unique way of making bootable CDs. This script is +# also allowed to generate any number of images since that is more of +# publishing decision than anything else. +# +# Usage: +# +# mkisoimages.sh [-b] image-label image-name base-bits-dir [extra-bits-dir] +# +# Where -b is passed if the ISO image should be made "bootable" by +# whatever standards this architecture supports (may be unsupported), +# image-label is the ISO image label, image-name is the filename of the +# resulting ISO image, base-bits-dir contains the image contents and +# extra-bits-dir, if provided, contains additional files to be merged +# into base-bits-dir as part of making the image. + +set -e + +scriptdir=$(dirname $(realpath $0)) +. ${scriptdir}/../../tools/boot/install-boot.sh + +if [ -z $ETDUMP ]; then + ETDUMP=etdump +fi + +if [ -z $MAKEFS ]; then + MAKEFS=makefs +fi + +if [ -z $MKIMG ]; then + MKIMG=mkimg +fi + +if [ "$1" = "-b" ]; then + BASEBITSDIR="$4" + + # Make an EFI system partition. + espfilename=$(mktemp /tmp/efiboot.XXXXXX) + # ESP file size in KB. + espsize="2048" + make_esp_file ${espfilename} ${espsize} ${BASEBITSDIR}/boot/loader.efi + + bootable="-o bootimage=efi;${espfilename} -o no-emul-boot -o platformid=efi" + + shift +else + BASEBITSDIR="$3" + bootable="" +fi + +if [ $# -lt 3 ]; then + echo "Usage: $0 [-b] image-label image-name base-bits-dir [extra-bits-dir]" + exit 1 +fi + +LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift +NAME="$1"; shift + +publisher="The FreeBSD Project. https://www.FreeBSD.org/" +echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$BASEBITSDIR/etc/fstab" +$MAKEFS -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$@" +rm -f "$BASEBITSDIR/etc/fstab" +rm -f ${espfilename} + +if [ "$bootable" != "" ]; then + # Look for the EFI System Partition image we dropped in the ISO image. + for entry in `$ETDUMP --format shell $NAME`; do + eval $entry + # XXX: etdump(8) returns "default" for the initial entry + if [ "$et_platform" = "default" ]; then + espstart=`expr $et_lba \* 2048` + espsize=`expr $et_sectors \* 512` + espparam="-p efi::$espsize:$espstart" + break + fi + done + + # Create a GPT image containing the EFI partition. + imgsize=`stat -f %z "$NAME"` + $MKIMG -s gpt \ + --capacity $imgsize \ + $espparam \ + -o efi.img + + # Drop the GPT into the System Area of the ISO. + dd if=efi.img of="$NAME" bs=32k count=1 conv=notrunc + rm -f efi.img +fi |