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