init_bootloader() {
part="$1"
+ mode="$2"
_get_partition_info "$part"
echo "Mounting '$part' on '$esp_mp'."
mount -t vfat "$part" "$esp_mp"
- if [ -d /sys/firmware/efi ]; then
- echo "Installing systemd-boot.."
- mkdir -p "$esp_mp/$PMX_ESP_DIR"
- if ! command -V bootctl >/dev/null 2>&1 ;
- then
- warn "E: bootctl is not available - make sure systemd-boot is installed"
- exit 1
+ if [ -z "$mode" ]; then
+ if [ -e "$esp_mp/EFI/proxmox/grubx64.efi" ]; then
+ # for reinit support
+ mode=grub
fi
+ fi
+
+ if [ -d /sys/firmware/efi ]; then
+ if [ -n "$mode" ] && [ "$mode" = "grub" ]; then
+ echo "Installing grub x86_64 target.."
+ grub-install.real \
+ --boot-directory "${esp_mp}" \
+ --target x86_64-efi \
+ --no-floppy \
+ --efi-directory "${esp_mp}" \
+ --bootloader-id 'proxmox' \
+ "/dev/$PKNAME"
+ else
+ echo "Installing systemd-boot.."
+ mkdir -p "$esp_mp/$PMX_ESP_DIR"
+ if ! command -V bootctl >/dev/null 2>&1 ;
+ then
+ warn "E: bootctl is not available - make sure systemd-boot is installed"
+ exit 1
+ fi
- bootctl --graceful --path "$esp_mp" install
+ bootctl --graceful --path "$esp_mp" 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"
+ 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"
+ fi
else
echo "Installing grub i386-pc target.."
grub-install.real \
warn "WARN: ${path} does not exist - clean '${ESP_LIST}'! - skipping"
return
fi
- init_bootloader "$path"
+ init_bootloader "$path" "$mode"
}
_clean_impl() {
warn " $0 format <partition> [--force]"
fi
if [ -z "$subcmd" ] || [ "$subcmd" = "init" ]; then
- warn " $0 init <partition>"
+ warn " $0 init <partition> [grub]"
fi
if [ -z "$subcmd" ] || [ "$subcmd" = "reinit" ]; then
warn " $0 reinit"
{ 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 [ -e "${mountpoint}/EFI/proxmox/grubx64.efi" ]; then
+ grub=1
+ fi
+ if [ -d /sys/firmware/efi ] && [ "$grub" != 1 ]; then
if [ ! -f "${mountpoint}/$PMX_LOADER_CONF" ]; then
warn "${path} contains no loader.conf - skipping"
return
return
fi
warn "Copying and configuring kernels on ${path}"
- copy_and_config_kernels "${mountpoint}"
+ copy_and_config_kernels "${mountpoint}" "$grub"
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 [ "$grub" = 1 ]; then
+ set_grub_default "${pinned_kernel}"
+ remove_old_kernels_legacy "${mountpoint}"
+ mount --bind "${mountpoint}" "/boot"
+ update-grub
+ umount /boot
+ elif [ -d /sys/firmware/efi ]; then
set_systemd_boot_default "${mountpoint}" "${pinned_kernel}"
remove_old_kernels_efi "${mountpoint}"
else
copy_and_config_kernels() {
esp="$1"
-
+ grub="$2"
for kver in ${BOOT_KVERS}; do
continue
fi
- if [ -d /sys/firmware/efi ]; then
+ if [ -d /sys/firmware/efi ] && [ "$grub" != 1 ]; then
warn " Copying kernel and creating boot-entry for ${kver}"
KERNEL_ESP_DIR="${PMX_ESP_DIR}/${kver}"