diff options
Diffstat (limited to 'nixos/modules/services/network-filesystems/openafs-client/default.nix')
-rw-r--r-- | nixos/modules/services/network-filesystems/openafs-client/default.nix | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/nixos/modules/services/network-filesystems/openafs-client/default.nix b/nixos/modules/services/network-filesystems/openafs-client/default.nix new file mode 100644 index 00000000000..4a888b64bd3 --- /dev/null +++ b/nixos/modules/services/network-filesystems/openafs-client/default.nix @@ -0,0 +1,90 @@ +{ config, pkgs, ... }: + +let + inherit (pkgs.lib) mkOption mkIf; + + cfg = config.services.openafsClient; + + cellServDB = pkgs.fetchurl { + url = http://dl.central.org/dl/cellservdb/CellServDB.2009-06-29; + sha256 = "be566f850e88130333ab8bc3462872ad90c9482e025c60a92f728b5bac1b4fa9"; + }; + + afsConfig = pkgs.runCommand "afsconfig" {} '' + ensureDir $out + echo ${cfg.cellName} > $out/ThisCell + cp ${cellServDB} $out/CellServDB + echo "/afs:${cfg.cacheDirectory}:${cfg.cacheSize}" > $out/cacheinfo + ''; + + openafsPkgs = config.boot.kernelPackages.openafsClient; +in +{ + ###### interface + + options = { + + services.openafsClient = { + + enable = mkOption { + default = false; + description = "Whether to enable the OpenAFS client."; + }; + + cellName = mkOption { + default = "grand.central.org"; + description = "Cell name."; + }; + + cacheSize = mkOption { + default = "100000"; + description = "Cache size."; + }; + + cacheDirectory = mkOption { + default = "/var/cache/openafs"; + description = "Cache directory."; + }; + + }; + }; + + + ###### implementation + + config = mkIf cfg.enable { + + environment.systemPackages = [ openafsPkgs ]; + + environment.etc = [ + { source = afsConfig; + target = "openafs"; + } + ]; + + jobs.openafsClient = + { name = "afsd"; + + description = "AFS client"; + + startOn = "started network-interfaces"; + stopOn = "stopping network-interfaces"; + + preStart = '' + mkdir -m 0755 /afs || true + mkdir -m 0755 -p ${cfg.cacheDirectory} || true + ${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 -shutdown + rmmod libafs + ''; + + }; + + }; + +} |