Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: f4508c4beeda
Choose a base ref
...
head repository: NixOS/nixpkgs
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: c891dac82ff3
Choose a head ref
  • 2 commits
  • 6 files changed
  • 2 contributors

Commits on Nov 3, 2018

  1. solr: 4.10.3 -> 7.5.0, refactor service to reflect major changes in v…

    …ersion bump, NixOS test included
    aanderse committed Nov 3, 2018
    Copy the full SHA
    1b725de View commit details

Commits on Nov 4, 2018

  1. Merge pull request #49283 from aanderse/solr

    solr: 4.10.3 -> 7.5.0, refactor service to reflect major changes in version bump
    andir authored Nov 4, 2018
    Copy the full SHA
    c891dac View commit details
Showing with 144 additions and 117 deletions.
  1. +7 −0 nixos/doc/manual/release-notes/rl-1903.xml
  2. +2 −0 nixos/modules/misc/ids.nix
  3. +72 −109 nixos/modules/services/search/solr.nix
  4. +1 −0 nixos/release.nix
  5. +47 −0 nixos/tests/solr.nix
  6. +15 −8 pkgs/servers/search/solr/default.nix
7 changes: 7 additions & 0 deletions nixos/doc/manual/release-notes/rl-1903.xml
Original file line number Diff line number Diff line change
@@ -190,6 +190,13 @@
options can occour more than once in the configuration.
</para>
</listitem>
<listitem>
<para>
The <literal>solr</literal> package has been upgraded from 4.10.3 to 7.5.0 and has undergone
some major changes. The <literal>services.solr</literal> module has been updated to reflect
these changes. Please review http://lucene.apache.org/solr/ carefully before upgrading.
</para>
</listitem>
</itemizedlist>
</section>

2 changes: 2 additions & 0 deletions nixos/modules/misc/ids.nix
Original file line number Diff line number Diff line change
@@ -333,6 +333,7 @@
lidarr = 306;
slurm = 307;
kapacitor = 308;
solr = 309;

# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!

@@ -626,6 +627,7 @@
lidarr = 306;
slurm = 307;
kapacitor = 308;
solr = 309;

# When adding a gid, make sure it doesn't match an existing
# uid. Users and groups with the same name should have equal
181 changes: 72 additions & 109 deletions nixos/modules/services/search/solr.nix
Original file line number Diff line number Diff line change
@@ -6,142 +6,105 @@ let

cfg = config.services.solr;

