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:
parent
5e364503d5
commit
c54eb79063
|
@ -58,6 +58,7 @@ echo
|
||||||
mkdir -p /etc
|
mkdir -p /etc
|
||||||
touch /etc/fstab # to shut up mount
|
touch /etc/fstab # to shut up mount
|
||||||
touch /etc/mtab # to shut up mke2fs
|
touch /etc/mtab # to shut up mke2fs
|
||||||
|
touch /etc/initrd-release
|
||||||
mkdir -p /proc
|
mkdir -p /proc
|
||||||
mount -t proc none /proc
|
mount -t proc none /proc
|
||||||
mkdir -p /sys
|
mkdir -p /sys
|
||||||
|
@ -345,8 +346,8 @@ exec 3>&-
|
||||||
udevadm control --exit || true
|
udevadm control --exit || true
|
||||||
|
|
||||||
# Kill any remaining processes, just to be sure we're not taking any
|
# 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.
|
# with us into stage 2. But keep storage daemons like unionfs-fuse.
|
||||||
pkill -9 -v '(1|unionfs)'
|
pkill -9 -v -f '@'
|
||||||
|
|
||||||
|
|
||||||
if test -n "$debug1mounts"; then fail; fi
|
if test -n "$debug1mounts"; then fail; fi
|
||||||
|
|
|
@ -8,6 +8,14 @@ stdenv.mkDerivation rec {
|
||||||
sha256 = "0qpnr4czgc62vsfnmv933w62nq3xwcbnvqch72qakfgca75rsp4d";
|
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 ];
|
buildInputs = [ cmake fuse ];
|
||||||
|
|
||||||
# Put the unionfs mount helper in place as mount.unionfs-fuse. This makes it
|
# Put the unionfs mount helper in place as mount.unionfs-fuse. This makes it
|
||||||
|
|
|
@ -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);
|
Loading…
Reference in a new issue