Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F107122747
D28897.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
8 KB
Referenced Files
None
Subscribers
None
D28897.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D28897: Mount ESP on newly-installed systems
Attached
Detach File
Event Timeline
Log In to Comment