From 16f8a174162c7da0bd50e56961848d2092ab8ee4 Mon Sep 17 00:00:00 2001
From: PsyanticY <iuns@outlook.fr>
Date: Tue, 18 Jun 2019 17:45:02 +0100
Subject: [PATCH] zabbix:1.8 -> 4.0 | remove old packages

---
 .../services/monitoring/zabbix-server.nix     |  67 +++++++----
 pkgs/servers/monitoring/zabbix/2.0.nix        |  92 ----------------
 pkgs/servers/monitoring/zabbix/2.2.nix        | 104 ------------------
 pkgs/servers/monitoring/zabbix/default.nix    |  69 ++++++------
 pkgs/top-level/all-packages.nix               |   2 -
 5 files changed, 79 insertions(+), 255 deletions(-)
 delete mode 100644 pkgs/servers/monitoring/zabbix/2.0.nix
 delete mode 100644 pkgs/servers/monitoring/zabbix/2.2.nix

diff --git a/nixos/modules/services/monitoring/zabbix-server.nix b/nixos/modules/services/monitoring/zabbix-server.nix
index fdeab6af441..823145d8b90 100644
--- a/nixos/modules/services/monitoring/zabbix-server.nix
+++ b/nixos/modules/services/monitoring/zabbix-server.nix
@@ -17,6 +17,8 @@ let
 
   configFile = pkgs.writeText "zabbix_server.conf"
     ''
+      ListenPort = ${cfg.listenPort}
+
       LogFile = ${logDir}/zabbix_server
 
       PidFile = ${pidFile}
@@ -25,18 +27,18 @@ let
         DBHost = ${cfg.dbServer}
       ''}
 
-      DBName = zabbix
+      DBName = ${cfg.dbName}
 
-      DBUser = zabbix
+      DBUser = ${cfg.dbUser}
 
-      ${optionalString (cfg.dbPassword != "") ''
-        DBPassword = ${cfg.dbPassword}
-      ''}
+      DBPort = ${cfg.dbPort}
+
+      DBPassword = ${cfg.dbPassword}
 
       ${config.services.zabbixServer.extraConfig}
     '';
 
-  useLocalPostgres = cfg.dbServer == "localhost" || cfg.dbServer == "";
+  useLocalMysql = cfg.dbServer == "localhost" || cfg.dbServer == "";
 
 in
 
@@ -64,11 +66,34 @@ in
     };
 
     services.zabbixServer.dbPassword = mkOption {
-      default = "";
       type = types.str;
       description = "Password used to connect to the database server.";
     };
 
+    services.zabbixServer.dbUser = mkOption {
+      default = "zabbix";
+      type = types.str;
+      description = "User used to connect to the database server.";
+    };
+
+    services.zabbixServer.dbPort = mkOption {
+      default = "3306";
+      type = types.str;
+      description = "Port used to connect to the database server.";
+    };
+
+    services.zabbixServer.dbName = mkOption {
+      default = "zabbix";
+      type = types.str;
+      description = "Port used to connect to the database server.";
+    };
+
+    services.zabbixServer.listenPort = mkOption {
+      default = "10051";
+      type = types.str;
+      description = "Port used to listen to the agent.";
+    };
+
     services.zabbixServer.extraConfig = mkOption {
       default = "";
       type = types.lines;
@@ -76,14 +101,14 @@ in
         Configuration that is injected verbatim into the configuration file.
       '';
     };
