summary refs log tree commit diff
path: root/nixos/modules/system/boot/loader
diff options
context:
space:
mode:
authorJörg Thalheim <joerg@thalheim.io>2023-08-26 18:31:52 +0200
committerJörg Thalheim <Mic92@users.noreply.github.com>2023-10-10 14:49:51 +0200
commitf4bf9702be41b129e6eaf692c18a273997540085 (patch)
tree97933d4b76017af8892a0260f4725699955341d1 /nixos/modules/system/boot/loader
parentdbac7467ad7cde84e2679d8c4baf987cb7a93887 (diff)
downloadnixpkgs-f4bf9702be41b129e6eaf692c18a273997540085.tar
nixpkgs-f4bf9702be41b129e6eaf692c18a273997540085.tar.gz
nixpkgs-f4bf9702be41b129e6eaf692c18a273997540085.tar.bz2
nixpkgs-f4bf9702be41b129e6eaf692c18a273997540085.tar.lz
nixpkgs-f4bf9702be41b129e6eaf692c18a273997540085.tar.xz
nixpkgs-f4bf9702be41b129e6eaf692c18a273997540085.tar.zst
nixpkgs-f4bf9702be41b129e6eaf692c18a273997540085.zip
systemd-boot-builder: always do syncfs, even after a failure
Diffstat (limited to 'nixos/modules/system/boot/loader')
-rwxr-xr-xnixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py29
1 files changed, 17 insertions, 12 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 88f87372356..4a31495dc9c 100755
--- a/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
+++ b/nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py
@@ -218,11 +218,7 @@ def get_profiles() -> List[str]:
     else:
         return []
 
-def main() -> None:
-    parser = argparse.ArgumentParser(description='Update @distroName@-related systemd-boot files')
-    parser.add_argument('default_config', metavar='DEFAULT-CONFIG', help='The default @distroName@ config to boot')
-    args = parser.parse_args()
-
+def install_bootloader(args: argparse.Namespace) -> None:
     try:
         with open("/etc/machine-id") as machine_file:
             machine_id = machine_file.readlines()[0]
@@ -328,13 +324,22 @@ def main() -> None:
 
     subprocess.check_call("@copyExtraFiles@")
 
-    # Since fat32 provides little recovery facilities after a crash,
-    # it can leave the system in an unbootable state, when a crash/outage
-    # happens shortly after an update. To decrease the likelihood of this
-    # event sync the efi filesystem after each update.
-    rc = libc.syncfs(os.open("@efiSysMountPoint@", os.O_RDONLY))
-    if rc != 0:
-        print("could not sync @efiSysMountPoint@: {}".format(os.strerror(rc)), file=sys.stderr)
+
+def main() -> None:
+    parser = argparse.ArgumentParser(description='Update @distroName@-related systemd-boot files')
+    parser.add_argument('default_config', metavar='DEFAULT-CONFIG', help='The default @distroName@ config to boot')
+    args = parser.parse_args()
+
+    try:
+        install_bootloader(args)
+    finally:
+        # Since fat32 provides little recovery facilities after a crash,
+        # it can leave the system in an unbootable state, when a crash/outage
+        # happens shortly after an update. To decrease the likelihood of this
+        # event sync the efi filesystem after each update.
+        rc = libc.syncfs(os.open("@efiSysMountPoint@", os.O_RDONLY))
+        if rc != 0:
+            print("could not sync @efiSysMountPoint@: {}".format(os.strerror(rc)), file=sys.stderr)
 
 
 if __name__ == '__main__':