about summary refs log tree commit diff
path: root/nixos/modules/services/databases/monetdb.nix
blob: 9d3059c7f4520bb569f97ba7bd1e3e72bfb0cec6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
{ config, pkgs, ... }:
let
  cfg = config.services.monetdb;
  monetdbUser = "monetdb";
in
with pkgs.lib;
{

  ###### interface

  options = {

    services.monetdb = {

      enable = mkOption {
        type = types.bool;
        default = false;
        description = "Whether to enable MonetDB database server.";
      };

      package = mkOption {
        type = types.path;
        description = "MonetDB package to use.";
      };

      dbfarmDir = mkOption {
        type = types.path;
        default = "/var/lib/monetdb";
        description = ''
          Specifies location of Monetdb dbfarm (keeps database and auxiliary files).
        '';
      };

      port = mkOption {
        default = "50000";
        example = "50000";
        description = "Port to listen on.";
      };
    };

  };


  ###### implementation

  config = mkIf cfg.enable {

    users.extraUsers.monetdb = 
      { name = monetdbUser;
        uid = config.ids.uids.monetdb;
        description = "monetdb user";
        home = cfg.dbfarmDir;
      };

    users.extraGroups.monetdb.gid = config.ids.gids.monetdb;

    environment.systemPackages = [ cfg.package ];

    systemd.services.monetdb =
      { description = "MonetDB Server";

        wantedBy = [ "multi-user.target" ];

        after = [ "network.target" ];

        path = [ cfg.package ];

        preStart =
          ''
            # Initialise the database.
            if ! test -e ${cfg.dbfarmDir}/.merovingian_properties; then
                mkdir -m 0700 -p ${cfg.dbfarmDir}
                chown -R ${monetdbUser} ${cfg.dbfarmDir}
                ${cfg.package}/bin/monetdbd create ${cfg.dbfarmDir}
                ${cfg.package}/bin/monetdbd set port=${cfg.port} ${cfg.dbfarmDir}
            fi
          '';

        serviceConfig.ExecStart = "${cfg.package}/bin/monetdbd start -n ${cfg.dbfarmDir}";

        serviceConfig.ExecStop = "${cfg.package}/bin/monetdbd stop ${cfg.dbfarmDir}";

        unitConfig.RequiresMountsFor = "${cfg.dbfarmDir}";
      };

  };

}