at 21.11-pre 2.8 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.solr; 8 9in 10 11{ 12 options = { 13 services.solr = { 14 enable = mkEnableOption "Solr"; 15 16 package = mkOption { 17 type = types.package; 18 default = pkgs.solr; 19 defaultText = "pkgs.solr"; 20 description = "Which Solr package to use."; 21 }; 22 23 port = mkOption { 24 type = types.int; 25 default = 8983; 26 description = "Port on which Solr is ran."; 27 }; 28 29 stateDir = mkOption { 30 type = types.path; 31 default = "/var/lib/solr"; 32 description = "The solr home directory containing config, data, and logging files."; 33 }; 34 35 extraJavaOptions = mkOption { 36 type = types.listOf types.str; 37 default = []; 38 description = "Extra command line options given to the java process running Solr."; 39 }; 40 41 user = mkOption { 42 type = types.str; 43 default = "solr"; 44 description = "User under which Solr is ran."; 45 }; 46 47 group = mkOption { 48 type = types.str; 49 default = "solr"; 50 description = "Group under which Solr is ran."; 51 }; 52 }; 53 }; 54 55 config = mkIf cfg.enable { 56 57 environment.systemPackages = [ cfg.package ]; 58 59 systemd.services.solr = { 60 after = [ "network.target" "remote-fs.target" "nss-lookup.target" "systemd-journald-dev-log.socket" ]; 61 wantedBy = [ "multi-user.target" ]; 62 63 environment = { 64 SOLR_HOME = "${cfg.stateDir}/data"; 65 LOG4J_PROPS = "${cfg.stateDir}/log4j2.xml"; 66 SOLR_LOGS_DIR = "${cfg.stateDir}/logs"; 67 SOLR_PORT = "${toString cfg.port}"; 68 }; 69 path = with pkgs; [ 70 gawk 71 procps 72 ]; 73 preStart = '' 74 mkdir -p "${cfg.stateDir}/data"; 75 mkdir -p "${cfg.stateDir}/logs"; 76 77 if ! test -e "${cfg.stateDir}/data/solr.xml"; then 78 install -D -m0640 ${cfg.package}/server/solr/solr.xml "${cfg.stateDir}/data/solr.xml" 79 install -D -m0640 ${cfg.package}/server/solr/zoo.cfg "${cfg.stateDir}/data/zoo.cfg" 80 fi 81 82 if ! test -e "${cfg.stateDir}/log4j2.xml"; then 83 install -D -m0640 ${cfg.package}/server/resources/log4j2.xml "${cfg.stateDir}/log4j2.xml" 84 fi 85 ''; 86 87 serviceConfig = { 88 User = cfg.user; 89 Group = cfg.group; 90 ExecStart="${cfg.package}/bin/solr start -f -a \"${concatStringsSep " " cfg.extraJavaOptions}\""; 91 ExecStop="${cfg.package}/bin/solr stop"; 92 }; 93 }; 94 95 users.users = optionalAttrs (cfg.user == "solr") { 96 solr = { 97 group = cfg.group; 98 home = cfg.stateDir; 99 createHome = true; 100 uid = config.ids.uids.solr; 101 }; 102 }; 103 104 users.groups = optionalAttrs (cfg.group == "solr") { 105 solr.gid = config.ids.gids.solr; 106 }; 107 108 }; 109 110}