at 23.11-pre 2.7 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 cfg = config.services.monetdb; 7 8in { 9 meta.maintainers = with maintainers; [ StillerHarpo primeos ]; 10 11 ###### interface 12 options = { 13 services.monetdb = { 14 15 enable = mkEnableOption (lib.mdDoc "the MonetDB database server"); 16 17 package = mkOption { 18 type = types.package; 19 default = pkgs.monetdb; 20 defaultText = literalExpression "pkgs.monetdb"; 21 description = lib.mdDoc "MonetDB package to use."; 22 }; 23 24 user = mkOption { 25 type = types.str; 26 default = "monetdb"; 27 description = lib.mdDoc "User account under which MonetDB runs."; 28 }; 29 30 group = mkOption { 31 type = types.str; 32 default = "monetdb"; 33 description = lib.mdDoc "Group under which MonetDB runs."; 34 }; 35 36 dataDir = mkOption { 37 type = types.path; 38 default = "/var/lib/monetdb"; 39 description = lib.mdDoc "Data directory for the dbfarm."; 40 }; 41 42 port = mkOption { 43 type = types.ints.u16; 44 default = 50000; 45 description = lib.mdDoc "Port to listen on."; 46 }; 47 48 listenAddress = mkOption { 49 type = types.str; 50 default = "127.0.0.1"; 51 example = "0.0.0.0"; 52 description = lib.mdDoc "Address to listen on."; 53 }; 54 }; 55 }; 56 57 ###### implementation 58 config = mkIf cfg.enable { 59 60 users.users.monetdb = mkIf (cfg.user == "monetdb") { 61 uid = config.ids.uids.monetdb; 62 group = cfg.group; 63 description = "MonetDB user"; 64 home = cfg.dataDir; 65 createHome = true; 66 }; 67 68 users.groups.monetdb = mkIf (cfg.group == "monetdb") { 69 gid = config.ids.gids.monetdb; 70 members = [ cfg.user ]; 71 }; 72 73 environment.systemPackages = [ cfg.package ]; 74 75 systemd.services.monetdb = { 76 description = "MonetDB database server"; 77 wantedBy = [ "multi-user.target" ]; 78 after = [ "network.target" ]; 79 path = [ cfg.package ]; 80 unitConfig.RequiresMountsFor = "${cfg.dataDir}"; 81 serviceConfig = { 82 User = cfg.user; 83 Group = cfg.group; 84 ExecStart = "${cfg.package}/bin/monetdbd start -n ${cfg.dataDir}"; 85 ExecStop = "${cfg.package}/bin/monetdbd stop ${cfg.dataDir}"; 86 }; 87 preStart = '' 88 if [ ! -e ${cfg.dataDir}/.merovingian_properties ]; then 89 # Create the dbfarm (as cfg.user) 90 ${cfg.package}/bin/monetdbd create ${cfg.dataDir} 91 fi 92 93 # Update the properties 94 ${cfg.package}/bin/monetdbd set port=${toString cfg.port} ${cfg.dataDir} 95 ${cfg.package}/bin/monetdbd set listenaddr=${cfg.listenAddress} ${cfg.dataDir} 96 ''; 97 }; 98 99 }; 100}