-
   };
 
   ###### implementation
 
   config = mkIf cfg.enable {
 
-    services.postgresql.enable = useLocalPostgres;
+    services.mysql.enable = useLocalMysql;
+    services.mysql.package = pkgs.mysql;
 
     users.users = singleton
       { name = "zabbix";
@@ -95,32 +120,28 @@ in
       { description = "Zabbix Server";
 
         wantedBy = [ "multi-user.target" ];
-        after = optional useLocalPostgres "postgresql.service";
+        after = optional useLocalMysql "mysql.service";
 
         preStart =
           ''
             mkdir -m 0755 -p ${stateDir} ${logDir} ${libDir}
             chown zabbix ${stateDir} ${logDir} ${libDir}
-
-            if ! test -e "${libDir}/db-created"; then
-                ${pkgs.su}/bin/su -s "$SHELL" ${config.services.postgresql.superUser} -c '${pkgs.postgresql}/bin/createuser --no-superuser --no-createdb --no-createrole zabbix' || true
-                ${pkgs.su}/bin/su -s "$SHELL" ${config.services.postgresql.superUser} -c '${pkgs.postgresql}/bin/createdb --owner zabbix zabbix' || true
-                cat ${pkgs.zabbix.server}/share/zabbix/db/schema/postgresql.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c '${pkgs.postgresql}/bin/psql zabbix'
-                cat ${pkgs.zabbix.server}/share/zabbix/db/data/images_pgsql.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c '${pkgs.postgresql}/bin/psql zabbix'
-                cat ${pkgs.zabbix.server}/share/zabbix/db/data/data.sql | ${pkgs.su}/bin/su -s "$SHELL" zabbix -c '${pkgs.postgresql}/bin/psql zabbix'
+            ${lib.optionalString (useLocalMysql) ''
+              if ! test -e "${libDir}/db-created"; then
+                ${pkgs.sudo}/bin/sudo -u ${config.services.mysql.user} ${pkgs.mysql}/bin/mysql -uroot -e 'CREATE DATABASE ${cfg.dbName}'
+                ${pkgs.sudo}/bin/sudo -u ${config.services.mysql.user} ${pkgs.mysql}/bin/mysql -uroot -e "GRANT ALL ON ${cfg.dbName}.* TO ${cfg.dbUser}@localhost IDENTIFIED BY \"${cfg.dbPassword}\";"
+                cat ${pkgs.zabbix.server}/share/zabbix/db/schema/mysql.sql | ${pkgs.sudo}/bin/sudo -u zabbix ${pkgs.mysql}/bin/mysql -u${cfg.dbUser} -p${cfg.dbPassword} ${cfg.dbName}
+                cat ${pkgs.zabbix.server}/share/zabbix/db/data/images.sql | ${pkgs.sudo}/bin/sudo -u zabbix ${pkgs.mysql}/bin/mysql -u${cfg.dbUser} -p${cfg.dbPassword} ${cfg.dbName}
+                cat ${pkgs.zabbix.server}/share/zabbix/db/data/data.sql | ${pkgs.sudo}/bin/sudo -u zabbix ${pkgs.mysql}/bin/mysql -u${cfg.dbUser} -p${cfg.dbPassword} ${cfg.dbName}
                 touch "${libDir}/db-created"
-            fi
+              fi''}
           '';
 
         path = [ pkgs.nettools ];
 
-        serviceConfig.ExecStart = "@${pkgs.zabbix.server}/sbin/zabbix_server zabbix_server --config ${configFile}";
+        serviceConfig.ExecStart = "${pkgs.zabbix.server}/sbin/zabbix_server --config ${configFile}";
         serviceConfig.Type = "forking";
-        serviceConfig.Restart = "always";
-        serviceConfig.RestartSec = 2;
         serviceConfig.PIDFile = pidFile;
       };
-
   };
-
 }
