1{ config, pkgs, lib, ... }:
2
3let
4 cfg = config.services.crashplan;
5 crashplan = pkgs.crashplan;
6in
7
8with lib;
9
10{
11 options = {
12 services.crashplan = {
13 enable = mkOption {
14 default = false;
15 type = types.bool;
16 description = ''
17 Starts crashplan background service.
18 '';
19 };
20 };
21 };
22
23 config = mkIf cfg.enable {
24 environment.systemPackages = [ crashplan ];
25
26 systemd.services.crashplan = {
27 description = "CrashPlan Backup Engine";
28
29 wantedBy = [ "multi-user.target" ];
30 after = [ "network.target" "local-fs.target" ];
31
32 preStart = ''
33 ensureDir() {
34 dir=$1
35 mode=$2
36
37 if ! test -e $dir; then
38 ${pkgs.coreutils}/bin/mkdir -m $mode -p $dir
39 elif [ "$(${pkgs.coreutils}/bin/stat -c %a $dir)" != "$mode" ]; then
40 ${pkgs.coreutils}/bin/chmod $mode $dir
41 fi
42 }
43
44 ensureDir ${crashplan.vardir} 755
45 ensureDir ${crashplan.vardir}/conf 700
46 ensureDir ${crashplan.manifestdir} 700
47 ensureDir ${crashplan.vardir}/cache 700
48 ensureDir ${crashplan.vardir}/backupArchives 700
49 ensureDir ${crashplan.vardir}/log 777
50 cp -avn ${crashplan}/conf.template/* ${crashplan.vardir}/conf
51 for x in app.asar bin install.vars lang lib libc42archive64.so libc52archive.so libjniwrap64.so libjniwrap.so libjtux64.so libjtux.so libleveldb64.so libleveldb.so libmd564.so libmd5.so share skin upgrade; do
52 rm -f ${crashplan.vardir}/$x;
53 ln -sf ${crashplan}/$x ${crashplan.vardir}/$x;
54 done
55 '';
56
57 serviceConfig = {
58 Type = "forking";
59 EnvironmentFile = "${crashplan}/bin/run.conf";
60 ExecStart = "${crashplan}/bin/CrashPlanEngine start";
61 ExecStop = "${crashplan}/bin/CrashPlanEngine stop";
62 PIDFile = "${crashplan.vardir}/CrashPlanEngine.pid";
63 WorkingDirectory = crashplan;
64 };
65 };
66 };
67}