Changeset View
Changeset View
Standalone View
Standalone View
release/amd64/mkisoimages.sh
Show All 17 Lines | |||||
# | # | ||||
# Where -b is passed if the ISO image should be made "bootable" by | # Where -b is passed if the ISO image should be made "bootable" by | ||||
# whatever standards this architecture supports (may be unsupported), | # whatever standards this architecture supports (may be unsupported), | ||||
# image-label is the ISO image label, image-name is the filename of the | # 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 | # resulting ISO image, base-bits-dir contains the image contents and | ||||
# extra-bits-dir, if provided, contains additional files to be merged | # extra-bits-dir, if provided, contains additional files to be merged | ||||
# into base-bits-dir as part of making the image. | # into base-bits-dir as part of making the image. | ||||
if [ -z $MAKEFS ]; then | |||||
MAKEFS=makefs | |||||
fi | |||||
if [ -z $MKIMG ]; then | |||||
MKIMG=mkimg | |||||
fi | |||||
if [ "$1" = "-b" ]; then | if [ "$1" = "-b" ]; then | ||||
# This is highly x86-centric and will be used directly below. | # This is highly x86-centric and will be used directly below. | ||||
bootable="-o bootimage=i386;$4/boot/cdboot -o no-emul-boot" | bootable="-o bootimage=i386;$4/boot/cdboot -o no-emul-boot" | ||||
# Make EFI system partition (should be done with makefs in the future) | # Make EFI system partition (should be done with makefs in the future) | ||||
dd if=/dev/zero of=efiboot.img bs=4k count=200 | dd if=/dev/zero of=efiboot.img bs=4k count=200 | ||||
device=`mdconfig -a -t vnode -f efiboot.img` | device=`mdconfig -a -t vnode -f efiboot.img` | ||||
newfs_msdos -F 12 -m 0xf8 /dev/$device | newfs_msdos -F 12 -m 0xf8 /dev/$device | ||||
Show All 16 Lines | if [ $# -lt 3 ]; then | ||||
exit 1 | exit 1 | ||||
fi | fi | ||||
LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift | LABEL=`echo "$1" | tr '[:lower:]' '[:upper:]'`; shift | ||||
NAME="$1"; shift | NAME="$1"; shift | ||||
publisher="The FreeBSD Project. https://www.FreeBSD.org/" | publisher="The FreeBSD Project. https://www.FreeBSD.org/" | ||||
echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$1/etc/fstab" | echo "/dev/iso9660/$LABEL / cd9660 ro 0 0" > "$1/etc/fstab" | ||||
makefs -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$@" | $MAKEFS -t cd9660 $bootable -o rockridge -o label="$LABEL" -o publisher="$publisher" "$NAME" "$@" | ||||
rm -f "$1/etc/fstab" | rm -f "$1/etc/fstab" | ||||
rm -f efiboot.img | rm -f efiboot.img | ||||
if [ "$bootable" != "" ]; then | if [ "$bootable" != "" ]; then | ||||
# Look for the EFI System Partition image we dropped in the ISO image. | # Look for the EFI System Partition image we dropped in the ISO image. | ||||
for entry in `etdump --format shell $NAME`; do | for entry in `etdump --format shell $NAME`; do | ||||
eval $entry | eval $entry | ||||
if [ "$et_platform" = "efi" ]; then | if [ "$et_platform" = "efi" ]; then | ||||
espstart=`expr $et_lba \* 2048` | espstart=`expr $et_lba \* 2048` | ||||
espsize=`expr $et_sectors \* 512` | espsize=`expr $et_sectors \* 512` | ||||
espparam="-p efi::$espsize:$espstart" | espparam="-p efi::$espsize:$espstart" | ||||
break | break | ||||
fi | fi | ||||
done | done | ||||
# Create a GPT image containing the partitions we need for hybrid boot. | # Create a GPT image containing the partitions we need for hybrid boot. | ||||
imgsize=`stat -f %z $NAME` | imgsize=`stat -f %z $NAME` | ||||
mkimg -s gpt \ | $MKIMG -s gpt \ | ||||
--capacity $imgsize \ | --capacity $imgsize \ | ||||
-b $4/boot/pmbr \ | -b $4/boot/pmbr \ | ||||
$espparam \ | $espparam \ | ||||
-p freebsd-boot:=$4/boot/isoboot \ | -p freebsd-boot:=$4/boot/isoboot \ | ||||
-o hybrid.img | -o hybrid.img | ||||
# Drop the PMBR, GPT, and boot code into the System Area of the ISO. | # Drop the PMBR, GPT, and boot code into the System Area of the ISO. | ||||
dd if=hybrid.img of=$NAME bs=32k count=1 conv=notrunc | dd if=hybrid.img of=$NAME bs=32k count=1 conv=notrunc | ||||
rm -f hybrid.img | rm -f hybrid.img | ||||
fi | fi |