3
0
Fork 0
forked from mirrors/nixpkgs
nixpkgs/nixos/modules/services/databases/monetdb.nix
2014-04-01 20:20:33 +03:00

89 lines
2 KiB
Nix

{ 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}";
};
};
}