mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-27 17:33:09 +00:00
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
|
||||
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
|
||||
|
@ -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
|
||||
|
@ -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 New Issue
Block a user