# Assemble all jars needed for solr
solrJars = pkgs.stdenv.mkDerivation {
name = "solr-jars";

src = pkgs.fetchurl {
url = http://archive.apache.org/dist/tomcat/tomcat-5/v5.5.36/bin/apache-tomcat-5.5.36.tar.gz;
sha256 = "01mzvh53wrs1p2ym765jwd00gl6kn8f9k3nhdrnhdqr8dhimfb2p";
};

installPhase = ''
mkdir -p $out/lib
cp common/lib/*.jar $out/lib/
ln -s ${pkgs.ant}/lib/ant/lib/ant.jar $out/lib/
ln -s ${cfg.solrPackage}/lib/ext/* $out/lib/
ln -s ${pkgs.jdk.home}/lib/tools.jar $out/lib/
'' + optionalString (cfg.extraJars != []) ''
for f in ${concatStringsSep " " cfg.extraJars}; do
cp $f $out/lib
done
'';
};

in {
in

{
options = {
services.solr = {
enable = mkOption {
type = types.bool;
default = false;
description = ''
Enables the solr service.
'';
};

javaPackage = mkOption {
type = types.package;
default = pkgs.jre;
defaultText = "pkgs.jre";
description = ''
Which Java derivation to use for running solr.
'';
};
enable = mkEnableOption "Enables the solr service.";

solrPackage = mkOption {
package = mkOption {
type = types.package;
default = pkgs.solr;
defaultText = "pkgs.solr";
description = ''
Which solr derivation to use for running solr.
'';
description = "Which Solr package to use.";
};

extraJars = mkOption {
type = types.listOf types.path;
default = [];
description = ''
List of paths pointing to jars. Jars are copied to commonLibFolder to be available to java/solr.
'';
port = mkOption {
type = types.int;
default = 8983;
description = "Port on which Solr is ran.";
};

log4jConfiguration = mkOption {
type = types.lines;
default = ''
log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
'';
description = ''
Contents of the <literal>log4j.properties</literal> used. By default,
everything is logged to stdout (picked up by systemd) with level INFO.
'';
stateDir = mkOption {
type = types.path;
default = "/var/lib/solr";
description = "The solr home directory containing config, data, and logging files.";
};

user = mkOption {
type = types.str;
description = ''
The user that should run the solr process and.
the working directories.
'';
extraJavaOptions = mkOption {
type = types.listOf types.str;
default = [];
description = "Extra command line options given to the java process running Solr.";
};

group = mkOption {
user = mkOption {
type = types.str;
description = ''
The group that will own the working directory.
'';
default = "solr";
description = "User under which Solr is ran.";
};

solrHome = mkOption {
group = mkOption {
type = types.str;
description = ''
The solr home directory. It is your own responsibility to
make sure this directory contains a working solr configuration,
and is writeable by the the user running the solr service.
Failing to do so, the solr will not start properly.
'';
};

extraJavaOptions = mkOption {
type = types.listOf types.str;
default = [];
description = ''
Extra command line options given to the java process running
solr.
'';
};

extraWinstoneOptions = mkOption {
type = types.listOf types.str;
default = [];
description = ''
Extra command line options given to the Winstone, which is
the servlet container hosting solr.
'';
default = "solr";
description = "Group under which Solr is ran.";
};
};
};

config = mkIf cfg.enable {

services.winstone.solr = {
serviceName = "solr";
inherit (cfg) user group javaPackage;
warFile = "${cfg.solrPackage}/lib/solr.war";
extraOptions = [
"--commonLibFolder=${solrJars}/lib"
"--useJasper"
] ++ cfg.extraWinstoneOptions;
extraJavaOptions = [
"-Dsolr.solr.home=${cfg.solrHome}"
"-Dlog4j.configuration=file://${pkgs.writeText "log4j.properties" cfg.log4jConfiguration}"
] ++ cfg.extraJavaOptions;
environment.systemPackages = [ cfg.package ];

systemd.services.solr = {
after = [ "network.target" "remote-fs.target" "nss-lookup.target" "systemd-journald-dev-log.socket" ];
wantedBy = [ "multi-user.target" ];

environment = {
SOLR_HOME = "${cfg.stateDir}/data";
LOG4J_PROPS = "${cfg.stateDir}/log4j2.xml";
SOLR_LOGS_DIR = "${cfg.stateDir}/logs";
SOLR_PORT = "${toString cfg.port}";
};
path = with pkgs; [
gawk
procps
];
preStart = ''
mkdir -p "${cfg.stateDir}/data";
mkdir -p "${cfg.stateDir}/logs";
if ! test -e "${cfg.stateDir}/data/solr.xml"; then
install -D -m0640 ${cfg.package}/server/solr/solr.xml "${cfg.stateDir}/data/solr.xml"
install -D -m0640 ${cfg.package}/server/solr/zoo.cfg "${cfg.stateDir}/data/zoo.cfg"
fi
if ! test -e "${cfg.stateDir}/log4j2.xml"; then
install -D -m0640 ${cfg.package}/server/resources/log4j2.xml "${cfg.stateDir}/log4j2.xml"
fi
'';

serviceConfig = {
User = cfg.user;
Group = cfg.group;
ExecStart="${cfg.package}/bin/solr start -f -a \"${concatStringsSep " " cfg.extraJavaOptions}\"";
ExecStop="${cfg.package}/bin/solr stop";
};
};

users.users = optionalAttrs (cfg.user == "solr") (singleton
{ name = "solr";
group = cfg.group;
home = cfg.stateDir;
createHome = true;
uid = config.ids.uids.solr;
});

users.groups = optionalAttrs (cfg.group == "solr") (singleton
{ name = "solr";
gid = config.ids.gids.solr;
});

};

}
1 change: 1 addition & 0 deletions nixos/release.nix
Original file line number Diff line number Diff line change
@@ -410,6 +410,7 @@ in rec {
tests.slurm = callTest tests/slurm.nix {};
tests.smokeping = callTest tests/smokeping.nix {};
tests.snapper = callTest tests/snapper.nix {};
tests.solr = callTest tests/solr.nix {};
#tests.statsd = callTest tests/statsd.nix {}; # statsd is broken: #45946
tests.strongswan-swanctl = callTest tests/strongswan-swanctl.nix {};
tests.sudo = callTest tests/sudo.nix {};
47 changes: 47 additions & 0 deletions nixos/tests/solr.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import ./make-test.nix ({ pkgs, lib, ... }:
{
name = "solr";
meta.maintainers = [ lib.maintainers.aanderse ];

machine =
{ config, pkgs, ... }:
{
# Ensure the virtual machine has enough memory for Solr to avoid the following error:
#
# OpenJDK 64-Bit Server VM warning:
# INFO: os::commit_memory(0x00000000e8000000, 402653184, 0)
# failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 402653184 bytes for committing reserved memory.
virtualisation.memorySize = 2000;

services.solr.enable = true;
};

testScript = ''
startAll;
$machine->waitForUnit('solr.service');
$machine->waitForOpenPort('8983');
$machine->succeed('curl --fail http://localhost:8983/solr/');
# adapted from pkgs.solr/examples/films/README.txt
$machine->succeed('sudo -u solr solr create -c films');
$machine->succeed(q(curl http://localhost:8983/solr/films/schema -X POST -H 'Content-type:application/json' --data-binary '{
"add-field" : {
"name":"name",
"type":"text_general",
"multiValued":false,
"stored":true
},
"add-field" : {
"name":"initial_release_date",
"type":"pdate",
"stored":true
}
}')) =~ /"status":0/ or die;
$machine->succeed('sudo -u solr post -c films ${pkgs.solr}/example/films/films.json');
$machine->succeed('curl http://localhost:8983/solr/films/query?q=name:batman') =~ /"name":"Batman Begins"/ or die;
'';
})
23 changes: 15 additions & 8 deletions pkgs/servers/search/solr/default.nix
Original file line number Diff line number Diff line change
@@ -1,28 +1,35 @@
{ stdenv, fetchurl }:
{ stdenv, fetchurl, jre, makeWrapper }:

stdenv.mkDerivation rec {
name = "solr-${version}";
version = "4.10.3";
version = "7.5.0";

src = fetchurl {
url = "mirror://apache/lucene/solr/${version}/solr-${version}.tgz";
sha256 = "1dp269jka4q62qhv47j91wsrsnbxfn23lsx6qcycbijrlyh28w5c";
sha256 = "1g6f58j2pzb73phj4hfri9mj7vmql72by7w3xrbq1pbnqgzxmhpa";
};

phases = [ "unpackPhase" "installPhase" ];
nativeBuildInputs = [ makeWrapper ];

installPhase = ''
mkdir -p $out/lib
cp dist/${name}.war $out/lib/solr.war
cp -r example/lib/ext $out/lib/ext
mkdir -p $out $out/bin
cp -r bin/solr bin/post $out/bin/
cp -r contrib $out/
cp -r dist $out/
cp -r example $out/
cp -r server $out/
wrapProgram $out/bin/solr --set JAVA_HOME "${jre}"
wrapProgram $out/bin/post --set JAVA_HOME "${jre}"
'';

meta = with stdenv.lib; {
homepage = https://lucene.apache.org/solr/;
description = "Open source enterprise search platform from the Apache Lucene project";
license = licenses.asl20;
platforms = platforms.all;
maintainers = [ maintainers.rickynils maintainers.domenkozar ];
maintainers = [ maintainers.rickynils maintainers.domenkozar maintainers.aanderse ];
};

}