Unverified Commit d3deaacf authored by Mario Rodas's avatar Mario Rodas Committed by GitHub
Browse files

Merge pull request #263550 from anthonyroussel/updates/axis2

axis2: 1.7.9 -> 1.8.2, tomcat10: 10.0.27 -> 10.1.15, tomcat9: 9.0.75 -> 9.0.82
parents d69346e0 e5ae8202
Loading
Loading
Loading
Loading
+70 −95
Original line number Diff line number Diff line
{ config, lib, pkgs, ... }:

with lib;

let

  cfg = config.services.tomcat;
@@ -9,30 +7,20 @@ let
in

{

  meta = {
    maintainers = with maintainers; [ danbst ];
    maintainers = with lib.maintainers; [ danbst ];
  };

  ###### interface

  options = {

    services.tomcat = {
      enable = mkEnableOption (lib.mdDoc "Apache Tomcat");
      enable = lib.mkEnableOption (lib.mdDoc "Apache Tomcat");

      package = mkOption {
        type = types.package;
        default = pkgs.tomcat9;
        defaultText = literalExpression "pkgs.tomcat9";
        example = lib.literalExpression "pkgs.tomcat9";
        description = lib.mdDoc ''
          Which tomcat package to use.
        '';
      };
      package = lib.mkPackageOptionMD pkgs "tomcat9" { };

      purifyOnStart = mkOption {
        type = types.bool;
      purifyOnStart = lib.mkOption {
        type = lib.types.bool;
        default = false;
        description = lib.mdDoc ''
          On startup, the `baseDir` directory is populated with various files,
@@ -43,7 +31,7 @@ in
        '';
      };

      baseDir = mkOption {
      baseDir = lib.mkOption {
        type = lib.types.path;
        default = "/var/tomcat";
        description = lib.mdDoc ''
@@ -53,64 +41,64 @@ in
        '';
      };

      logDirs = mkOption {
      logDirs = lib.mkOption {
        default = [ ];
        type = types.listOf types.path;
        type = lib.types.listOf lib.types.path;
        description = lib.mdDoc "Directories to create in baseDir/logs/";
      };

      extraConfigFiles = mkOption {
      extraConfigFiles = lib.mkOption {
        default = [ ];
        type = types.listOf types.path;
        type = lib.types.listOf lib.types.path;
        description = lib.mdDoc "Extra configuration files to pull into the tomcat conf directory";
      };

      extraEnvironment = mkOption {
        type = types.listOf types.str;
      extraEnvironment = lib.mkOption {
        type = lib.types.listOf lib.types.str;
        default = [ ];
        example = [ "ENVIRONMENT=production" ];
        description = lib.mdDoc "Environment Variables to pass to the tomcat service";
      };

      extraGroups = mkOption {
      extraGroups = lib.mkOption {
        default = [ ];
        type = types.listOf types.str;
        type = lib.types.listOf lib.types.str;
        example = [ "users" ];
        description = lib.mdDoc "Defines extra groups to which the tomcat user belongs.";
      };

      user = mkOption {
        type = types.str;
      user = lib.mkOption {
        type = lib.types.str;
        default = "tomcat";
        description = lib.mdDoc "User account under which Apache Tomcat runs.";
      };

      group = mkOption {
        type = types.str;
      group = lib.mkOption {
        type = lib.types.str;
        default = "tomcat";
        description = lib.mdDoc "Group account under which Apache Tomcat runs.";
      };

      javaOpts = mkOption {
        type = types.either (types.listOf types.str) types.str;
      javaOpts = lib.mkOption {
        type = lib.types.either (lib.types.listOf lib.types.str) lib.types.str;
        default = "";
        description = lib.mdDoc "Parameters to pass to the Java Virtual Machine which spawns Apache Tomcat";
      };

      catalinaOpts = mkOption {
        type = types.either (types.listOf types.str) types.str;
      catalinaOpts = lib.mkOption {
        type = lib.types.either (lib.types.listOf lib.types.str) lib.types.str;
        default = "";
        description = lib.mdDoc "Parameters to pass to the Java Virtual Machine which spawns the Catalina servlet container";
      };

      sharedLibs = mkOption {
        type = types.listOf types.str;
      sharedLibs = lib.mkOption {
        type = lib.types.listOf lib.types.str;
        default = [ ];
        description = lib.mdDoc "List containing JAR files or directories with JAR files which are libraries shared by the web applications";
      };

      serverXml = mkOption {
        type = types.lines;
      serverXml = lib.mkOption {
        type = lib.types.lines;
        default = "";
        description = lib.mdDoc ''
          Verbatim server.xml configuration.
@@ -118,33 +106,33 @@ in
        '';
      };

      commonLibs = mkOption {
        type = types.listOf types.str;
      commonLibs = lib.mkOption {
        type = lib.types.listOf lib.types.str;
        default = [ ];
        description = lib.mdDoc "List containing JAR files or directories with JAR files which are libraries shared by the web applications and the servlet container";
      };

      webapps = mkOption {
        type = types.listOf types.path;
      webapps = lib.mkOption {
        type = lib.types.listOf lib.types.path;
        default = [ tomcat.webapps ];
        defaultText = literalExpression "[ config.services.tomcat.package.webapps ]";
        defaultText = lib.literalExpression "[ config.services.tomcat.package.webapps ]";
        description = lib.mdDoc "List containing WAR files or directories with WAR files which are web applications to be deployed on Tomcat";
      };

      virtualHosts = mkOption {
        type = types.listOf (types.submodule {
      virtualHosts = lib.mkOption {
        type = lib.types.listOf (lib.types.submodule {
          options = {
            name = mkOption {
              type = types.str;
            name = lib.mkOption {
              type = lib.types.str;
              description = lib.mdDoc "name of the virtualhost";
            };
            aliases = mkOption {
              type = types.listOf types.str;
            aliases = lib.mkOption {
              type = lib.types.listOf lib.types.str;
              description = lib.mdDoc "aliases of the virtualhost";
              default = [ ];
            };
            webapps = mkOption {
              type = types.listOf types.path;
            webapps = lib.mkOption {
              type = lib.types.listOf lib.types.path;
              description = lib.mdDoc ''
                List containing web application WAR files and/or directories containing
                web applications and configuration files for the virtual host.
@@ -157,48 +145,35 @@ in
        description = lib.mdDoc "List consisting of a virtual host name and a list of web applications to deploy on each virtual host";
      };

      logPerVirtualHost = mkOption {
        type = types.bool;
      logPerVirtualHost = lib.mkOption {
        type = lib.types.bool;
        default = false;
        description = lib.mdDoc "Whether to enable logging per virtual host.";
      };

      jdk = mkOption {
        type = types.package;
        default = pkgs.jdk;
        defaultText = literalExpression "pkgs.jdk";
        description = lib.mdDoc "Which JDK to use.";
      };
      jdk = lib.mkPackageOptionMD pkgs "jdk" { };

      axis2 = {
        enable = lib.mkEnableOption "Apache Axis2 container";

        enable = mkOption {
          default = false;
          type = types.bool;
          description = lib.mdDoc "Whether to enable an Apache Axis2 container";
        };

        services = mkOption {
        services = lib.mkOption {
          default = [ ];
          type = types.listOf types.str;
          type = lib.types.listOf lib.types.str;
          description = lib.mdDoc "List containing AAR files or directories with AAR files which are web services to be deployed on Axis2";
        };

      };

    };

  };


  ###### implementation

  config = mkIf config.services.tomcat.enable {
  config = lib.mkIf config.services.tomcat.enable {

    users.groups.tomcat.gid = config.ids.gids.tomcat;

    users.users.tomcat =
      { uid = config.ids.uids.tomcat;
      {
        uid = config.ids.uids.tomcat;
        description = "Tomcat user";
        home = "/homeless-shelter";
        group = "tomcat";
@@ -234,7 +209,7 @@ in
          ln -sfn ${tomcat}/conf/$i ${cfg.baseDir}/conf/`basename $i`
        done

        ${optionalString (cfg.extraConfigFiles != []) ''
        ${lib.optionalString (cfg.extraConfigFiles != []) ''
          for i in ${toString cfg.extraConfigFiles}; do
            ln -sfn $i ${cfg.baseDir}/conf/`basename $i`
          done
@@ -253,32 +228,32 @@ in
            hostElementForVirtualHost = virtualHost: ''
              <Host name="${virtualHost.name}" appBase="virtualhosts/${virtualHost.name}/webapps"
                    unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
            '' + concatStrings (innerElementsForVirtualHost virtualHost) + ''
            '' + lib.concatStrings (innerElementsForVirtualHost virtualHost) + ''
              </Host>
            '';
            innerElementsForVirtualHost = virtualHost:
              (map (alias: ''
                <Alias>${alias}</Alias>
              '') virtualHost.aliases)
              ++ (optional cfg.logPerVirtualHost ''
              ++ (lib.optional cfg.logPerVirtualHost ''
                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs/${virtualHost.name}"
                       prefix="${virtualHost.name}_access_log." pattern="combined" resolveHosts="false"/>
              '');
            hostElementsString = concatMapStringsSep "\n" hostElementForVirtualHost cfg.virtualHosts;
            hostElementsSedString = replaceStrings ["\n"] ["\\\n"] hostElementsString;
            hostElementsString = lib.concatMapStringsSep "\n" hostElementForVirtualHost cfg.virtualHosts;
            hostElementsSedString = lib.replaceStrings ["\n"] ["\\\n"] hostElementsString;
          in ''
            # Create a modified server.xml which also includes all virtual hosts
            sed -e "/<Engine name=\"Catalina\" defaultHost=\"localhost\">/a\\"${escapeShellArg hostElementsSedString} \
            sed -e "/<Engine name=\"Catalina\" defaultHost=\"localhost\">/a\\"${lib.escapeShellArg hostElementsSedString} \
                  ${tomcat}/conf/server.xml > ${cfg.baseDir}/conf/server.xml
          ''
        }
        ${optionalString (cfg.logDirs != []) ''
        ${lib.optionalString (cfg.logDirs != []) ''
          for i in ${toString cfg.logDirs}; do
            mkdir -p ${cfg.baseDir}/logs/$i
            chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/logs/$i
          done
        ''}
        ${optionalString cfg.logPerVirtualHost (toString (map (h: ''
        ${lib.optionalString cfg.logPerVirtualHost (toString (map (h: ''
          mkdir -p ${cfg.baseDir}/logs/${h.name}
          chown ${cfg.user}:${cfg.group} ${cfg.baseDir}/logs/${h.name}
        '') cfg.virtualHosts))}
@@ -345,7 +320,7 @@ in

          # Symlink all the given web applications files or paths into the webapps/ directory
          # of this virtual host
          for i in "${optionalString (virtualHost ? webapps) (toString virtualHost.webapps)}"; do
          for i in "${lib.optionalString (virtualHost ? webapps) (toString virtualHost.webapps)}"; do
            if [ -f $i ]; then
              # If the given web application is a file, symlink it into the webapps/ directory
              ln -sfn $i ${cfg.baseDir}/virtualhosts/${virtualHost.name}/webapps/`basename $i`
@@ -368,7 +343,7 @@ in
          done
        '') cfg.virtualHosts)}

        ${optionalString cfg.axis2.enable ''
        ${lib.optionalString cfg.axis2.enable ''
          # Copy the Axis2 web application
          cp -av ${pkgs.axis2}/webapps/axis2 ${cfg.baseDir}/webapps

+11 −6
Original line number Diff line number Diff line
import ./make-test-python.nix ({ pkgs, ... }:

{
import ./make-test-python.nix ({ pkgs, ... }: {
  name = "tomcat";

  nodes.machine = { pkgs, ... }: {
    services.tomcat.enable = true;
    services.tomcat = {
      enable = true;
      axis2.enable = true;
    };
  };

  testScript = ''
    machine.wait_for_unit("tomcat.service")
    machine.wait_for_open_port(8080)
    machine.wait_for_file("/var/tomcat/webapps/examples");

    machine.succeed(
        "curl -sS --fail http://localhost:8080/examples/servlets/servlet/HelloWorldExample | grep 'Hello World!'"
    )
    machine.succeed(
        "curl --fail http://localhost:8080/examples/servlets/servlet/HelloWorldExample | grep 'Hello World!'"
        "curl -sS --fail http://localhost:8080/examples/jsp/jsp2/simpletag/hello.jsp | grep 'Hello, world!'"
    )
    machine.succeed(
        "curl --fail http://localhost:8080/examples/jsp/jsp2/simpletag/hello.jsp | grep 'Hello, world!'"
        "curl -sS --fail http://localhost:8080/axis2/axis2-web/HappyAxis.jsp | grep 'Found Axis2'"
    )
  '';
})
+6 −3
Original line number Diff line number Diff line
@@ -2,11 +2,11 @@

stdenv.mkDerivation rec {
  pname = "axis2";
  version = "1.7.9";
  version = "1.8.2";

  src = fetchurl {
    url = "http://apache.proserve.nl/axis/axis2/java/core/${version}/${pname}-${version}-bin.zip";
    sha256 = "0dh0s9bfh95wmmw8nyf2yw95biq7d9zmrbg8k4vzcyz1if228lac";
    url = "mirror://apache/axis/axis2/java/core/${version}/${pname}-${version}-bin.zip";
    hash = "sha256-oilPVFFpl3F61nVDxcYx/bc81FopS5fzoIdXzeP8brk=";
  };

  nativeBuildInputs = [ unzip ];
@@ -15,6 +15,9 @@ stdenv.mkDerivation rec {

  meta = {
    description = "Web Services / SOAP / WSDL engine, the successor to the widely used Apache Axis SOAP stack";
    homepage = "https://axis.apache.org/axis2/java/core/";
    changelog = "https://axis.apache.org/axis2/java/core/release-notes/${version}.html";
    maintainers = [ lib.maintainers.anthonyroussel ];
    platforms = lib.platforms.unix;
    sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
    license = lib.licenses.asl20;
+16 −8
Original line number Diff line number Diff line
{ stdenv, lib, fetchurl }:
{ stdenv, lib, fetchurl, nixosTests, testers, jre }:

let

  common = { versionMajor, versionMinor, sha256 }: stdenv.mkDerivation (rec {
  common = { versionMajor, versionMinor, sha256 }: stdenv.mkDerivation (finalAttrs: {
    pname = "apache-tomcat";
    version = "${versionMajor}.${versionMinor}";

    src = fetchurl {
      url = "mirror://apache/tomcat/tomcat-${versionMajor}/v${version}/bin/${pname}-${version}.tar.gz";
      url = "mirror://apache/tomcat/tomcat-${versionMajor}/v${finalAttrs.version}/bin/${finalAttrs.pname}-${finalAttrs.version}.tar.gz";
      inherit sha256;
    };

@@ -20,11 +20,19 @@ let
        mv $out/webapps $webapps/
      '';

    passthru.tests = {
      inherit (nixosTests) tomcat;
      version = testers.testVersion {
        package = finalAttrs.finalPackage;
        command = "JAVA_HOME=${jre} ${finalAttrs.finalPackage}/bin/version.sh";
      };
    };

    meta = with lib; {
      homepage = "https://tomcat.apache.org/";
      description = "An implementation of the Java Servlet and JavaServer Pages technologies";
      platforms = platforms.all;
      maintainers = [ ];
      maintainers = with maintainers; [ anthonyroussel ];
      license = [ licenses.asl20 ];
      sourceProvenance = with sourceTypes; [ binaryBytecode ];
    };
@@ -33,13 +41,13 @@ let
in {
  tomcat9 = common {
    versionMajor = "9";
    versionMinor = "0.75";
    sha256 = "sha256-VWfKg789z+ns1g3hDsCZFYQ+PsdqUEBeBHCihkGZelk=";
    versionMinor = "0.82";
    sha256 = "sha256-xvRGXDUkYaHFYacUPg81Xf0xyTbdsc1XP/PmqMR8bQc=";
  };

  tomcat10 = common {
    versionMajor = "10";
    versionMinor = "0.27";
    sha256 = "sha256-N2atmOdhVrGx88eXOc9Wziq8kn7IWzTeFyFpir/5HLc=";
    versionMinor = "1.15";
    sha256 = "sha256-cqQW3Dc3sC/1zoidMIGDBNw4G5bnxYvhmHz7U7K6Djg=";
  };
}