Don't kill unionfs-fuse during shutdown

Killing the daemon backing /nix/store prevents a clean shutdown.  See
http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons/
This commit is contained in:
Eelco Dolstra 2014-05-21 15:19:01 +02:00
parent 5e364503d5
commit c54eb79063
3 changed files with 25 additions and 2 deletions

View File

@ -58,6 +58,7 @@ echo
mkdir -p /etc
touch /etc/fstab # to shut up mount
touch /etc/mtab # to shut up mke2fs
touch /etc/initrd-release
mkdir -p /proc
mount -t proc none /proc
mkdir -p /sys
@ -345,8 +346,8 @@ exec 3>&-
udevadm control --exit || true
# Kill any remaining processes, just to be sure we're not taking any
# with us into stage 2. unionfs-fuse mounts require the unionfs process.
pkill -9 -v '(1|unionfs)'
# with us into stage 2. But keep storage daemons like unionfs-fuse.
pkill -9 -v -f '@'
if test -n "$debug1mounts"; then fail; fi

View File

@ -8,6 +8,14 @@ stdenv.mkDerivation rec {
sha256 = "0qpnr4czgc62vsfnmv933w62nq3xwcbnvqch72qakfgca75rsp4d";
};
patches =
[ # Prevent the unionfs daemon from being killed during
# shutdown. See
# http://www.freedesktop.org/wiki/Software/systemd/RootStorageDaemons/
# for details.
./prevent-kill-on-shutdown.patch
];
buildInputs = [ cmake fuse ];
# Put the unionfs mount helper in place as mount.unionfs-fuse. This makes it

View File

@ -0,0 +1,14 @@
diff -ru -x '*~' unionfs-fuse-0.26-orig/src/unionfs.c unionfs-fuse-0.26/src/unionfs.c
--- unionfs-fuse-0.26-orig/src/unionfs.c 2012-09-11 00:06:32.000000000 +0200
+++ unionfs-fuse-0.26/src/unionfs.c 2014-05-21 14:22:03.597861805 +0200
@@ -831,6 +831,10 @@
}
#endif
+ /* Prevent systemd's shutdown from killing us. */
+ if (access("/etc/initrd-release", F_OK) >= 0)
+ argv[0][0] = '@';
+
umask(0);
int res = fuse_main(args.argc, args.argv, &unionfs_oper, NULL);
RETURN(uopt.doexit ? uopt.retval : res);