* [pve-devel] [PATCH pve-kernel-meta 1/5] rename pve-efiboot-manual-kernels to proxmox-boot-manual-kernels
2022-02-14 15:57 [pve-devel] [PATCH pve-kernel-meta/pve-installer] improve boot-mode switching Stoiko Ivanov
@ 2022-02-14 15:57 ` Stoiko Ivanov
[not found] ` <<20220214155737.1444136-2-s.ivanov@proxmox.com>
2022-02-14 15:57 ` [pve-devel] [PATCH pve-kernel-meta 2/5] proxmox-boot: add reinit subcommand Stoiko Ivanov
` (5 subsequent siblings)
6 siblings, 1 reply; 11+ messages in thread
From: Stoiko Ivanov @ 2022-02-14 15:57 UTC (permalink / raw)
To: pve-devel
was forgotten during the general renaming of pve-efiboot ->
proxmox-boot.
follows commit 8c0a22adfe15dc00cf2194647bb254201d8d187b
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
debian/pve-kernel-helper.postinst | 4 ++++
proxmox-boot/functions | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/debian/pve-kernel-helper.postinst b/debian/pve-kernel-helper.postinst
index 891396c..4c78766 100644
--- a/debian/pve-kernel-helper.postinst
+++ b/debian/pve-kernel-helper.postinst
@@ -8,6 +8,10 @@ case "$1" in
echo "$0: legacy ESP list /etc/kernel/pve-efiboot-uuids found moving to /etc/kernel/proxmox-boot-uuids" 1>&2
mv /etc/kernel/pve-efiboot-uuids /etc/kernel/proxmox-boot-uuids
fi
+ if [ -e /etc/kernel/pve-efiboot-manual-kernels ]; then
+ echo "$0: legacy manual kernel list /etc/kernel/pve-efiboot-manual-kernels found moving to /etc/kernel/proxmox-boot-manual-kernels" 1>&2
+ mv /etc/kernel/pve-efiboot-manual-kernels /etc/kernel/proxmox-boot-manual-kernels
+ fi
;;
esac
diff --git a/proxmox-boot/functions b/proxmox-boot/functions
index b46d198..bdab987 100755
--- a/proxmox-boot/functions
+++ b/proxmox-boot/functions
@@ -4,7 +4,7 @@ set -e
ESP_LIST="/etc/kernel/proxmox-boot-uuids"
ESPTYPE='c12a7328-f81f-11d2-ba4b-00a0c93ec93b'
-MANUAL_KERNEL_LIST="/etc/kernel/pve-efiboot-manual-kernels"
+MANUAL_KERNEL_LIST="/etc/kernel/proxmox-boot-boot-manual-kernels"
PINNED_KERNEL_CONF="/etc/kernel/proxmox-boot-pin"
NEXT_BOOT_PIN="/etc/kernel/next-boot-pin"
--
2.30.2
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH pve-kernel-meta 2/5] proxmox-boot: add reinit subcommand
2022-02-14 15:57 [pve-devel] [PATCH pve-kernel-meta/pve-installer] improve boot-mode switching Stoiko Ivanov
2022-02-14 15:57 ` [pve-devel] [PATCH pve-kernel-meta 1/5] rename pve-efiboot-manual-kernels to proxmox-boot-manual-kernels Stoiko Ivanov
@ 2022-02-14 15:57 ` Stoiko Ivanov
2022-02-14 15:57 ` [pve-devel] [PATCH pve-kernel-meta 3/5] proxmox-boot: refresh based on bootloader config instead of bootmode Stoiko Ivanov
` (4 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Stoiko Ivanov @ 2022-02-14 15:57 UTC (permalink / raw)
To: pve-devel
to iterate over all configured ESPs and refresh the boot-loader
installations.
the init function was changed to not run refresh directly - to prevent
refresh from running once for each ESP
currently reinit does not imply refresh
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
bin/grub-install-wrapper | 19 ++-----------------
bin/proxmox-boot-tool | 39 +++++++++++++++++++++++++++++++++++----
2 files changed, 37 insertions(+), 21 deletions(-)
diff --git a/bin/grub-install-wrapper b/bin/grub-install-wrapper
index 9facd04..90c144e 100755
--- a/bin/grub-install-wrapper
+++ b/bin/grub-install-wrapper
@@ -2,22 +2,6 @@
set -e
-. /usr/share/pve-kernel-helper/scripts/functions
-
-init_boot_disks() {
- if ! (echo "${curr_uuid}" | grep -qE '[0-9a-fA-F]{4}-[0-9a-fA-F]{4}'); then
- warn "WARN: ${curr_uuid} read from ${ESP_LIST} does not look like a VFAT-UUID - skipping"
- return
- fi
-
- path="/dev/disk/by-uuid/$curr_uuid"
- if [ ! -e "${path}" ]; then
- warn "WARN: ${path} does not exist - clean '${ESP_LIST}'! - skipping"
- return
- fi
- proxmox-boot-tool init "$path"
-}
-
if proxmox-boot-tool status --quiet; then
# detect when being called by dpkg (e.g. grub-pc.postinst
if [ -n "$DPKG_RUNNING_VERSION" ] && echo "$DPKG_MAINTSCRIPT_PACKAGE" | grep -sq "^grub-"; then
@@ -28,7 +12,8 @@ if proxmox-boot-tool status --quiet; then
MARKER_FILE="/tmp/proxmox-boot-tool.dpkg.marker"
if [ ! -e "$MARKER_FILE" ]; then
warn "This system is booted via proxmox-boot-tool, running proxmox-boot-tool init for all configured bootdisks"
- loop_esp_list init_boot_disks
+ proxmox-boot-tool reinit
+ proxmox-boot-tool refresh
touch "$MARKER_FILE"
exit 0
else
diff --git a/bin/proxmox-boot-tool b/bin/proxmox-boot-tool
index 178b6fb..5197f5b 100755
--- a/bin/proxmox-boot-tool
+++ b/bin/proxmox-boot-tool
@@ -124,7 +124,7 @@ format() {
exit 0
}
-init() {
+init_bootloader() {
part="$1"
_get_partition_info "$part"
@@ -174,8 +174,20 @@ init() {
echo "Adding '$part' to list of synced ESPs.."
_add_entry_to_list_file "$ESP_LIST" "$UUID"
- echo "Refreshing kernels and initrds.."
- refresh
+}
+
+reinit() {
+ if ! (echo "${curr_uuid}" | grep -qE '[0-9a-fA-F]{4}-[0-9a-fA-F]{4}'); then
+ warn "WARN: ${curr_uuid} read from ${ESP_LIST} does not look like a VFAT-UUID - skipping"
+ return
+ fi
+
+ path="/dev/disk/by-uuid/$curr_uuid"
+ if [ ! -e "${path}" ]; then
+ warn "WARN: ${path} does not exist - clean '${ESP_LIST}'! - skipping"
+ return
+ fi
+ init_bootloader "$path"
}
_clean_impl() {
@@ -306,6 +318,7 @@ usage() {
warn ""
warn " $0 format <partition> [--force]"
warn " $0 init <partition>"
+ warn " $0 reinit"
warn " $0 clean [--dry-run]"
warn " $0 refresh [--hook <name>]"
warn " $0 kernel <add|remove> <kernel-version>"
@@ -325,6 +338,10 @@ help() {
echo ""
echo " initialize EFI system partition at <partition> for automatic synchronization of pve-kernels and their associated initrds."
echo ""
+ echo "USAGE: $0 reinit"
+ echo ""
+ echo " reinitialize all configured EFI system partitions from $ESP_LIST."
+ echo ""
echo "USAGE: $0 clean [--dry-run]"
echo ""
echo " remove no longer existing EFI system partition UUIDs from $ESP_LIST. Use --dry-run to only print outdated entries instead of removing them."
@@ -493,7 +510,21 @@ case "$1" in
usage
exit 1
fi
- init "$@"
+ init_bootloader "$@"
+ echo "Refreshing kernels and initrds.."
+ refresh
+ exit 0
+ ;;
+ 'reinit')
+ reexec_in_mountns "$@"
+ shift
+ if [ "$#" -eq 1 ]; then
+ warn "E: no arguments allowed."
+ warn ""
+ usage
+ exit 1
+ fi
+ loop_esp_list reinit "$@"
exit 0
;;
'clean')
--
2.30.2
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH pve-kernel-meta 3/5] proxmox-boot: refresh based on bootloader config instead of bootmode
2022-02-14 15:57 [pve-devel] [PATCH pve-kernel-meta/pve-installer] improve boot-mode switching Stoiko Ivanov
2022-02-14 15:57 ` [pve-devel] [PATCH pve-kernel-meta 1/5] rename pve-efiboot-manual-kernels to proxmox-boot-manual-kernels Stoiko Ivanov
2022-02-14 15:57 ` [pve-devel] [PATCH pve-kernel-meta 2/5] proxmox-boot: add reinit subcommand Stoiko Ivanov
@ 2022-02-14 15:57 ` Stoiko Ivanov
[not found] ` <<<20220214155737.1444136-4-s.ivanov@proxmox.com>
2022-02-14 15:57 ` [pve-devel] [PATCH pve-kernel-meta 4/5] proxmox-boot: init bootloaders based on esp contents Stoiko Ivanov
` (3 subsequent siblings)
6 siblings, 1 reply; 11+ messages in thread
From: Stoiko Ivanov @ 2022-02-14 15:57 UTC (permalink / raw)
To: pve-devel
ignore the current bootmode (uefi/legacy) when deciding which configs
to generate - make this decision based on the found boot loader
configs on the ESP.
Change systemd-boot to load the kernel+initrd from the ESPs root where
grub needs them. This prevents the double use of space for systems
having both boot-loaders present (since FAT does not support
symlinks). While this is against the recommendations of the
boot-loader-specification [0]) it works fine (and we deviate from [0]
by not having the machine-id in the kernel subdirs anyways).
The UEFI spec on the directory structure [1], also should be fine with
it.
Additionally adapt the output of `p-b-t status` to the new paths
[0] https://systemd.io/BOOT_LOADER_SPECIFICATION/
[1] section 13.3.1.3 of
https://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
bin/proxmox-boot-tool | 14 +++----
proxmox-boot/zz-proxmox-boot | 78 ++++++++++++------------------------
2 files changed, 32 insertions(+), 60 deletions(-)
diff --git a/bin/proxmox-boot-tool b/bin/proxmox-boot-tool
index 5197f5b..320f49b 100755
--- a/bin/proxmox-boot-tool
+++ b/bin/proxmox-boot-tool
@@ -396,20 +396,18 @@ _status_detail() {
result=""
if [ -f "${mountpoint}/$PMX_LOADER_CONF" ]; then
- if [ ! -d "${mountpoint}/$PMX_ESP_DIR" ]; then
- warn "${path}/$PMX_ESP_DIR does not exist"
- fi
- versions_uefi=$(ls -1 ${mountpoint}/$PMX_ESP_DIR | awk '{printf (NR>1?", ":"") $0}')
- result="uefi (versions: ${versions_uefi})"
+ result="uefi"
fi
if [ -d "${mountpoint}/grub" ]; then
- versions_grub=$(ls -1 ${mountpoint}/vmlinuz-* | awk '{ gsub(/.*\/vmlinuz-/, ""); printf (NR>1?", ":"") $0 }')
if [ -n "$result" ]; then
- result="${result}, grub (versions: ${versions_grub})"
+ result="${result}, grub"
else
- result="grub (versions: ${versions_grub})"
+ result="grub"
fi
fi
+ versions=$(find "${mountpoint}" -maxdepth 1 -name 'vmlinuz-*' | awk '{ gsub(/.*\/vmlinuz-/, ""); printf (NR>1?", ":"") $0 }')
+ result="${result} (versions: ${versions})"
+
echo "$curr_uuid is configured with: $result"
umount "${mountpoint}" || \
{ warn "umount of ${path} failed - failure"; exit 0; }
diff --git a/proxmox-boot/zz-proxmox-boot b/proxmox-boot/zz-proxmox-boot
index 5fe16a6..244373d 100755
--- a/proxmox-boot/zz-proxmox-boot
+++ b/proxmox-boot/zz-proxmox-boot
@@ -75,33 +75,33 @@ update_esp_func() {
{ warn "creation of mountpoint ${mountpoint} failed - skipping"; return; }
mount "${path}" "${mountpoint}" || \
{ warn "mount of ${path} failed - skipping"; return; }
- if [ -d /sys/firmware/efi ]; then
- if [ ! -f "${mountpoint}/$PMX_LOADER_CONF" ]; then
- warn "${path} contains no loader.conf - skipping"
- return
- fi
- if [ ! -d "${mountpoint}/$PMX_ESP_DIR" ]; then
- warn "${path}/$PMX_ESP_DIR does not exist- skipping"
- return
- fi
- elif [ ! -d "${mountpoint}/grub" ]; then
- warn "${path} contains no grub directory - skipping"
+ sd_boot=""
+ grub=""
+ if [ -f "${mountpoint}/$PMX_LOADER_CONF" ]; then
+ sd_boot=1
+ fi
+ if [ -d "${mountpoint}/grub" ]; then
+ grub=1
+ fi
+ if [ -z "$sd_boot" ] && [ -z "$grub" ]; then
+ warn "${path} contains no bootloader config - skipping!"
return
fi
warn "Copying and configuring kernels on ${path}"
- copy_and_config_kernels "${mountpoint}"
+ copy_and_config_kernels "${mountpoint}" "${sd_boot}"
pinned_kernel=$(get_first_line "${PINNED_KERNEL_CONF}")
if [ -e "${NEXT_BOOT_PIN}" ]; then
pinned_kernel=$(get_first_line "${NEXT_BOOT_PIN}")
fi
- if [ -d /sys/firmware/efi ]; then
+ if [ -n "$sd_boot" ]; then
set_systemd_boot_default "${mountpoint}" "${pinned_kernel}"
- remove_old_kernels_efi "${mountpoint}"
- else
+ remove_old_kernels "${mountpoint}"
+ fi
+ if [ -n "$grub" ]; then
set_grub_default "${pinned_kernel}"
- remove_old_kernels_legacy "${mountpoint}"
+ remove_old_kernels "${mountpoint}"
mount --bind "${mountpoint}" "/boot"
update-grub
umount /boot
@@ -116,7 +116,7 @@ update_esp_func() {
copy_and_config_kernels() {
esp="$1"
-
+ sd_boot="$2"
for kver in ${BOOT_KVERS}; do
@@ -132,52 +132,25 @@ copy_and_config_kernels() {
continue
fi
- if [ -d /sys/firmware/efi ]; then
-
- warn " Copying kernel and creating boot-entry for ${kver}"
- KERNEL_ESP_DIR="${PMX_ESP_DIR}/${kver}"
- KERNEL_LIVE_DIR="${esp}/${KERNEL_ESP_DIR}"
- mkdir -p "${KERNEL_LIVE_DIR}"
- cp --preserve=timestamps "${linux_image}" "${KERNEL_LIVE_DIR}/"
- cp --preserve=timestamps "${initrd}" "${KERNEL_LIVE_DIR}/"
+ warn " Copying kernel and creating boot-entry for ${kver}"
+ cp --preserve=timestamps "${linux_image}" "${esp}/"
+ cp --preserve=timestamps "${initrd}" "${esp}/"
- # create loader entry
+ if [ -n "$sd_boot" ]; then
+ # create loader entry
cat > "${esp}/loader/entries/proxmox-${kver}.conf" <<- EOF
title ${LOADER_TITLE}
version ${kver}
options ${CMDLINE}
- linux /${KERNEL_ESP_DIR}/vmlinuz-${kver}
- initrd /${KERNEL_ESP_DIR}/initrd.img-${kver}
+ linux /vmlinuz-${kver}
+ initrd /initrd.img-${kver}
EOF
- else
- warn " Copying kernel ${kver}"
- cp --preserve=timestamps "${linux_image}" "${esp}/"
- cp --preserve=timestamps "${initrd}" "${esp}/"
- fi
- done
-
-}
-
-remove_old_kernels_efi() {
- esp="$1"
-
- for kerneldir in "${esp}/${PMX_ESP_DIR}"/*; do
- if [ ! -d "${kerneldir}" ]; then
- warn " ${kerneldir} is not a directory - skipping"
- continue
fi
-
- kver="$(echo "${kerneldir}" | sed -r "s#^${esp}/${PMX_ESP_DIR}/(.+)\$#\\1#")"
-
- echo "${BOOT_KVERS}" | grep -q "${kver}" && continue;
- warn " Removing old version ${kver}"
- rm -rf "${kerneldir}"
- rm -f "${esp}/loader/entries/proxmox-${kver}.conf"
done
}
-remove_old_kernels_legacy() {
+remove_old_kernels() {
esp="$1"
for kernel in "${esp}/"vmlinuz-*; do
@@ -187,6 +160,7 @@ remove_old_kernels_legacy() {
warn " Removing old version ${kver}"
rm -rf "${esp}/vmlinuz-${kver}"
rm -rf "${esp}/initrd.img-${kver}"
+ rm -rf "${esp}/loader/entries/proxmox-${kver}.conf"
done
}
--
2.30.2
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH pve-kernel-meta 4/5] proxmox-boot: init bootloaders based on esp contents
2022-02-14 15:57 [pve-devel] [PATCH pve-kernel-meta/pve-installer] improve boot-mode switching Stoiko Ivanov
` (2 preceding siblings ...)
2022-02-14 15:57 ` [pve-devel] [PATCH pve-kernel-meta 3/5] proxmox-boot: refresh based on bootloader config instead of bootmode Stoiko Ivanov
@ 2022-02-14 15:57 ` Stoiko Ivanov
2022-02-14 15:57 ` [pve-devel] [PATCH pve-kernel-meta 5/5] proxmox-boot: allow to manually specify bootloader Stoiko Ivanov
` (2 subsequent siblings)
6 siblings, 0 replies; 11+ messages in thread
From: Stoiko Ivanov @ 2022-02-14 15:57 UTC (permalink / raw)
To: pve-devel
in addition to installing the boot loader for the current bootmode
(grub for legacy, systemd-boot for uefi) also install the bootloader
if its config is already present on the ESP.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
bin/proxmox-boot-tool | 26 ++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)
diff --git a/bin/proxmox-boot-tool b/bin/proxmox-boot-tool
index 320f49b..c697f64 100755
--- a/bin/proxmox-boot-tool
+++ b/bin/proxmox-boot-tool
@@ -127,6 +127,9 @@ format() {
init_bootloader() {
part="$1"
+ install_sd_boot=""
+ install_grub=""
+
_get_partition_info "$part"
if [ -z "$PARTTYPE" ] || [ "$PARTTYPE" != "$ESPTYPE" ]; then
@@ -150,16 +153,35 @@ init_bootloader() {
echo "Mounting '$part' on '$esp_mp'."
mount -t vfat "$part" "$esp_mp"
+ if [ -e "${esp_mp}/$PMX_LOADER_CONF" ]; then
+ install_sd_boot=1
+ fi
+ if [ -d "${esp_mp}/grub" ]; then
+ install_grub=1
+ fi
+ # always init for the current boot-mode
if [ -d /sys/firmware/efi ]; then
+ install_sd_boot=1
+ else
+ install_grub=1
+ fi
+
+ if [ -n "$install_sd_boot" ]; then
echo "Installing systemd-boot.."
mkdir -p "$esp_mp/$PMX_ESP_DIR"
- bootctl --path "$esp_mp" install
+ bootctl_args="--path ${esp_mp}"
+ if [ ! -d /sys/firmware/efi ]; then
+ bootctl_args="${bootctl_args} --no-variables"
+ fi
+ bootctl ${bootctl_args} install
echo "Configuring systemd-boot.."
echo "timeout 3" > "$esp_mp/$PMX_LOADER_CONF.tmp"
echo "default proxmox-*" >> "$esp_mp/$PMX_LOADER_CONF.tmp"
mv "$esp_mp/$PMX_LOADER_CONF.tmp" "$esp_mp/$PMX_LOADER_CONF"
- else
+ fi
+
+ if [ -n "$install_grub" ]; then
echo "Installing grub i386-pc target.."
grub-install.real \
--boot-directory $esp_mp \
--
2.30.2
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH pve-kernel-meta 5/5] proxmox-boot: allow to manually specify bootloader
2022-02-14 15:57 [pve-devel] [PATCH pve-kernel-meta/pve-installer] improve boot-mode switching Stoiko Ivanov
` (3 preceding siblings ...)
2022-02-14 15:57 ` [pve-devel] [PATCH pve-kernel-meta 4/5] proxmox-boot: init bootloaders based on esp contents Stoiko Ivanov
@ 2022-02-14 15:57 ` Stoiko Ivanov
[not found] ` <<20220214155737.1444136-6-s.ivanov@proxmox.com>
2022-02-14 15:57 ` [pve-devel] [PATCH installer 1/2] remove /mnt/hostrun after install Stoiko Ivanov
2022-02-14 15:57 ` [pve-devel] [PATCH installer 2/2] use proxmox-boot-tool for all uefi installs Stoiko Ivanov
6 siblings, 1 reply; 11+ messages in thread
From: Stoiko Ivanov @ 2022-02-14 15:57 UTC (permalink / raw)
To: pve-devel
this commit adds the optional [--legacy|--uefi] arguments to
`p-b-t init`. If provided the respective boot-loader is installed
(regardless of what is found on the esp, and of the boot-mode)
This should make switching the boot-mode possible without the need
to boot into a live CD, chrooting and manually running the necessary
p-b-t commands.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
bin/proxmox-boot-tool | 47 ++++++++++++++++++++++++++++---------------
1 file changed, 31 insertions(+), 16 deletions(-)
diff --git a/bin/proxmox-boot-tool b/bin/proxmox-boot-tool
index c697f64..68401ee 100755
--- a/bin/proxmox-boot-tool
+++ b/bin/proxmox-boot-tool
@@ -126,6 +126,7 @@ format() {
init_bootloader() {
part="$1"
+ mode="$2"
install_sd_boot=""
install_grub=""
@@ -153,17 +154,25 @@ init_bootloader() {
echo "Mounting '$part' on '$esp_mp'."
mount -t vfat "$part" "$esp_mp"
- if [ -e "${esp_mp}/$PMX_LOADER_CONF" ]; then
- install_sd_boot=1
- fi
- if [ -d "${esp_mp}/grub" ]; then
- install_grub=1
- fi
- # always init for the current boot-mode
- if [ -d /sys/firmware/efi ]; then
- install_sd_boot=1
+ if [ -n "$mode" ]; then
+ if [ "$mode" = "--uefi" ]; then
+ install_sd_boot=1
+ elif [ "$mode" = "--legacy" ]; then
+ install_grub=1
+ fi
else
- install_grub=1
+ if [ -e "${esp_mp}/$PMX_LOADER_CONF" ]; then
+ install_sd_boot=1
+ fi
+ if [ -d "${esp_mp}/grub" ]; then
+ install_grub=1
+ fi
+ # always init for the current boot-mode
+ if [ -d /sys/firmware/efi ]; then
+ install_sd_boot=1
+ else
+ install_grub=1
+ fi
fi
if [ -n "$install_sd_boot" ]; then
@@ -192,7 +201,6 @@ init_bootloader() {
fi
echo "Unmounting '$part'."
umount "$part"
-
echo "Adding '$part' to list of synced ESPs.."
_add_entry_to_list_file "$ESP_LIST" "$UUID"
@@ -339,7 +347,7 @@ usage() {
warn "USAGE: $0 <commands> [ARGS]"
warn ""
warn " $0 format <partition> [--force]"
- warn " $0 init <partition>"
+ warn " $0 init <partition> [--legacy|--uefi]"
warn " $0 reinit"
warn " $0 clean [--dry-run]"
warn " $0 refresh [--hook <name>]"
@@ -530,10 +538,17 @@ case "$1" in
usage
exit 1
fi
- init_bootloader "$@"
- echo "Refreshing kernels and initrds.."
- refresh
- exit 0
+ if [ -z "$2" ] || [ "$2" = "--legacy" ] || [ "$2" = "--uefi" ]; then
+ init_bootloader "$@"
+ echo "Refreshing kernels and initrds.."
+ refresh
+ exit 0
+ else
+ warn "E: invalid 'init' mode '$2'."
+ warn ""
+ usage
+ exit 1
+ fi
;;
'reinit')
reexec_in_mountns "$@"
--
2.30.2
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH installer 1/2] remove /mnt/hostrun after install
2022-02-14 15:57 [pve-devel] [PATCH pve-kernel-meta/pve-installer] improve boot-mode switching Stoiko Ivanov
` (4 preceding siblings ...)
2022-02-14 15:57 ` [pve-devel] [PATCH pve-kernel-meta 5/5] proxmox-boot: allow to manually specify bootloader Stoiko Ivanov
@ 2022-02-14 15:57 ` Stoiko Ivanov
2022-02-14 15:57 ` [pve-devel] [PATCH installer 2/2] use proxmox-boot-tool for all uefi installs Stoiko Ivanov
6 siblings, 0 replies; 11+ messages in thread
From: Stoiko Ivanov @ 2022-02-14 15:57 UTC (permalink / raw)
To: pve-devel
else the directory lingers around on fresh systems.
follows 8d7ddbde84b3ebde29108b2080977b03853b2b69
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
noticed in my last tests - not really related to the series
proxinstall | 1 +
1 file changed, 1 insertion(+)
diff --git a/proxinstall b/proxinstall
index a39d405..bddcc5d 100755
--- a/proxinstall
+++ b/proxinstall
@@ -1937,6 +1937,7 @@ _EOD
syscmd("umount $targetdir/proc");
syscmd("umount $targetdir/sys/firmware/efi/efivars");
syscmd("umount $targetdir/sys");
+ rmdir("$targetdir/mnt/hostrun");
if ($use_zfs) {
syscmd("zfs umount -a") == 0 ||
--
2.30.2
^ permalink raw reply [flat|nested] 11+ messages in thread
* [pve-devel] [PATCH installer 2/2] use proxmox-boot-tool for all uefi installs
2022-02-14 15:57 [pve-devel] [PATCH pve-kernel-meta/pve-installer] improve boot-mode switching Stoiko Ivanov
` (5 preceding siblings ...)
2022-02-14 15:57 ` [pve-devel] [PATCH installer 1/2] remove /mnt/hostrun after install Stoiko Ivanov
@ 2022-02-14 15:57 ` Stoiko Ivanov
6 siblings, 0 replies; 11+ messages in thread
From: Stoiko Ivanov @ 2022-02-14 15:57 UTC (permalink / raw)
To: pve-devel
grub by itself is only used for btrfs/ext4/xfs installs on legacy
systems
for zfs proxmox-boot-tool is used in legacy and uefi mode
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
proxinstall | 80 ++++++++++-------------------------------------------
1 file changed, 14 insertions(+), 66 deletions(-)
diff --git a/proxinstall b/proxinstall
index bddcc5d..df65725 100755
--- a/proxinstall
+++ b/proxinstall
@@ -1220,37 +1220,6 @@ sub prepare_proxmox_boot_esp {
die "unable to init ESP and install proxmox-boot loader on '$espdev'\n";
}
-sub prepare_grub_efi_boot_esp {
- my ($dev, $espdev, $targetdir) = @_;
-
- syscmd("mount -n $espdev -t vfat $targetdir/boot/efi") == 0 ||
- die "unable to mount $espdev\n";
-
- eval {
- my $rc = syscmd("chroot $targetdir /usr/sbin/grub-install --target x86_64-efi --no-floppy --bootloader-id='proxmox' $dev");
- if ($rc != 0) {
- if ($boot_type eq 'efi') {
- die "unable to install the EFI boot loader on '$dev'\n";
- } else {
- warn "unable to install the EFI boot loader on '$dev', ignoring (not booted using UEFI)\n";
- }
- }
- # also install fallback boot file (OVMF does not boot without)
- mkdir("$targetdir/boot/efi/EFI/BOOT");
- syscmd("cp $targetdir/boot/efi/EFI/proxmox/grubx64.efi $targetdir/boot/efi/EFI/BOOT/BOOTx64.EFI") == 0 ||
- die "unable to copy efi boot loader\n";
- };
- my $err = $@;
-
- eval {
- syscmd("umount $targetdir/boot/efi") == 0 ||
- die "unable to umount $targetdir/boot/efi\n";
- };
- warn $@ if $@;
-
- die "failed to prepare EFI boot using Grub on '$espdev': $err" if $err;
-}
-
sub extract_data {
my ($basefile, $targetdir) = @_;
@@ -1266,6 +1235,7 @@ sub extract_data {
my $use_zfs = 0;
my $use_btrfs = 0;
+ my $btrfs_uuid;
my $filesys = $config_options->{filesys};
@@ -1492,7 +1462,6 @@ sub extract_data {
}
mkdir "$targetdir/boot";
- mkdir "$targetdir/boot/efi";
mkdir "$targetdir/var";
mkdir "$targetdir/var/lib";
@@ -1616,43 +1585,23 @@ sub extract_data {
if ($use_zfs) {
# do nothing
} elsif ($use_btrfs) {
- my $fsuuid;
my $cmd = "blkid -u filesystem -t TYPE=btrfs -o export $rootdev";
run_command($cmd, sub {
my $line = shift;
if ($line =~ m/^UUID=([A-Fa-f0-9\-]+)$/) {
- $fsuuid = $1;
+ $btrfs_uuid = $1;
}
});
- die "unable to detect FS UUID" if !defined($fsuuid);
+ die "unable to detect FS UUID" if !defined($btrfs_uuid);
- $fstab .= "UUID=$fsuuid / btrfs defaults 0 1\n";
+ $fstab .= "UUID=$btrfs_uuid / btrfs defaults 0 1\n";
} else {
my $root_mountopt = $fssetup->{$filesys}->{root_mountopt} || 'defaults';
$fstab .= "$rootdev / $filesys ${root_mountopt} 0 1\n";
}
- # mount /boot/efi
- # Note: this is required by current grub, but really dangerous, because
- # vfat does not have journaling, so it triggers manual fsck after each crash
- # so we only mount /boot/efi if really required (efi systems).
- if ($boot_type eq 'efi' && !$use_zfs) {
- if (scalar(@$bootdevinfo)) {
- my $di = @$bootdevinfo[0]; # simply use first disk
-
- if ($di->{esp}) {
- my $efi_boot_uuid = $di->{esp};
- if (my $uuid = find_dev_by_uuid ($di->{esp})) {
- $efi_boot_uuid = "UUID=$uuid";
- }
-
- $fstab .= "${efi_boot_uuid} /boot/efi vfat defaults 0 1\n";
- }
- }
- }
-
$fstab .= "$swapfile none swap sw 0 0\n" if $swapfile;
@@ -1791,6 +1740,12 @@ _EOD
write_config("root=ZFS=$zfspoolname/ROOT/$zfsrootvolname boot=zfs\n", "$targetdir/etc/kernel/cmdline");
+ } elsif ($boot_type eq 'efi') {
+ if ($use_btrfs){
+ write_config("root=UUID=$btrfs_uuid ro quiet\n", "$targetdir/etc/kernel/cmdline");
+ } else {
+ write_config("root=/dev/mapper/pve-root ro quiet\n", "$targetdir/etc/kernel/cmdline");
+ }
}
diversion_remove($targetdir, "/usr/sbin/update-grub");
@@ -1823,7 +1778,7 @@ _EOD
foreach my $di (@$bootdevinfo) {
my $dev = $di->{devname};
- if ($use_zfs) {
+ if ($use_zfs || ($boot_type eq 'efi')) {
prepare_proxmox_boot_esp($di->{esp}, $targetdir);
} else {
if (!$native_4k_disk_bootable) {
@@ -1833,18 +1788,11 @@ _EOD
};
push @$bootloader_err_list, $@ if $@;
}
-
- eval {
- if (my $esp = $di->{esp}) {
- prepare_grub_efi_boot_esp($dev, $esp, $targetdir);
- }
- }
- };
- push @$bootloader_err_list, $@ if $@;
+ syscmd("chroot $targetdir /usr/sbin/update-grub") == 0 ||
+ die "unable to update boot loader config\n";
+ }
}
- syscmd("chroot $targetdir /usr/sbin/update-grub") == 0 ||
- die "unable to update boot loader config\n";
};
push @$bootloader_err_list, $@ if $@;
--
2.30.2
^ permalink raw reply [flat|nested] 11+ messages in thread