diff --git a/pkgs/servers/monitoring/zabbix/2.0.nix b/pkgs/servers/monitoring/zabbix/2.0.nix
deleted file mode 100644
index ce660fa6e88..00000000000
--- a/pkgs/servers/monitoring/zabbix/2.0.nix
+++ /dev/null
@@ -1,92 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, postgresql, curl, openssl, zlib
-, enableJabber ? false, minmay ? null }:
-
-assert enableJabber -> minmay != null;
-
-let
-
-  version = "2.0.21";
-  branch = "2.0";
-
-  src = fetchurl {
-    url = "mirror://sourceforge/zabbix/zabbix-${version}.tar.gz";
-    sha256 = "14g22x2zy5xqnh2xg23xy5gjd49d1i8pks7pkidwdwa9acwgfx71";
-  };
-
-  preConfigure =
-    ''
-      substituteInPlace ./configure \
-        --replace " -static" "" \
-        ${stdenv.lib.optionalString (stdenv.cc.libc != null) ''
-          --replace /usr/include/iconv.h ${stdenv.lib.getDev stdenv.cc.libc}/include/iconv.h
-        ''}
-    '';
-
-in
-
-{
-  recurseForDerivations = true;
-
-  server = stdenv.mkDerivation {
-    name = "zabbix-${version}";
-
-    inherit src preConfigure;
-
-    configureFlags = [
-      "--enable-agent"
-      "--enable-server"
-      "--with-postgresql"
-      "--with-libcurl"
-      "--with-gettext"
-    ] ++ stdenv.lib.optional enableJabber "--with-jabber=${minmay}";
-
-    postPatch = ''
-      sed -i -e 's/iksemel/minmay/g' configure src/libs/zbxmedia/jabber.c
-      sed -i \
-        -e '/^static ikstransport/,/}/d' \
-        -e 's/iks_connect_with\(.*\), &zbx_iks_transport/mmay_connect_via\1/' \
-        -e 's/iks/mmay/g' -e 's/IKS/MMAY/g' src/libs/zbxmedia/jabber.c
-    '';
-
-  nativeBuildInputs = [ pkgconfig ];
-    buildInputs = [ postgresql curl openssl zlib ];
-
-    postInstall =
-      ''
-        mkdir -p $out/share/zabbix
-        cp -prvd frontends/php $out/share/zabbix/php
-        mkdir -p $out/share/zabbix/db/data
-        cp -prvd database/postgresql/data.sql $out/share/zabbix/db/data/data.sql
-        cp -prvd database/postgresql/images.sql $out/share/zabbix/db/data/images_pgsql.sql
-        mkdir -p $out/share/zabbix/db/schema
-        cp -prvd database/postgresql/schema.sql $out/share/zabbix/db/schema/postgresql.sql
-      '';
-
-    meta = {
-      inherit branch;
-      description = "An enterprise-class open source distributed monitoring solution";
-      homepage = https://www.zabbix.com/;
-      license = "GPL";
-      maintainers = [ stdenv.lib.maintainers.eelco ];
-      platforms = stdenv.lib.platforms.linux;
-    };
-  };
-
-  agent = stdenv.mkDerivation {
-    name = "zabbix-agent-${version}";
-
-    inherit src preConfigure;
-
-    configureFlags = [ "--enable-agent" ];
-
-    meta = with stdenv.lib; {
-      inherit branch;
-      description = "An enterprise-class open source distributed monitoring solution (client-side agent)";
-      homepage = https://www.zabbix.com/;
-      license = licenses.gpl2;
-      maintainers = [ maintainers.eelco ];
-      platforms = platforms.linux;
-    };
-  };
-
-}
diff --git a/pkgs/servers/monitoring/zabbix/2.2.nix b/pkgs/servers/monitoring/zabbix/2.2.nix
deleted file mode 100644
index ac0e6bb81f8..00000000000
--- a/pkgs/servers/monitoring/zabbix/2.2.nix
+++ /dev/null
@@ -1,104 +0,0 @@
-{ stdenv, fetchurl, pkgconfig, postgresql, curl, openssl, zlib
-, net_snmp , libssh2, openldap
-, enableJabber ? false, minmay ? null
-, enableSnmp ? false
-, enableSsh ? false
-, enableLdap ? false
-}:
-
-assert enableJabber -> minmay != null;
-
-let
-
-  version = "2.2.20";
-  branch = "2.2";
-
-  src = fetchurl {
-    url = "mirror://sourceforge/zabbix/zabbix-${version}.tar.gz";
-    sha256 = "00pfpyj3vydwx9dn0bklh1p5j0bp2awi4hvv4kgliyav8l0416hk";
-  };
-
-  preConfigure =
-    ''
-      substituteInPlace ./configure \
-        --replace " -static" "" \
-        ${stdenv.lib.optionalString (stdenv.cc.libc != null) ''
-          --replace /usr/include/iconv.h ${stdenv.lib.getDev stdenv.cc.libc}/include/iconv.h
-        ''}
-    '';
-
-in
-
-{
-  recurseForDerivations = true;
-
-  server = stdenv.mkDerivation {
-    name = "zabbix-${version}";
-
-    inherit src preConfigure;
-
-    configureFlags = [
-      "--enable-agent"
-      "--enable-server"
-      "--with-postgresql"
-      "--with-libcurl"
-      "--with-gettext"
-    ]
-    ++ stdenv.lib.optional enableJabber "--with-jabber=${minmay}"
-    ++ stdenv.lib.optional enableSnmp "--with-net-snmp"
-    ++ stdenv.lib.optional enableSsh "--with-ssh2=${libssh2.dev}"
-    ++ stdenv.lib.optional enableLdap "--with-ldap=${openldap.dev}";
-
-    postPatch = ''
-      sed -i -e 's/iksemel/minmay/g' configure src/libs/zbxmedia/jabber.c
-      sed -i \
-        -e '/^static ikstransport/,/}/d' \
-        -e 's/iks_connect_with\(.*\), &zbx_iks_transport/mmay_connect_via\1/' \
-        -e 's/iks/mmay/g' -e 's/IKS/MMAY/g' src/libs/zbxmedia/jabber.c
-    '';
-
-  nativeBuildInputs = [ pkgconfig ];
-    buildInputs = [ postgresql curl openssl zlib ]
-      ++ stdenv.lib.optional enableSnmp net_snmp
-      ++ stdenv.lib.optional enableSsh libssh2
-      ++ stdenv.lib.optional enableLdap openldap;
-
-    postInstall =
-      ''
-        mkdir -p $out/share/zabbix
-        cp -prvd frontends/php $out/share/zabbix/php
-        mkdir -p $out/share/zabbix/db/data
-        cp -prvd database/postgresql/data.sql $out/share/zabbix/db/data/data.sql
-        cp -prvd database/postgresql/images.sql $out/share/zabbix/db/data/images_pgsql.sql
-        mkdir -p $out/share/zabbix/db/schema
-        cp -prvd database/postgresql/schema.sql $out/share/zabbix/db/schema/postgresql.sql
-      '';
-
-    meta = {
-      inherit branch;
-      description = "An enterprise-class open source distributed monitoring solution";
-      homepage = https://www.zabbix.com/;
-      license = "GPL";
-      maintainers = [ stdenv.lib.maintainers.eelco ];
-      platforms = stdenv.lib.platforms.linux;
-    };
-  };
-
-  agent = stdenv.mkDerivation {
-    name = "zabbix-agent-${version}";
-
-    inherit src preConfigure;
-
-    configureFlags = [ "--enable-agent" ];
-
-    meta = with stdenv.lib; {
-      inherit branch;
-      description = "An enterprise-class open source distributed monitoring solution (client-side agent)";
-      homepage = https://www.zabbix.com/;
-      license = licenses.gpl2;
-      maintainers = [ maintainers.eelco ];
-      platforms = platforms.linux;
-    };
-  };
-
-}
diff --git a/pkgs/servers/monitoring/zabbix/default.nix b/pkgs/servers/monitoring/zabbix/default.nix
index 4b6bd5e0b25..47db4a15023 100644
--- a/pkgs/servers/monitoring/zabbix/default.nix
+++ b/pkgs/servers/monitoring/zabbix/default.nix
@@ -1,23 +1,13 @@
-{ stdenv, fetchurl, pkgconfig, postgresql, curl, openssl, zlib }:
+{ stdenv, fetchurl, pkgconfig, curl, openssl, zlib, pcre, libevent, mysql, libiconv, libxml2 }:
 
 let
