diff --git a/nixos/modules/services/monitoring/zabbix-server.nix b/nixos/modules/services/monitoring/zabbix-server.nix index fdeab6af4417..823145d8b906 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 ce660fa6e88b..000000000000 --- 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 ac0e6bb81f8b..000000000000 --- 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 4b6bd5e0b250..47db4a15023c 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 834dbc534e06..28769eb60ea7 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14955,8 +14955,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 { };