summaryrefslogtreecommitdiff
path: root/customized/autofs.nix
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2015-12-05 23:09:18 +0100
committerGregor Kleen <gkleen@yggdrasil.li>2015-12-05 23:09:18 +0100
commit705ce9798d58cae9f9a734c1557b2d89287f0170 (patch)
tree282d486537422a10a5976f3083b3978c7219d4b8 /customized/autofs.nix
parent62e92c278f90d12767d2e3e2dd80386553bce15a (diff)
downloadnixos-letsencrypt.tar
nixos-letsencrypt.tar.gz
nixos-letsencrypt.tar.bz2
nixos-letsencrypt.tar.xz
nixos-letsencrypt.zip
Revert "We now have autofs in unstable"letsencrypt
This reverts commit 62e92c278f90d12767d2e3e2dd80386553bce15a.
Diffstat (limited to 'customized/autofs.nix')
-rw-r--r--customized/autofs.nix120
1 files changed, 120 insertions, 0 deletions
diff --git a/customized/autofs.nix b/customized/autofs.nix
new file mode 100644
index 00000000..f4a1059d
--- /dev/null
+++ b/customized/autofs.nix
@@ -0,0 +1,120 @@
1{ config, lib, pkgs, ... }:
2
3with lib;
4
5let
6
7 cfg = config.services.autofs;
8
9 autoMaster = pkgs.writeText "auto.master" cfg.autoMaster;
10
11in
12
13{
14
15 ###### interface
16
17 options = {
18
19 services.autofs = {
20
21 enable = mkOption {
22 default = false;
23 description = "
24 Mount filesystems on demand. Unmount them automatically.
25 You may also be interested in afuese.
26 ";
27 };
28
29 autoMaster = mkOption {
30 example = literalExample ''
31 autoMaster = let
32 mapConf = pkgs.writeText "auto" '''
33 kernel -ro,soft,intr ftp.kernel.org:/pub/linux
34 boot -fstype=ext2 :/dev/hda1
35 windoze -fstype=smbfs ://windoze/c
36 removable -fstype=ext2 :/dev/hdd
37 cd -fstype=iso9660,ro :/dev/hdc
38 floppy -fstype=auto :/dev/fd0
39 server -rw,hard,intr / -ro myserver.me.org:/ \
40 /usr myserver.me.org:/usr \
41 /home myserver.me.org:/home
42 ''';
43 in '''
44 /auto file:''${mapConf}
45 '''
46 '';
47 description = "
48 file contents of /etc/auto.master. See man auto.master
49 See man 5 auto.master and man 5 autofs.
50 ";
51 };
52
53 timeout = mkOption {
54 default = 600;
55 description = "Set the global minimum timeout, in seconds, until directories are unmounted";
56 };
57
58 debug = mkOption {
59 default = false;
60 description = "
61 pass -d and -7 to automount and write log to /var/log/autofs
62 ";
63 };
64
65 };
66
67 };
68
69
70 ###### implementation
71
72 config = mkIf cfg.enable {
73
74 environment.etc = singleton
75 { target = "auto.master";
76 source = pkgs.writeText "auto.master" cfg.autoMaster;
77 };
78
79 boot.kernelModules = [ "autofs4" ];
80
81 jobs.autofs =
82 { description = "Filesystem automounter";
83
84 startOn = "started network-interfaces";
85 stopOn = "stopping network-interfaces";
86
87 path = [ pkgs.nfs-utils pkgs.sshfsFuse ];
88
89 preStop =
90 ''
91 set -e; while :; do pkill -TERM automount; sleep 1; done
92 '';
93
94 # automount doesn't clean up when receiving SIGKILL.
95 # umount -l should unmount the directories recursively when they are no longer used
96 # It does, but traces are left in /etc/mtab. So unmount recursively..
97 postStop =
98 ''
99 PATH=${pkgs.gnused}/bin:${pkgs.coreutils}/bin
100 exec &> /tmp/logss
101 # double quote for sed:
102 escapeSpaces(){ sed 's/ /\\\\040/g'; }
103 unescapeSpaces(){ sed 's/\\040/ /g'; }
104 sed -n 's@^\s*\(\([^\\ ]\|\\ \)*\)\s.*@\1@p' ${autoMaster} | sed 's/[\\]//' | while read mountPoint; do
105 sed -n "s@[^ ]\+\s\+\($(echo "$mountPoint"| escapeSpaces)[^ ]*\).*@\1@p" /proc/mounts | sort -r | unescapeSpaces| while read smountP; do
106 ${pkgs.utillinux}/bin/umount -l "$smountP" || true
107 done
108 done
109 '';
110
111 script =
112 ''
113 ${if cfg.debug then "exec &> /var/log/autofs" else ""}
114 exec ${pkgs.autofs5}/sbin/automount ${if cfg.debug then "-d" else ""} -f -t ${builtins.toString cfg.timeout} "${autoMaster}" ${if cfg.debug then "-l7" else ""}
115 '';
116 };
117
118 };
119
120}