at 18.09-beta 4.1 kB view raw
1{ config, lib, pkgs, ... }: 2 3with lib; 4 5let 6 7 cfg = config.services.solr; 8 9 # Assemble all jars needed for solr 10 solrJars = pkgs.stdenv.mkDerivation { 11 name = "solr-jars"; 12 13 src = pkgs.fetchurl { 14 url = http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.36/bin/apache-tomcat-5.5.36.tar.gz; 15 sha256 = "01mzvh53wrs1p2ym765jwd00gl6kn8f9k3nhdrnhdqr8dhimfb2p"; 16 }; 17 18 installPhase = '' 19 mkdir -p $out/lib 20 cp common/lib/*.jar $out/lib/ 21 ln -s ${pkgs.ant}/lib/ant/lib/ant.jar $out/lib/ 22 ln -s ${cfg.solrPackage}/lib/ext/* $out/lib/ 23 ln -s ${pkgs.jdk.home}/lib/tools.jar $out/lib/ 24 '' + optionalString (cfg.extraJars != []) '' 25 for f in ${concatStringsSep " " cfg.extraJars}; do 26 cp $f $out/lib 27 done 28 ''; 29 }; 30 31in { 32 33 options = { 34 services.solr = { 35 enable = mkOption { 36 type = types.bool; 37 default = false; 38 description = '' 39 Enables the solr service. 40 ''; 41 }; 42 43 javaPackage = mkOption { 44 type = types.package; 45 default = pkgs.jre; 46 defaultText = "pkgs.jre"; 47 description = '' 48 Which Java derivation to use for running solr. 49 ''; 50 }; 51 52 solrPackage = mkOption { 53 type = types.package; 54 default = pkgs.solr; 55 defaultText = "pkgs.solr"; 56 description = '' 57 Which solr derivation to use for running solr. 58 ''; 59 }; 60 61 extraJars = mkOption { 62 type = types.listOf types.path; 63 default = []; 64 description = '' 65 List of paths pointing to jars. Jars are copied to commonLibFolder to be available to java/solr. 66 ''; 67 }; 68 69 log4jConfiguration = mkOption { 70 type = types.lines; 71 default = '' 72 log4j.rootLogger=INFO, stdout 73 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 74 log4j.appender.stdout.Target=System.out 75 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 76 log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 77 ''; 78 description = '' 79 Contents of the <literal>log4j.properties</literal> used. By default, 80 everything is logged to stdout (picked up by systemd) with level INFO. 81 ''; 82 }; 83 84 user = mkOption { 85 type = types.str; 86 description = '' 87 The user that should run the solr process and. 88 the working directories. 89 ''; 90 }; 91 92 group = mkOption { 93 type = types.str; 94 description = '' 95 The group that will own the working directory. 96 ''; 97 }; 98 99 solrHome = mkOption { 100 type = types.str; 101 description = '' 102 The solr home directory. It is your own responsibility to 103 make sure this directory contains a working solr configuration, 104 and is writeable by the the user running the solr service. 105 Failing to do so, the solr will not start properly. 106 ''; 107 }; 108 109 extraJavaOptions = mkOption { 110 type = types.listOf types.str; 111 default = []; 112 description = '' 113 Extra command line options given to the java process running 114 solr. 115 ''; 116 }; 117 118 extraWinstoneOptions = mkOption { 119 type = types.listOf types.str; 120 default = []; 121 description = '' 122 Extra command line options given to the Winstone, which is 123 the servlet container hosting solr. 124 ''; 125 }; 126 }; 127 }; 128 129 config = mkIf cfg.enable { 130 131 services.winstone.solr = { 132 serviceName = "solr"; 133 inherit (cfg) user group javaPackage; 134 warFile = "${cfg.solrPackage}/lib/solr.war"; 135 extraOptions = [ 136 "--commonLibFolder=${solrJars}/lib" 137 "--useJasper" 138 ] ++ cfg.extraWinstoneOptions; 139 extraJavaOptions = [ 140 "-Dsolr.solr.home=${cfg.solrHome}" 141 "-Dlog4j.configuration=file://${pkgs.writeText "log4j.properties" cfg.log4jConfiguration}" 142 ] ++ cfg.extraJavaOptions; 143 }; 144 145 }; 146 147}