this commit adds the optional [--legacy|--uefi] arguments to `p-b-t
init` and `p-b-t reinit`. 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.iva...@proxmox.com>
---
 bin/proxmox-boot-tool | 60 +++++++++++++++++++++++++++----------------
 1 file changed, 38 insertions(+), 22 deletions(-)

diff --git a/bin/proxmox-boot-tool b/bin/proxmox-boot-tool
index 9731204..164ae91 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 mountpoint_has_sd_boot "${esp_mp}"; then
+                       install_sd_boot=1
+               fi
+               if mountpoint_has_grub "${esp_mp}"; 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"
 
@@ -209,7 +217,7 @@ reinit() {
                warn "WARN: ${path} does not exist - clean '${ESP_LIST}'! - 
skipping"
                return
        fi
-       init_bootloader "$path"
+       init_bootloader "$path" "$@"
 }
 
 _clean_impl() {
@@ -345,10 +353,10 @@ usage() {
                warn "  $0 format <partition> [--force]"
        fi
        if [ -z "$subcmd" ] || [ "$subcmd" = "init" ]; then
-               warn "  $0 init <partition>"
+               warn "  $0 init <partition> [--legacy|--uefi]"
        fi
        if [ -z "$subcmd" ] || [ "$subcmd" = "reinit" ]; then
-               warn "  $0 reinit"
+               warn "  $0 reinit [--legacy|--uefi]"
        fi
        if [ -z "$subcmd" ] || [ "$subcmd" = "clean" ]; then
                warn "  $0 clean [--dry-run]"
@@ -379,7 +387,7 @@ 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 "USAGE: $0 reinit [--legacy|--uefi]"
        echo ""
        echo "    reinitialize all configured EFI system partitions from 
$ESP_LIST."
        echo ""
@@ -563,21 +571,29 @@ case "$1" in
                        usage "init"
                        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 "init"
+                       exit 1
+               fi
        ;;
        'reinit')
                reexec_in_mountns "$@"
                shift
-               if [ "$#" -eq 1 ]; then
-                       warn "E: no arguments allowed."
+               if [ -z "$1" ] || [ "$1" = "--legacy" ] || [ "$1" = "--uefi" ]; 
then
+                       loop_esp_list reinit "$@"
+               else
+                       warn "E: invalid 'init' mode '$1'."
                        warn ""
                        usage "reinit"
                        exit 1
                fi
-                loop_esp_list reinit "$@"
                exit 0
        ;;
        'clean')
-- 
2.30.2



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to