about summary refs log tree commit diff
path: root/nixos/modules/system
diff options
context:
space:
mode:
authorDaniel Fullmer <danielrf12@gmail.com>2020-06-14 13:16:30 -0400
committerDaniel Fullmer <danielrf12@gmail.com>2020-06-15 20:22:45 -0400
commit7e3519a7cf273e80c0b055158e9bd2d5ea1c11ad (patch)
tree932e95b975e4ae6e0ce5c027a0cae4388abff10e /nixos/modules/system
parentd6d07f262b171bb1e415e1a06c52288af056a98d (diff)
downloadnixlib-7e3519a7cf273e80c0b055158e9bd2d5ea1c11ad.tar
nixlib-7e3519a7cf273e80c0b055158e9bd2d5ea1c11ad.tar.gz
nixlib-7e3519a7cf273e80c0b055158e9bd2d5ea1c11ad.tar.bz2
nixlib-7e3519a7cf273e80c0b055158e9bd2d5ea1c11ad.tar.lz
nixlib-7e3519a7cf273e80c0b055158e9bd2d5ea1c11ad.tar.xz
nixlib-7e3519a7cf273e80c0b055158e9bd2d5ea1c11ad.tar.zst
nixlib-7e3519a7cf273e80c0b055158e9bd2d5ea1c11ad.zip
nixos/systemd-boot: update bootloader if needed
Diffstat (limited to 'nixos/modules/system')
-rw-r--r--nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py16
1 files changed, 16 insertions, 0 deletions
diff --git a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
index f48a085ce57a..788b2014cedf 100644
--- a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
+++ b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
@@ -197,6 +197,22 @@ def main():
             subprocess.check_call(["@systemd@/bin/bootctl", "--path=@efiSysMountPoint@", "install"])
         else:
             subprocess.check_call(["@systemd@/bin/bootctl", "--path=@efiSysMountPoint@", "--no-variables", "install"])
+    else:
+        # Update bootloader to latest if needed
+        systemd_version = subprocess.check_output(["@systemd@/bin/bootctl", "--version"], universal_newlines=True).split()[1]
+        sdboot_status = subprocess.check_output(["@systemd@/bin/bootctl", "--path=@efiSysMountPoint@", "status"], universal_newlines=True)
+
+        # See status_binaries() in systemd bootctl.c for code which generates this
+        m = re.search("^\W+File:.*/EFI/(BOOT|systemd)/.*\.efi \(systemd-boot (\d+)\)$",
+                      sdboot_status, re.IGNORECASE | re.MULTILINE)
+        if m is None:
+            print("could not find any previously installed systemd-boot")
+        else:
+            sdboot_version = m.group(2)
+            if systemd_version > sdboot_version:
+                print("updating systemd-boot from %s to %s" % (sdboot_version, systemd_version))
+                subprocess.check_call(["@systemd@/bin/bootctl", "--path=@efiSysMountPoint@", "update"])
+
 
     mkdir_p("@efiSysMountPoint@/efi/nixos")
     mkdir_p("@efiSysMountPoint@/loader/entries")