all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Stoiko Ivanov <s.ivanov@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup v2] bin: pbs3to4: adapt boot-loader checks to trixie
Date: Mon, 11 Aug 2025 11:11:35 +0200	[thread overview]
Message-ID: <20250811091135.127299-1-s.ivanov@proxmox.com> (raw)

basically carry-over the checks from pve-manger for pve8to9 [0]:
* 65ffcdd0 ("cli: pve8to9: rework boot-loader suggestions for trixie")
* 7cc36772 ("8 to 9 checks: do not ask bootctl if systemd-boot is used.")
* 2d79b567 ("8 to 9 checks: check for removable grub-install")

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
replaces:
https://lore.proxmox.com/pbs-devel/20250808171031.1813115-1-s.ivanov@proxmox.com/T/#u
(the second patch there is equivalent to this one here, but the commit-message
was reworked (and the v2 part was added).
v1->v2:
* add the check for removable grub
* rework the systemd-boot logic to not check bootctl is-installed, and
  fail instead of warn if the package is found after upgrading

 src/bin/pbs3to4.rs | 70 +++++++++++++++++++++++++++++++++-------------
 1 file changed, 51 insertions(+), 19 deletions(-)

diff --git a/src/bin/pbs3to4.rs b/src/bin/pbs3to4.rs
index 67640b48..f78e28df 100644
--- a/src/bin/pbs3to4.rs
+++ b/src/bin/pbs3to4.rs
@@ -207,39 +207,71 @@ impl Checker {
             .log_info("Checking bootloader configuration...")?;
 
         if !Path::new("/sys/firmware/efi").is_dir() {
+            if !Path::new("/usr/share/doc/systemd-boot/changelog.Debian.gz").is_file() {
+                self.output.log_info(
+                    "systemd-boot package installed on legacy-boot system is not \
+                        necessary, consider removing it",
+                )?;
+                return Ok(());
+            }
             self.output
-                .log_skip("System booted in legacy-mode - no need for systemd-boot")?;
+                .log_skip("System booted in legacy-mode - no need for additional pacckages.")?;
             return Ok(());
         }
 
+        let mut boot_ok = true;
         if Path::new("/etc/kernel/proxmox-boot-uuids").is_file() {
             // PBS packages version check needs to be run before
             if !self.upgraded {
                 self.output
-                    .log_skip("not yet upgraded, no need to check the presence of systemd-boot")?;
+                    .log_skip("not yet upgraded, systemd-boot still needed for bootctl")?;
                 return Ok(());
             }
             if Path::new("/usr/share/doc/systemd-boot/changelog.Debian.gz").is_file() {
-                self.output
-                    .log_pass("bootloader packages installed correctly")?;
+                self.output.log_fail( "systemd-boot meta-package installed. This will cause issues on upgrades of \
+                    boot-related packages. Install 'systemd-boot-efi' and 'systemd-boot-tools' explicitly \
+                and remove 'systemd-boot'")?;
                 return Ok(());
             }
-            self.output.log_warn(
-                "proxmox-boot-tool is used for bootloader configuration in uefi mode \
-                 but the separate systemd-boot package, is not installed.\n\
-                 initializing new ESPs will not work until the package is installed.",
-            )?;
-            return Ok(());
-        } else if !Path::new("/usr/share/doc/grub-efi-amd64/changelog.Debian.gz").is_file() {
-            self.output.log_warn(
-                "System booted in uefi mode but grub-efi-amd64 meta-package not installed, \
-             new grub versions will not be installed to /boot/efi!
-             Install grub-efi-amd64.",
-            )?;
-            return Ok(());
         } else {
-            self.output
-                .log_pass("bootloader packages installed correctly")?;
+            if Path::new("/usr/share/doc/systemd-boot/changelog.Debian.gz").is_file() {
+                self.output.log_fail( "systemd-boot meta-package installed. This will cause problems on upgrades of other \
+                        boot-related packages. Remove 'systemd-boot' See \
+                        https://pbs.proxmox.com/wiki/Upgrade_from_3_to_4#sd-boot-warning for more information."
+                )?;
+                boot_ok = false;
+            }
+            if !Path::new("/usr/share/doc/grub-efi-amd64/changelog.Debian.gz").is_file() {
+                self.output.log_warn(
+                    "System booted in uefi mode but grub-efi-amd64 meta-package not installed, \
+                     new grub versions will not be installed to /boot/efi!
+                     Install grub-efi-amd64.",
+                )?;
+                boot_ok = false;
+            }
+            if Path::new("/boot/efi/EFI/BOOT/BOOTX64.efi").is_file() {
+                let output = std::process::Command::new("debconf-show")
+                    .arg("--db")
+                    .arg("configdb")
+                    .arg("grub-efi-amd64")
+                    .arg("grub-pc")
+                    .output()
+                    .map_err(|err| format_err!("failed to retrieve debconf settings - {err}"))?;
+                let re = Regex::new(r"grub2/force_efi_extra_removable: +true(?:\n|$)")
+                    .expect("failed to compile dbconfig regex");
+                if !re.is_match(std::str::from_utf8(&output.stdout)?) {
+                    self.output.log_warn(format!(
+                        "Removable bootloader found at '/boot/efi/EFI/BOOT/BOOTX64.efi', but GRUB packages \
+                            not set up to update it!\nRun the following command:\n \
+                            echo 'grub-efi-amd64 grub2/force_efi_extra_removable boolean true' | debconf-set-selections -v -u\n\
+                            Then reinstall GRUB with 'apt install --reinstall grub-efi-amd64'"))?;
+                    boot_ok = false;
+                }
+            }
+            if boot_ok {
+                self.output
+                    .log_pass("bootloader packages installed correctly")?;
+            }
         }
 
         Ok(())
-- 
2.39.5



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


             reply	other threads:[~2025-08-11  9:10 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-11  9:11 Stoiko Ivanov [this message]
2025-08-11 10:54 ` [pbs-devel] applied: " Fabian Grünbichler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250811091135.127299-1-s.ivanov@proxmox.com \
    --to=s.ivanov@proxmox.com \
    --cc=pbs-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal