Page MenuHomeFreeBSD

D28897.diff
No OneTemporary

D28897.diff

diff --git a/usr.sbin/bsdinstall/partedit/gpart_ops.c b/usr.sbin/bsdinstall/partedit/gpart_ops.c
--- a/usr.sbin/bsdinstall/partedit/gpart_ops.c
+++ b/usr.sbin/bsdinstall/partedit/gpart_ops.c
@@ -707,18 +707,8 @@
if (strcmp(type, "freebsd-swap") == 0)
mountpoint = "none";
if (strcmp(type, bootpart_type(scheme, &default_bootmount)) == 0) {
- if (default_bootmount == NULL) {
-
- int fd = openat(tmpdfd, "bsdinstall-esps",
- O_CREAT | O_WRONLY | O_APPEND, 0600);
- if (fd > 0) {
- write(fd, md->name, strlen(md->name));
- write(fd, "\n", 1);
- close(fd);
- }
-
+ if (default_bootmount == NULL)
md->bootcode = 1;
- }
else if (mountpoint == NULL || strlen(mountpoint) == 0)
mountpoint = default_bootmount;
}
diff --git a/usr.sbin/bsdinstall/partedit/partedit_efi.c b/usr.sbin/bsdinstall/partedit/partedit_efi.c
--- a/usr.sbin/bsdinstall/partedit/partedit_efi.c
+++ b/usr.sbin/bsdinstall/partedit/partedit_efi.c
@@ -85,6 +85,7 @@
{
/* Only EFI is supported as boot partition */
+ *mountpoint = "/boot/efi";
return ("efi");
}
diff --git a/usr.sbin/bsdinstall/partedit/partedit_x86.c b/usr.sbin/bsdinstall/partedit/partedit_x86.c
--- a/usr.sbin/bsdinstall/partedit/partedit_x86.c
+++ b/usr.sbin/bsdinstall/partedit/partedit_x86.c
@@ -113,8 +113,10 @@
bootpart_type(const char *scheme, const char **mountpoint)
{
- if (strcmp(x86_bootmethod(), "UEFI") == 0)
+ if (strcmp(x86_bootmethod(), "UEFI") == 0) {
+ *mountpoint = "/boot/efi";
return ("efi");
+ }
return ("freebsd-boot");
}
diff --git a/usr.sbin/bsdinstall/scripts/bootconfig b/usr.sbin/bsdinstall/scripts/bootconfig
--- a/usr.sbin/bsdinstall/scripts/bootconfig
+++ b/usr.sbin/bsdinstall/scripts/bootconfig
@@ -46,84 +46,8 @@
fi
fi
-# Update the ESP (EFI System Partition) with the new bootloader
-if [ "$(uname -m)" = "amd64" ] || [ "$(uname -m)" = "i386" ]; then
- X86_BOOTMETHOD=$(sysctl -n machdep.bootmethod)
-fi
-
-if [ "$(uname -m)" = "arm64" ] || [ "$(uname -m)" = "riscv" ] || [ "$X86_BOOTMETHOD" = "UEFI" ]; then
- UFSBOOT_ESPS=$(cat $TMPDIR/bsdinstall-esps 2>/dev/null)
- ZFSBOOT_DISKS=$(cat $TMPDIR/bsdinstall-zfsboot 2>/dev/null)
- num_esps=0
-
- if [ -n "$ZFSBOOT_DISKS" ]; then
- # We're in a ZFS install environment
- for disk in $ZFSBOOT_DISKS; do
- index=$(gpart show "$disk" | cut -w -f 4,5 | grep "efi" | cut -w -f 1)
- # Check that $index is an integer
- [ -n "$index" ] && [ "$index" -eq "$index" ] && [ "$index" -ge 0 ] 2> /dev/null
- if [ $? -ne 0 ]; then
- continue
- fi
-
- if [ -e "/dev/${disk}p${index}" ]; then
- ESPS="$ESPS ${disk}p${index}"
- elif [ -e "/dev/${disk}s${index}" ]; then
- ESPS="$ESPS ${disk}s${index}"
- else
- continue
- fi
-
- num_esps=$((num_esps + 1))
- done
- fi
-
- if [ -n "$UFSBOOT_ESPS" ]; then
- # We're in a UFS install environment
- for partition in $UFSBOOT_ESPS; do
- ESPS="$ESPS $partition"
- num_esps=$((num_esps + 1))
- done
- fi
-
- if [ -z "$ESPS" ]; then
- # The installer hasn't given us any ESPs to use.
- # Try and figure out which to use by looking for an
- # unformatted efi partition
-
- for geom in $(gpart status -sg | awk '{print $1}'); do
- hasfreebsd=$(gpart show "${geom}" | cut -w -f 4,5 | grep "freebsd")
- if [ -n "$hasfreebsd" ]; then
- index=$(gpart show "${geom}" | cut -w -f 4,5 | grep "efi" | cut -w -f 1)
- # Check that $index is a valid integer
- [ -n "$index" ] && [ "$index" -eq "$index" ] && [ "$index" -ge 0 ] 2> /dev/null
- if [ $? -ne 0 ]; then
- continue
- fi
-
- mntpt=$(mktemp -d $TMPDIR/stand-test.XXXXXX)
- if [ -e "/dev/${geom}p${index}" ]; then
- dev=${geom}p${index}
- elif [ -e "/dev/${geom}s${index}" ]; then
- dev=/${geom}s${index}
- else
- continue
- fi
-
- # Try and mount it. If it fails, assume it's
- # unformatted and should be used.
- mount -t msdosfs -o ro "/dev/${dev}" "${mntpt}"
- if [ $? -ne 0 ]; then
- ESPS="$ESPS ${dev}"
- num_esps=$((num_esps + 1))
- else
- umount "${mntpt}"
- fi
- rmdir "${mntpt}"
- fi
- done
- fi
-
+# Update the ESP (EFI System Partition) with the new bootloader if we have an ESP
+if [ -d "$BSDINSTALL_CHROOT/boot/efi" ]; then
case $(uname -m) in
arm64) ARCHBOOTNAME=aa64 ;;
amd64) ARCHBOOTNAME=x64 ;;
@@ -136,55 +60,33 @@
BOOTNAME="${BOOTDIR}/boot${ARCHBOOTNAME}.efi"
FREEBSD_BOOTDIR="/efi/freebsd"
FREEBSD_BOOTNAME="${FREEBSD_BOOTDIR}/loader.efi"
+ mntpt="$BSDINSTALL_CHROOT/boot/efi"
+
+ f_dprintf "Installing loader.efi onto ESP"
+ mkdir -p "${mntpt}/${FREEBSD_BOOTDIR}" "${mntpt}/${BOOTDIR}"
+ cp "$BSDINSTALL_CHROOT/boot/loader.efi" "${mntpt}/${FREEBSD_BOOTNAME}"
+
+ #
+ # The following shouldn't be necessary. UEFI defines a way to
+ # specifically select what to boot (which we do via
+ # efibootmgr). However, virtual environments often times lack
+ # support for the NV variables efibootmgr sets. In addition,
+ # some UEFI implementations have features that interfere with
+ # the setting of these variables. To combat that, we install the
+ # default removable media boot file as a fallback if it doesn't
+ # exist. We don't install it all the time since that can
+ # interfere with other installations on the drive (like rEFInd).
+ #
+ if [ ! -f "${mntpt}/${BOOTNAME}" ]; then
+ cp "$BSDINSTALL_CHROOT/boot/loader.efi" "${mntpt}/${BOOTNAME}"
+ fi
- for esp in $ESPS; do
- f_dprintf "Formatting /dev/${esp} as FAT32"
- newfs_msdos -F 32 -c 1 -L EFISYS "/dev/$esp" > /dev/null 2>&1
- if [ $? -ne 0 ]; then
- die "Failed to format ESP $esp as FAT32"
- fi
-
- mntpt=$(mktemp -d $TMPDIR/stand-test.XXXXXX)
- f_dprintf "Mounting ESP /dev/${esp}"
- mount -t msdosfs "/dev/${esp}" "${mntpt}"
- if [ $? -ne 0 ]; then
- die "Failed to mount ESP ${dev} on ${mntpt}"
- fi
-
- f_dprintf "Installing loader.efi onto ESP"
- mkdir -p "${mntpt}/${FREEBSD_BOOTDIR}" "${mntpt}/${BOOTDIR}"
- cp "$BSDINSTALL_CHROOT/boot/loader.efi" "${mntpt}/${FREEBSD_BOOTNAME}"
-
- #
- # The following shouldn't be necessary. UEFI defines a way to
- # specifically select what to boot (which we do via
- # efibootmgr). However, virtual environments often times lack
- # support for the NV variables efibootmgr sets. In addition,
- # some UEFI implementations have features that interfere with
- # the setting of these variables. To combat that, we install the
- # default removable media boot file as a fallback if it doesn't
- # exist. We don't install it all the time since that can
- # interfere with other installations on the drive (like rEFInd).
- #
- if [ ! -f "${mntpt}/${BOOTNAME}" ]; then
- cp "$BSDINSTALL_CHROOT/boot/loader.efi" "${mntpt}/${BOOTNAME}"
- fi
-
- if [ "$num_esps" -gt 1 ]; then
- bootlabel="FreeBSD (${esp})"
- else
- bootlabel="FreeBSD"
- fi
-
- f_dprintf "Creating UEFI boot entry"
- efibootmgr --create --activate --label "$bootlabel" --loader "${mntpt}/${FREEBSD_BOOTNAME}" > /dev/null
+ bootlabel="FreeBSD"
- f_dprintf "Unmounting ESP"
- umount "${mntpt}"
- rmdir "${mntpt}"
+ f_dprintf "Creating UEFI boot entry"
+ efibootmgr --create --activate --label "$bootlabel" --loader "${mntpt}/${FREEBSD_BOOTNAME}" > /dev/null
- f_dprintf "Finished configuring /dev/${esp} as ESP"
- done
+ f_dprintf "Finished configuring ESP"
fi
# Add boot0cfg for MBR BIOS booting?
diff --git a/usr.sbin/bsdinstall/scripts/zfsboot b/usr.sbin/bsdinstall/scripts/zfsboot
--- a/usr.sbin/bsdinstall/scripts/zfsboot
+++ b/usr.sbin/bsdinstall/scripts/zfsboot
@@ -213,6 +213,7 @@
LN_SF='ln -sf "%s" "%s"'
MKDIR_P='mkdir -p "%s"'
MOUNT_TYPE='mount -t %s "%s" "%s"'
+NEWFS_ESP='newfs_msdos "%s"'
PRINTF_CONF="printf '%s=\"%%s\"\\\n' %s >> \"%s\""
PRINTF_FSTAB='printf "$FSTAB_FMT" "%s" "%s" "%s" "%s" "%s" "%s" >> "%s"'
SHELL_TRUNCATE=':> "%s"'
@@ -845,12 +846,25 @@
if [ "$ZFSBOOT_BOOT_TYPE" = "UEFI" -o \
"$ZFSBOOT_BOOT_TYPE" = "BIOS+UEFI" ]
then
- f_eval_catch $funcname gpart \
+ f_eval_catch -k justaddedpart $funcname gpart \
"$GPART_ADD_ALIGN_LABEL_WITH_SIZE" \
- "$align_small" efiboot$index efi 200M \
+ "$align_small" efiboot$index efi 260M \
$disk || return $FAILURE
# We'll configure the ESP in bootconfig
+ if [ -z "$efibootpart" ]; then
+ efibootpart="/dev/$(echo $justaddedpart | cut -f 1 -d ' ')"
+ f_dprintf "$funcname: configuring ESP at [%s]" \
+ "${efibootpart}"
+
+ f_eval_catch $funcname newfs_msdos "$NEWFS_ESP"\
+ "$efibootpart" \
+ || return $FAILURE
+ f_eval_catch $funcname printf "$PRINTF_FSTAB" \
+ $efibootpart /boot/efi msdosfs \
+ rw 2 2 "$BSDINSTALL_TMPETC/fstab" \
+ || return $FAILURE
+ fi
fi
if [ "$ZFSBOOT_BOOT_TYPE" = "BIOS" -o \
@@ -1066,6 +1080,7 @@
local isswapmirror
local bootpart targetpart swappart # Set by zfs_create_diskpart() below
local create_options
+ local efibootpart
#
# Pedantic checks; should never be seen

File Metadata

Mime Type
text/plain
Expires
Sat, Jan 11, 11:29 AM (3 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15753349
Default Alt Text
D28897.diff (8 KB)

Event Timeline