xref: /freebsd/release/riscv/mkisoimages.sh (revision d0b2dbfa)
15523003aSGlen Barber#!/bin/sh
25523003aSGlen Barber#
35523003aSGlen Barber#
45523003aSGlen Barber# This script is used by release/Makefile to build the (optional) ISO images
55523003aSGlen Barber# for a FreeBSD release.  It is considered architecture dependent since each
65523003aSGlen Barber# platform has a slightly unique way of making bootable CDs. This script is
75523003aSGlen Barber# also allowed to generate any number of images since that is more of
85523003aSGlen Barber# publishing decision than anything else.
95523003aSGlen Barber#
105523003aSGlen Barber# Usage:
115523003aSGlen Barber#
125523003aSGlen Barber# mkisoimages.sh [-b] image-label image-name base-bits-dir [extra-bits-dir]
135523003aSGlen Barber#
145523003aSGlen Barber# Where -b is passed if the ISO image should be made "bootable" by
155523003aSGlen Barber# whatever standards this architecture supports (may be unsupported),
165523003aSGlen Barber# image-label is the ISO image label, image-name is the filename of the
175523003aSGlen Barber# resulting ISO image, base-bits-dir contains the image contents and
185523003aSGlen Barber# extra-bits-dir, if provided, contains additional files to be merged
195523003aSGlen Barber# into base-bits-dir as part of making the image.
205523003aSGlen Barber
215523003aSGlen Barberset -e
225523003aSGlen Barber
235523003aSGlen Barberscriptdir=$(dirname $(realpath $0))
245523003aSGlen Barber. ${scriptdir}/../../tools/boot/install-boot.sh
255523003aSGlen Barber
265523003aSGlen Barberif [ -z $ETDUMP ]; then
275523003aSGlen Barber	ETDUMP=etdump
285523003aSGlen Barberfi
295523003aSGlen Barber
305523003aSGlen Barberif [ -z $MAKEFS ]; then
315523003aSGlen Barber	MAKEFS=makefs
325523003aSGlen Barberfi
335523003aSGlen Barber
345523003aSGlen Barberif [ -z $MKIMG ]; then
355523003aSGlen Barber	MKIMG=mkimg
365523003aSGlen Barberfi
375523003aSGlen Barber
385523003aSGlen Barberif [ "$1" = "-b" ]; then
3913cb0041SJessica Clarke	MAKEFSARG="$4"
4013cb0041SJessica Clarkeelse
4113cb0041SJessica Clarke	MAKEFSARG="$3"
4213cb0041SJessica Clarkefi
435523003aSGlen Barber
4413cb0041SJessica Clarkeif [ -f ${MAKEFSARG} ]; then
4513cb0041SJessica Clarke	BASEBITSDIR=`dirname ${MAKEFSARG}`
4613cb0041SJessica Clarke	METALOG=${MAKEFSARG}
4713cb0041SJessica Clarkeelif [ -d ${MAKEFSARG} ]; then
4813cb0041SJessica Clarke	BASEBITSDIR=${MAKEFSARG}
4913cb0041SJessica Clarke	METALOG=
5013cb0041SJessica Clarkeelse
5113cb0041SJessica Clarke	echo "${MAKEFSARG} must exist"
5213cb0041SJessica Clarke	exit 1
5313cb0041SJessica Clarkefi
5413cb0041SJessica Clarke
5513cb0041SJessica Clarkeif [ "$1" = "-b" ]; then
565523003aSGlen Barber	# Make an EFI system partition.
575523003aSGlen Barber	espfilename=$(mktemp /tmp/efiboot.XXXXXX)
585523003aSGlen Barber	# ESP file size in KB.
595523003aSGlen Barber	espsize="2048"
605523003aSGlen Barber	make_esp_file ${espfilename} ${espsize} ${BASEBITSDIR}/boot/loader.efi
615523003aSGlen Barber
625523003aSGlen Barber	bootable="-o bootimage=efi;${espfilename} -o no-emul-boot -o platformid=efi"
635523003aSGlen Barber
645523003aSGlen Barber	shift
655523003aSGlen Barberelse
665523003aSGlen Barber	bootable=""
675523003aSGlen Barberfi
685523003aSGlen Barber
695523003aSGlen Barberif [ $# -lt 3 ]; then
705523003aSGlen Barber	echo "Usage: $0 [-b] image-label image-name base-bits-dir [extra-bits-dir]"
715523003aSGlen Barber	exit 1
725523003aSGlen Barberfi
735523003aSGlen Barber
745523003aSGlen BarberLABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift
755523003aSGlen BarberNAME="$1"; shift
7613cb0041SJessica Clarke# MAKEFSARG extracted already
7713cb0041SJessica Clarkeshift
785523003aSGlen Barber
795523003aSGlen Barberpublisher="The FreeBSD Project.  https://www.FreeBSD.org/"
805523003aSGlen Barberecho "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$BASEBITSDIR/etc/fstab"
8113cb0041SJessica Clarkeif [ -n "${METALOG}" ]; then
8213cb0041SJessica Clarke	metalogfilename=$(mktemp /tmp/metalog.XXXXXX)
8313cb0041SJessica Clarke	cat ${METALOG} > ${metalogfilename}
8413cb0041SJessica Clarke	echo "./etc/fstab type=file uname=root gname=wheel mode=0644" >> ${metalogfilename}
8513cb0041SJessica Clarke	MAKEFSARG=${metalogfilename}
8613cb0041SJessica Clarkefi
871a9b1c36SJessica Clarke$MAKEFS -D -N ${BASEBITSDIR}/etc -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$MAKEFSARG" "$@"
885523003aSGlen Barberrm -f "$BASEBITSDIR/etc/fstab"
895523003aSGlen Barberrm -f ${espfilename}
9013cb0041SJessica Clarkeif [ -n "${METALOG}" ]; then
9113cb0041SJessica Clarke	rm ${metalogfilename}
9213cb0041SJessica Clarkefi
935523003aSGlen Barber
945523003aSGlen Barberif [ "$bootable" != "" ]; then
955523003aSGlen Barber	# Look for the EFI System Partition image we dropped in the ISO image.
965523003aSGlen Barber	for entry in `$ETDUMP --format shell $NAME`; do
975523003aSGlen Barber		eval $entry
985523003aSGlen Barber		# XXX: etdump(8) returns "default" for the initial entry
995523003aSGlen Barber		if [ "$et_platform" = "default" ]; then
1005523003aSGlen Barber			espstart=`expr $et_lba \* 2048`
1015523003aSGlen Barber			espsize=`expr $et_sectors \* 512`
1025523003aSGlen Barber			espparam="-p efi::$espsize:$espstart"
1035523003aSGlen Barber			break
1045523003aSGlen Barber		fi
1055523003aSGlen Barber	done
1065523003aSGlen Barber
1075523003aSGlen Barber	# Create a GPT image containing the EFI partition.
108045c8f52SJessica Clarke	efifilename=$(mktemp /tmp/efi.img.XXXXXX)
109cefe5879SJessica Clarke	if [ "$(uname -s)" = "Linux" ]; then
110cefe5879SJessica Clarke		imgsize=`stat -c %s "$NAME"`
111cefe5879SJessica Clarke	else
1125523003aSGlen Barber		imgsize=`stat -f %z "$NAME"`
113cefe5879SJessica Clarke	fi
1145523003aSGlen Barber	$MKIMG -s gpt \
1155523003aSGlen Barber	    --capacity $imgsize \
1165523003aSGlen Barber	    $espparam \
117045c8f52SJessica Clarke	    -o $efifilename
1185523003aSGlen Barber
1195523003aSGlen Barber	# Drop the GPT into the System Area of the ISO.
120045c8f52SJessica Clarke	dd if=$efifilename of="$NAME" bs=32k count=1 conv=notrunc
121045c8f52SJessica Clarke	rm -f $efifilename
1225523003aSGlen Barberfi
123