diff options
author | Rebecca Cran <bcran@FreeBSD.org> | 2018-12-20 19:39:37 +0000 |
---|---|---|
committer | Rebecca Cran <bcran@FreeBSD.org> | 2018-12-20 19:39:37 +0000 |
commit | db8b56134506840832bec2d1ce07b9e00d4d6d71 (patch) | |
tree | 242e3d5aea577a1691fc784b6b35da9690e23d5c /tools/boot/rootgen.sh | |
parent | d5cee48f3e65662051e15c85e4fc1841d72977fe (diff) | |
download | src-db8b56134506840832bec2d1ce07b9e00d4d6d71.tar.gz src-db8b56134506840832bec2d1ce07b9e00d4d6d71.zip |
Rework UEFI ESP generation
Currently, the installer uses pre-created 800KB FAT12 filesystems that
it dd's onto the ESP partition.
This changeset improves that by having the installer generate a FAT32
filesystem directly onto the ESP using newfs_msdos and then copying
loader.efi into /EFI/freebsd.
For live installs it then runs efibootmgr to add a FreeBSD boot entry
in the BIOS.
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D17947
Notes
Notes:
svn path=/head/; revision=342283
Diffstat (limited to 'tools/boot/rootgen.sh')
-rwxr-xr-x | tools/boot/rootgen.sh | 54 |
1 files changed, 16 insertions, 38 deletions
diff --git a/tools/boot/rootgen.sh b/tools/boot/rootgen.sh index 87b541bdf4b0..4faf9335ca71 100755 --- a/tools/boot/rootgen.sh +++ b/tools/boot/rootgen.sh @@ -5,7 +5,8 @@ passphrase=passphrase iterations=50000 -do_boot1_efi=0 +# The smallest FAT32 filesystem is 33292 KB +espsize=33292 # # Builds all the bat-shit crazy combinations we support booting from, @@ -16,13 +17,13 @@ do_boot1_efi=0 # Sad panda sez: this runs as root, but could be userland if someone # creates userland geli and zfs tools. # -# This assumes an external prograam install-boot.sh which will install +# This assumes an external program install-boot.sh which will install # the appropriate boot files in the appropriate locations. # # These images assume ada0 will be the root image. We should likely # use labels, but we don't. # -# ASsumes you've already rebuilt... maybe bad? Also maybe bad: the env +# Assumes you've already rebuilt... maybe bad? Also maybe bad: the env # vars should likely be conditionally set to allow better automation. # @@ -34,29 +35,6 @@ cpsys() { (cd $src ; tar cf - .) | (cd $dst; tar xf -) } -make_esp() -{ - local src dst md mntpt - src=$1 - dst=$2 - - if [ "${do_boot1_efi}" -eq 1 ]; then - cp ${src}/boot/boot1.efifat ${dst} - else - dd if=/dev/zero of=${dst} count=1 seek=$((100 * 1024 * 1024 / 512)) - md=$(mdconfig -f ${dst}) - newfs_msdos -a 32 /dev/${md} - mntpt=$(mktemp -d /tmp/stand-test.XXXXXX) - mount -t msdos /dev/${md} ${mntpt} -# mkdir -p ${mntpt}/efi/freebsd # not yet - mkdir -p ${mntpt}/efi/boot - cp ${src}/boot/loader.efi ${mntpt}/efi/boot/bootx64.efi - umount ${mntpt} - rmdir ${mntpt} - mdconfig -d -u ${md} - fi -} - mk_nogeli_gpt_ufs_legacy() { src=$1 img=$2 @@ -78,7 +56,7 @@ mk_nogeli_gpt_ufs_uefi() { cat > ${src}/etc/fstab <<EOF /dev/ada0p2 / ufs rw 1 1 EOF - make_esp ${src} ${img}.p1 + make_esp_file ${img}.p1 ${espsize} ${src} makefs -t ffs -B little -s 200m ${img}.p2 ${src} mkimg -s gpt \ -p efi:=${img}.p1 \ @@ -93,7 +71,7 @@ mk_nogeli_gpt_ufs_both() { cat > ${src}/etc/fstab <<EOF /dev/ada0p3 / ufs rw 1 1 EOF - make_esp ${src} ${img}.p1 + make_esp_file ${img}.p1 ${espsize} ${src} makefs -t ffs -B little -s 200m ${img}.p3 ${src} # p1 is boot for uefi, p2 is boot for gpt, p3 is / mkimg -b ${src}/boot/pmbr -s gpt \ @@ -155,7 +133,7 @@ mk_nogeli_gpt_zfs_uefi() { dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) md=$(mdconfig -f ${img}) gpart create -s gpt ${md} - gpart add -t efi -s 800k -a 4k ${md} + gpart add -t efi -s ${espsize}k -a 4k ${md} gpart add -t freebsd-zfs -l root $md # install-boot will make this bootable zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2 @@ -193,7 +171,7 @@ mk_nogeli_gpt_zfs_both() { dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) md=$(mdconfig -f ${img}) gpart create -s gpt ${md} - gpart add -t efi -s 800k -a 4k ${md} + gpart add -t efi -s ${espsize}k -a 4k ${md} gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k gpart add -t freebsd-zfs -l root $md # install-boot will make this bootable @@ -239,7 +217,7 @@ mk_nogeli_mbr_ufs_uefi() { cat > ${src}/etc/fstab <<EOF /dev/ada0s2a / ufs rw 1 1 EOF - make_esp ${src} ${img}.s1 + make_esp_file ${img}.s1 ${espsize} ${src} makefs -t ffs -B little -s 200m ${img}.s2a ${src} mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2 mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img} @@ -253,7 +231,7 @@ mk_nogeli_mbr_ufs_both() { cat > ${src}/etc/fstab <<EOF /dev/ada0s2a / ufs rw 1 1 EOF - make_esp ${src} ${img}.s1 + make_esp_file ${img}.s1 ${espsize} ${src} makefs -t ffs -B little -s 200m ${img}.s2a ${src} mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2 mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img} @@ -313,7 +291,7 @@ mk_nogeli_mbr_zfs_uefi() { dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) md=$(mdconfig -f ${img}) gpart create -s mbr ${md} - gpart add -t \!239 -s 800k ${md} + gpart add -t efi -s ${espsize}k ${md} gpart add -t freebsd ${md} gpart set -a active -i 2 ${md} gpart create -s bsd ${md}s2 @@ -354,7 +332,7 @@ mk_nogeli_mbr_zfs_both() { dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) md=$(mdconfig -f ${img}) gpart create -s mbr ${md} - gpart add -t \!239 -s 800k ${md} + gpart add -t efi -s ${espsize}k ${md} gpart add -t freebsd ${md} gpart set -a active -i 2 ${md} gpart create -s bsd ${md}s2 @@ -430,7 +408,7 @@ mk_geli_gpt_ufs_uefi() { dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) md=$(mdconfig -f ${img}) gpart create -s gpt ${md} - gpart add -t efi -s 800k -a 4k ${md} + gpart add -t efi -s ${espsize}k -a 4k ${md} gpart add -t freebsd-ufs -l root $md # install-boot will make this bootable echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2 @@ -466,7 +444,7 @@ mk_geli_gpt_ufs_both() { dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) md=$(mdconfig -f ${img}) gpart create -s gpt ${md} - gpart add -t efi -s 800k -a 4k ${md} + gpart add -t efi -s ${espsize}k -a 4k ${md} gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k gpart add -t freebsd-ufs -l root $md # install-boot will make this bootable @@ -547,7 +525,7 @@ mk_geli_gpt_zfs_uefi() { dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) md=$(mdconfig -f ${img}) gpart create -s gpt ${md} - gpart add -t efi -s 800k -a 4k ${md} + gpart add -t efi -s ${espsize}k -a 4k ${md} gpart add -t freebsd-zfs -l root $md # install-boot will make this bootable echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2 @@ -590,7 +568,7 @@ mk_geli_gpt_zfs_both() { dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) md=$(mdconfig -f ${img}) gpart create -s gpt ${md} - gpart add -t efi -s 800k -a 4k ${md} + gpart add -t efi -s ${espsize}k -a 4k ${md} gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k gpart add -t freebsd-zfs -l root $md # install-boot will make this bootable |