-
-  version = "1.8.22";
+  version = "4.0.9";
 
   src = fetchurl {
-    url = "mirror://sourceforge/zabbix/zabbix-${version}.tar.gz";
-    sha256 = "0cjj3c4j4b9sl3hgh1fck330z9q0gz2k68g227y0paal6k6f54g7";
+    url = "https://netix.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/${version}/zabbix-${version}.tar.gz";
+    sha256 = "aa0bc9b5e5ca8e1b49b7551e2c5d86e0342c8630cba3a0b0e0e5d9c846e784d1";
   };
 
-  preConfigure =
-    ''
-      substituteInPlace ./configure \
-        --replace " -static" "" \
-        ${stdenv.lib.optionalString (stdenv.cc.libc != null) ''
-          --replace /usr/include/iconv.h ${stdenv.lib.getDev stdenv.cc.libc}/include/iconv.h
-        ''}
-    '';
-
 in
 
 {
@@ -25,51 +15,62 @@ in
   server = stdenv.mkDerivation {
     name = "zabbix-${version}";
 
-    inherit src preConfigure;
-
+    inherit src;
+    NIX_CFLAGS_COMPILE = "-L${mysql.connector-c}/lib/mysql -I${mysql.connector-c}/include/mysql";
     configureFlags = [
-      "--enable-agent"
       "--enable-server"
-      "--with-pgsql"
+      "--with-mysql"
       "--with-libcurl"
+      "--with-libxml2"
+      "--with-zlib"
+      "--with-libpcre=${pcre.dev}"
+      "--with-libevent=${libevent.dev}"
+      "--with-iconv=${libiconv}"
+      "--with-openssl=${openssl.dev}"
     ];
 
-  nativeBuildInputs = [ pkgconfig ];
-    buildInputs = [ postgresql curl openssl zlib ];
+    nativeBuildInputs = [ pkgconfig ];
+    buildInputs = [ mysql curl openssl zlib pcre libxml2 libevent ] ;
 
     postInstall =
       ''
         mkdir -p $out/share/zabbix
         cp -prvd frontends/php $out/share/zabbix/php
         mkdir -p $out/share/zabbix/db/data
-        cp -prvd create/data/*.sql $out/share/zabbix/db/data
+        cp -prvd database/mysql/data.sql $out/share/zabbix/db/data/data.sql
+        cp -prvd database/mysql/images.sql $out/share/zabbix/db/data/images.sql
         mkdir -p $out/share/zabbix/db/schema
-        cp -prvd create/schema/*.sql $out/share/zabbix/db/schema
+        cp -prvd database/mysql/schema.sql $out/share/zabbix/db/schema/mysql.sql
       '';
 
-    meta = {
-      description = "An enterprise-class open source distributed monitoring solution";
-      homepage = https://www.zabbix.com/;
-      license = "GPL";
-      maintainers = [ stdenv.lib.maintainers.eelco ];
-      platforms = stdenv.lib.platforms.linux;
+    meta = with stdenv.lib; {
+      description = "An enterprise-class open source distributed monitoring solution (server)";
+      homepage = http://www.zabbix.com/;
+      license = licenses.gpl2;
+      maintainers = [ maintainers.psyanticy ];
+      platforms = platforms.linux;
     };
   };
 
   agent = stdenv.mkDerivation {
     name = "zabbix-agent-${version}";
 
-    inherit src preConfigure;
+    inherit src;
 
-    configureFlags = [ "--enable-agent" ];
+    configureFlags = [
+      "--enable-agent"
+      "--with-libpcre=${pcre.dev}"
+      "--with-iconv=${libiconv}"
+      "--with-openssl=${openssl.dev}"
+    ];
+    buildInputs = [ pcre libiconv openssl ];
 
     meta = with stdenv.lib; {
       description = "An enterprise-class open source distributed monitoring solution (client-side agent)";
-      homepage = https://www.zabbix.com/;
+      homepage = http://www.zabbix.com/;
       license = licenses.gpl2;
-      maintainers = [ maintainers.eelco ];
+      maintainers = [ maintainers.psyanticy ];
       platforms = platforms.linux;
     };
   };
-
-}
+}
\ No newline at end of file
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 58df7d89b36..ec9e6a42da8 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -14901,8 +14901,6 @@ in
 
   zabbix = recurseIntoAttrs (callPackages ../servers/monitoring/zabbix {});
 
-  zabbix20 = callPackage ../servers/monitoring/zabbix/2.0.nix { };
-  zabbix22 = callPackage ../servers/monitoring/zabbix/2.2.nix { };
   zabbix34 = callPackage ../servers/monitoring/zabbix/3.4.nix { };
 
   zipkin = callPackage ../servers/monitoring/zipkin { };