summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorGergely Risko <gergely@risko.hu>2014-03-14 14:39:21 +0100
committerGergely Risko <gergely@risko.hu>2014-03-14 14:40:17 +0100
commit2be35c3e99855b695a7599811dec24cc0fcdf282 (patch)
tree0e1a78e30f083529481eb04df3639942f9444026 /nixos
parentd23e7fdfc3e3ca6db57641592598ca3b7f569bb0 (diff)
downloadnixpkgs-2be35c3e99855b695a7599811dec24cc0fcdf282.tar
nixpkgs-2be35c3e99855b695a7599811dec24cc0fcdf282.tar.gz
nixpkgs-2be35c3e99855b695a7599811dec24cc0fcdf282.tar.bz2
nixpkgs-2be35c3e99855b695a7599811dec24cc0fcdf282.tar.lz
nixpkgs-2be35c3e99855b695a7599811dec24cc0fcdf282.tar.xz
nixpkgs-2be35c3e99855b695a7599811dec24cc0fcdf282.tar.zst
nixpkgs-2be35c3e99855b695a7599811dec24cc0fcdf282.zip
OpenAFS client fixes
Make it stoppable.  Add support for crypt and dynroot-sparse.
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/services/network-filesystems/openafs-client/default.nix35
1 files changed, 25 insertions, 10 deletions
diff --git a/nixos/modules/services/network-filesystems/openafs-client/default.nix b/nixos/modules/services/network-filesystems/openafs-client/default.nix
index 4a888b64bd3..b34ebc3663e 100644
--- a/nixos/modules/services/network-filesystems/openafs-client/default.nix
+++ b/nixos/modules/services/network-filesystems/openafs-client/default.nix
@@ -46,6 +46,16 @@ in
         description = "Cache directory.";
       };
 
+      crypt = mkOption {
+        default = false;
+        description = "Whether to enable (weak) protocol encryption.";
+      };
+
+      sparse = mkOption {
+        default = false;
+        description = "Minimal cell list in /afs.";
+      };
+
     };
   };
 
@@ -70,18 +80,23 @@ in
         startOn = "started network-interfaces";
         stopOn = "stopping network-interfaces";
 
-	preStart = ''
-	  mkdir -m 0755 /afs || true
-	  mkdir -m 0755 -p ${cfg.cacheDirectory} || true
+        preStart = ''
+          mkdir -p -m 0755 /afs
+          mkdir -m 0700 -p ${cfg.cacheDirectory}
           ${pkgs.module_init_tools}/sbin/insmod ${openafsPkgs}/lib/openafs/libafs-*.ko || true
-          ${openafsPkgs}/sbin/afsd -confdir ${afsConfig} -cachedir ${cfg.cacheDirectory} -dynroot -fakestat
-	'';
-
-	postStop = ''
-	  umount /afs
+          ${openafsPkgs}/sbin/afsd -confdir ${afsConfig} -cachedir ${cfg.cacheDirectory} ${if cfg.sparse then "-dynroot-sparse" else "-dynroot"} -fakestat -afsdb
+          ${openafsPkgs}/bin/fs setcrypt ${if cfg.crypt then "on" else "off"}
+        '';
+
+        # Doing this in preStop, because after these commands AFS is basically
+        # stopped, so systemd has nothing to do, just noticing it.  If done in
+        # postStop, then we get a hang + kernel oops, because AFS can't be
+        # stopped simply by sending signals to processes.
+        preStop = ''
+          ${pkgs.utillinux}/bin/umount /afs
           ${openafsPkgs}/sbin/afsd -shutdown
-	  rmmod libafs
-	'';
+          ${pkgs.module_init_tools}/sbin/rmmod libafs
+        '';
 
       };