at 24.11-pre 2.5 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 "the MonetDB database server"; 16 17 package = mkPackageOption pkgs "monetdb" { }; 18 19 user = mkOption { 20 type = types.str; 21 default = "monetdb"; 22 description = "User account under which MonetDB runs."; 23 }; 24 25 group = mkOption { 26 type = types.str; 27 default = "monetdb"; 28 description = "Group under which MonetDB runs."; 29 }; 30 31 dataDir = mkOption { 32 type = types.path; 33 default = "/var/lib/monetdb"; 34 description = "Data directory for the dbfarm."; 35 }; 36 37 port = mkOption { 38 type = types.ints.u16; 39 default = 50000; 40 description = "Port to listen on."; 41 }; 42 43 listenAddress = mkOption { 44 type = types.str; 45 default = "127.0.0.1"; 46 example = "0.0.0.0"; 47 description = "Address to listen on."; 48 }; 49 }; 50 }; 51 52 ###### implementation 53 config = mkIf cfg.enable { 54 55 users.users.monetdb = mkIf (cfg.user == "monetdb") { 56 uid = config.ids.uids.monetdb; 57 group = cfg.group; 58 description = "MonetDB user"; 59 home = cfg.dataDir; 60 createHome = true; 61 }; 62 63 users.groups.monetdb = mkIf (cfg.group == "monetdb") { 64 gid = config.ids.gids.monetdb; 65 members = [ cfg.user ]; 66 }; 67 68 environment.systemPackages = [ cfg.package ]; 69 70 systemd.services.monetdb = { 71 description = "MonetDB database server"; 72 wantedBy = [ "multi-user.target" ]; 73 after = [ "network.target" ]; 74 path = [ cfg.package ]; 75 unitConfig.RequiresMountsFor = "${cfg.dataDir}"; 76 serviceConfig = { 77 User = cfg.user; 78 Group = cfg.group; 79 ExecStart = "${cfg.package}/bin/monetdbd start -n ${cfg.dataDir}"; 80 ExecStop = "${cfg.package}/bin/monetdbd stop ${cfg.dataDir}"; 81 }; 82 preStart = '' 83 if [ ! -e ${cfg.dataDir}/.merovingian_properties ]; then 84 # Create the dbfarm (as cfg.user) 85 ${cfg.package}/bin/monetdbd create ${cfg.dataDir} 86 fi 87 88 # Update the properties 89 ${cfg.package}/bin/monetdbd set port=${toString cfg.port} ${cfg.dataDir} 90 ${cfg.package}/bin/monetdbd set listenaddr=${cfg.listenAddress} ${cfg.dataDir} 91 ''; 92 }; 93 94 }; 95}