summary refs log tree commit diff
path: root/nixos/modules/system/boot/loader
diff options
context:
space:
mode:
authorJörg Thalheim <joerg@thalheim.io>2017-05-09 18:56:26 +0100
committerJörg Thalheim <joerg@thalheim.io>2017-05-09 19:06:27 +0100
commite3beb0710836deab2f4e366b4681e5a04c1107a8 (patch)
tree941fdb41442daa4a8b2c31c7f2a2f2cdc6c81bd8 /nixos/modules/system/boot/loader
parent779ae064674aa9645bcefaacbc83f942e2ef759f (diff)
downloadnixlib-e3beb0710836deab2f4e366b4681e5a04c1107a8.tar
nixlib-e3beb0710836deab2f4e366b4681e5a04c1107a8.tar.gz
nixlib-e3beb0710836deab2f4e366b4681e5a04c1107a8.tar.bz2
nixlib-e3beb0710836deab2f4e366b4681e5a04c1107a8.tar.lz
nixlib-e3beb0710836deab2f4e366b4681e5a04c1107a8.tar.xz
nixlib-e3beb0710836deab2f4e366b4681e5a04c1107a8.tar.zst
nixlib-e3beb0710836deab2f4e366b4681e5a04c1107a8.zip
systemd-boot: sync efi filesystem after update
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.
Diffstat (limited to 'nixos/modules/system/boot/loader')
-rw-r--r--nixos/modules/system/boot/loader/systemd-boot/systemd-boot-builder.py7
1 files changed, 7 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 704c574b822e..804b710f3759 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
@@ -2,12 +2,15 @@
 import argparse
 import shutil
 import os
+import sys
 import errno
 import subprocess
 import glob
 import tempfile
 import errno
 import warnings
+import ctypes
+libc = ctypes.CDLL("libc.so.6")
 
 def copy_if_not_exists(source, dest):
     if not os.path.exists(dest):
@@ -145,5 +148,9 @@ def main():
         if os.readlink(system_dir(gen)) == args.default_config:
             write_loader_conf(gen)
 
+    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__':
     main()