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