aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Horne <mhorne@FreeBSD.org>2020-09-18 14:40:13 +0000
committerMitchell Horne <mhorne@FreeBSD.org>2020-09-18 14:40:13 +0000
commit6dadc5d1cdec44cad788c3cc5135ddb858885212 (patch)
tree4ad87f2487df795da018bb0c6d9a6dc02783386c
parent209dcc7cec714747a62a02f691d34333e947a7e9 (diff)
downloadsrc-6dadc5d1cdec.tar.gz
src-6dadc5d1cdec.zip
arm64: generate ISO release images
Some IPMI implementations on arm64 are reportedly unable to load our memstick installer images, but support the older ISO format. Start generating these for arm64. Unlike installer ISOs for other platforms, these images are UEFI-only. Reviewed by: emaste Relnotes: yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D26452
Notes
Notes: svn path=/head/; revision=365884
-rw-r--r--release/arm64/mkisoimages.sh93
1 files changed, 93 insertions, 0 deletions
diff --git a/release/arm64/mkisoimages.sh b/release/arm64/mkisoimages.sh
new file mode 100644
index 000000000000..67edfb53f357
--- /dev/null
+++ b/release/arm64/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.
+ # The ISO file is a special case, in that it only has a maximum of
+ # 800 KB available for the boot code. So make an 800 KB ESP
+ espfilename=$(mktemp /tmp/efiboot.XXXXXX)
+ make_esp_file ${espfilename} 800 ${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