zabbix: add full variants and add-on support for other
authorDaniel F. Dickinson <redacted>
Mon, 16 Feb 2026 17:37:05 +0000 (12:37 -0500)
committerHannu Nyman <redacted>
Wed, 4 Mar 2026 18:27:09 +0000 (20:27 +0200)
Rather than having a database selection for SQLITE which prevents
the server or frontend from building, we add a 'basic'
variant for the proxy which uses sqlite3, and have the database
Kconfig affect only the server and frontend.

* There are now only three variants:
  1. full, which is the default. It includes the full monitoring feature
     set currently available on openwrt, including netsnmp, curl-based
     checks, and ldap. In addition these features, plus the choice of
     database and ssl provider (or no ssl) are configuration options for
     this variant.
  2. basic, which provides basic functions with openssl support
  3. no-configure, for packages which are not part of the main Zabbix
     compile process (including the WebUI which only requires copying
     files for use by a web server with PHP CGI support).

* Full is the default variant for agentd and proxy, which are the only
  packages with a choice between full and basic. All other packages only
  are part of one variant.

* Full variants are the base version of the packages (that is
  zabbix-agentd is the 'full' version while zabbix-agentd-basic is the
  core version). The proxy version is named zabbix-proxy-basic-sqlite to
  announce that it is using the sqlite3 database and not a database
  server.

* get and sender only build if at least one of agentd, server, or proxy
are built. Therefore prevent selection get or sender when they would not
build.

* Zabbix's use of NetSNMP requires that Zabbix be build with OpenSSL

* While we are here, enable support for dates after 2038 (64-bit time_t)

* https://github.com/openwrt/packages/pull/28585#issuecomment-3984978895
  * we updated the name to reflect that it is for basic functionality
    that can standalone, rather then being a core the other packages
    build on.
  * basic has been used rather than tiny or small since the sentence
    'Provides only tiny/small functionality with SSL/TLS' in the
    description, sounds strange, but using basic this reads properly.

Signed-off-by: Daniel F. Dickinson <redacted>
admin/zabbix/Config-build.in [new file with mode: 0644]
admin/zabbix/Config-db.in [new file with mode: 0644]
admin/zabbix/Config.in [new file with mode: 0644]
admin/zabbix/Makefile

diff --git a/admin/zabbix/Config-build.in b/admin/zabbix/Config-build.in
new file mode 100644 (file)
index 0000000..39ec1c6
--- /dev/null
@@ -0,0 +1,8 @@
+config ZABBIX_BUILD_SUPPORT_BIN
+  bool
+  depends on (PACKAGE_zabbix-agentd || PACKAGE_zabbix-proxy || PACKAGE_zabbix-server)
+  default y
+  help
+    This option exists to prevent trying to build get and/or sender when none
+    of agentd, server, or proxy are being built. In that case get and sender are
+    not built by the Zabbix build system.
diff --git a/admin/zabbix/Config-db.in b/admin/zabbix/Config-db.in
new file mode 100644 (file)
index 0000000..6a6df60
--- /dev/null
@@ -0,0 +1,13 @@
+choice
+        prompt "Select Database Software for Zabbix"
+        default ZABBIX_POSTGRESQL
+
+        config ZABBIX_MYSQL
+                bool "MySQL/MariaDB"
+
+        config ZABBIX_POSTGRESQL
+                bool "PostgreSQL"
+
+        config ZABBIX_SQLITE
+                bool "SQLite3"
+endchoice
diff --git a/admin/zabbix/Config.in b/admin/zabbix/Config.in
new file mode 100644 (file)
index 0000000..d38494f
--- /dev/null
@@ -0,0 +1,37 @@
+choice
+        prompt "Select SSL Library"
+
+        default ZABBIX_OPENSSL
+
+        config ZABBIX_GNUTLS
+                bool "GnuTLS"
+
+        config ZABBIX_NOSSL
+                bool "NoSSL"
+
+        config ZABBIX_OPENSSL
+                bool "OpenSSL"
+endchoice
+
+menu "Modify features for non-core variants"
+
+        config ZABBIX_CURL
+                bool "cURL support (default SSL)"
+                default y
+                depends on !ZABBIX_GNUTLS && !ZABBIX_NOSSL
+
+        config ZABBIX_CURL_GNUTLS
+                bool "cURL support (GnuTLS)"
+                default n
+                depends on !ZABBIX_CURL
+
+        config ZABBIX_LDAP
+                bool "LDAP support"
+                depends on ZABBIX_OPENSSL
+                default y
+
+        config ZABBIX_NETSNMP
+                bool "NetSNMP support (OpenSSL)"
+                depends on ZABBIX_OPENSSL
+                default y
+endmenu
index 36aa0802db3214d2fbfac8981883521b0ae6f3d9..f0e4bbaf9364cd1f1397ab5ffbfd65accb16fa24 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=zabbix
 PKG_VERSION:=7.0.22
-PKG_RELEASE:=6
+PKG_RELEASE:=7
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://cdn.zabbix.com/zabbix/sources/stable/$(basename $(PKG_VERSION))/ \
@@ -25,29 +25,28 @@ PKG_INSTALL:=1
 PKG_BUILD_PARALLEL:=1
 
 PKG_CONFIG_DEPENDS:= \
+  CONFIG_ZABBIX_CURL \
+  CONFIG_ZABBIX_CURL_GNUTLS \
+  CONFIG_ZABBIX_GNUTLS \
+  CONFIG_ZABBIX_LDAP \
   CONFIG_ZABBIX_MYSQL \
-  CONFIG_ZABBIX_POSTGRESQL \
-  CONFIG_ZABBIX_SQLITE
+  CONFIG_ZABBIX_NETSNMP \
+  CONFIG_ZABBIX_OPENSSL \
+  CONFIG_ZABBIX_POSTGRESQL
 
 include $(INCLUDE_DIR)/package.mk
 include $(INCLUDE_DIR)/nls.mk
 
-define Package/zabbix-proxy-nossl/config
-comment "Database Software"
-
-choice
-        prompt "Selected Database Software"
-        default ZABBIX_POSTGRESQL
-
-        config ZABBIX_MYSQL
-                bool "MySQL/MariaDB"
+define Package/zabbix-agentd/config
+  source "$(SOURCE)/Config.in"
+endef
 
-        config ZABBIX_POSTGRESQL
-                bool "PostgreSQL"
+define Package/zabbix-proxy/config
+  source "$(SOURCE)/Config-db.in"
+endef
 
-        config ZABBIX_SQLITE
-                bool "SQLite"
-endchoice
+define Package/zabbix-get/config
+  source "$(SOURCE)/Config-build.in"
 endef
 
 define Package/zabbix/Default
@@ -58,113 +57,115 @@ define Package/zabbix/Default
   URL:=https://www.zabbix.com/
 endef
 
-define Package/zabbix-agentd/Default
-  $(call Package/zabbix/Default)
-  TITLE+= agentd
-  DEPENDS:= \
-    $(ICONV_DEPENDS) \
-    +libevent2-pthreads \
-    +libpcre2 \
-    +zlib
-  PROVIDES:=zabbix-agentd
-  USERID:=zabbix-agent=53:zabbix-agent=53
+define Package/zabbix/description/Default
+Zabbix is a software that monitors numerous parameters of a network and the
+health and integrity of servers, virtual machines, applications, services,
+databases, websites, the cloud and more. Zabbix offers excellent reporting and
+data visualization features based on the stored data.
+.
+Only one variant may be installed per binary (e.g. agent and agentd-basic cannot
+both be installed on the same system).
 endef
 
-define Package/zabbix-agentd-nossl
-  $(call Package/zabbix-agentd/Default)
-  TITLE+= (no SSL)
-  VARIANT:=nossl
-  DEFAULT_VARIANT:=1
+define Package/zabbix-basic/description/Default
+$(call Package/zabbix/description/Default)
+.
+Provides only basic functionality with SSL/TLS.
 endef
 
-define Package/zabbix-agentd-openssl
-  $(call Package/zabbix-agentd/Default)
-  TITLE+= (with OpenSSL)
-  DEPENDS+= +libopenssl
-  PROVIDES+= zabbix-agentd-ssl
-  VARIANT:=openssl
+define Package/zabbix-basic-sqlite/description/Default
+$(call Package/zabbix/description/Default)
+.
+Provides only the basic functionality with SSL/TLS.
+Uses SQLite3 for the database.
 endef
 
-define Package/zabbix-agentd-gnutls
-  $(call Package/zabbix-agentd/Default)
-  TITLE+= (with GnuTLS)
-  DEPENDS+= +libgnutls
-  PROVIDES+= zabbix-agentd-ssl
-  VARIANT:=gnutls
+define Package/zabbix-full/description/Default
+$(call Package/zabbix/description/Default)
+.
+Provides the full functionality available in OpenWrt with OpenSSL.
+Includes NetSNMP, cURL, and OpenLDAP support.
+Requires a database server.
 endef
 
-define Package/zabbix-sender/Default
+define Package/zabbix-agentd/Default
   $(call Package/zabbix/Default)
-  TITLE+= sender
+  TITLE+= agentd
   DEPENDS:= \
     $(ICONV_DEPENDS) \
+    +libevent2-pthreads \
     +libpcre2 \
     +zlib
-  PROVIDES:=zabbix-sender
+  PROVIDES:=\
+    @zabbix-agentd-any \
+    zabbix-agentd-ssl \
+    zabbix-agentd-openssl
+  USERID:=zabbix-agent=53:zabbix-agent=53
 endef
 
-define Package/zabbix-sender-nossl
-  $(call Package/zabbix-sender/Default)
-  TITLE+= (no SSL)
-  VARIANT:=nossl
+define Package/zabbix-agentd
+  $(call Package/zabbix-agentd/Default)
+  TITLE+= (full/with TLS)
+  DEPENDS+= \
+    +ZABBIX_CURL:libcurl \
+    +ZABBIX_CURL_GNUTLS:libcurl-gnutls \
+    +ZABBIX_GNUTLS:libgnutls \
+    +ZABBIX_LDAP:libopenldap \
+    +ZABBIX_NETSNMP:libnetsnmp-ssl \
+    +ZABBIX_OPENSSL:libopenssl
+  VARIANT:=full
   DEFAULT_VARIANT:=1
 endef
 
-define Package/zabbix-sender-openssl
-  $(call Package/zabbix-sender/Default)
-  TITLE+= (with OpenSSL)
-  DEPENDS+= +libopenssl
-  PROVIDES+= zabbix-sender-ssl
-  VARIANT:=openssl
+define Package/zabbix-agentd/description
+$(call Package/zabbix-full/description/Default)
+.
+Provides 'Zabbix Agent'.
+.
+Note that 'Zabbix Agent' does not directly use the database, but sends data to
+a 'Zabbix Server' or a 'Zabbix Proxy', which writes to a database.
+endef
+
+define Package/zabbix-agentd-basic
+  $(call Package/zabbix-agentd/Default)
+  TITLE+= (basic/with TLS)
+  DEPENDS += +libopenssl
+  VARIANT:=basic
 endef
 
-define Package/zabbix-sender-gnutls
-  $(call Package/zabbix-sender/Default)
-  TITLE+= (with GnuTLS)
-  DEPENDS+= +libgnutls
-  PROVIDES+= zabbix-sender-ssl
-  VARIANT:=gnutls
+define Package/zabbix-agentd-basic/description
+$(call Package/zabbix-basic/description/Default)
+.
+Provides 'Zabbix Agent'.
 endef
 
-define Package/zabbix-get/Default
+define Package/zabbix-get
   $(call Package/zabbix/Default)
-  TITLE+= get
+  TITLE+= get (with TLS)
   DEPENDS:= \
+    @(ZABBIX_BUILD_SUPPORT_BIN) \
     $(ICONV_DEPENDS) \
+    +ZABBIX_GNUTLS:libgnutls \
+    +ZABBIX_OPENSSL:libopenssl \
     +libpcre2 \
     +zlib
-  PROVIDES:=zabbix-get
+  PROVIDES:= \
+    zabbix-get-ssl \
+    zabbix-get-openssl
+  VARIANT:=full
 endef
 
-define Package/zabbix-get-nossl
-  $(call Package/zabbix-get/Default)
-  TITLE+= (no SSL)
-  VARIANT:=nossl
-  DEFAULT_VARIANT:=1
+define Package/zabbix-get/description
+$(call Package/zabbix-basic/description/Default)
+.
+Provides 'Zabbix Get'.
 endef
 
-define Package/zabbix-get-openssl
-  $(call Package/zabbix-get/Default)
-  TITLE+= (with OpenSSL)
-  DEPENDS+= +libopenssl
-  PROVIDES+= zabbix-get-ssl
-  VARIANT:=openssl
-endef
-
-define Package/zabbix-get-gnutls
-  $(call Package/zabbix-get/Default)
-  TITLE+= (with GnuTLS)
-  DEPENDS+= +libgnutls
-  PROVIDES+= zabbix-get-ssl
-  VARIANT:=gnutls
-endef
 
 define Package/zabbix-server-or-proxy/Default
   $(call Package/zabbix/Default)
   DEPENDS:= \
     $(ICONV_DEPENDS) \
-    +ZABBIX_MYSQL:libmariadbclient \
-    +ZABBIX_POSTGRESQL:libpq \
     +fping \
     +libevent2 \
     +libevent2-pthreads \
@@ -174,64 +175,99 @@ define Package/zabbix-server-or-proxy/Default
   USERID:=zabbix-server=70:zabbix-server=70
 endef
 
-define Package/zabbix-server/Default
+define Package/zabbix-proxy/Default
   $(call Package/zabbix-server-or-proxy/Default)
-  TITLE+= server
-  DEPENDS+= @(!ZABBIX_SQLITE)
-  PROVIDES:=zabbix-server
+  TITLE+= proxy
+  PROVIDES:=\
+    @zabbix-proxy-any \
+    zabbix-proxy-ssl \
+    zabbix-proxy-openssl
 endef
 
-define Package/zabbix-server-nossl
-  $(call Package/zabbix-server/Default)
-  TITLE+= (no SSL)
-  VARIANT:=nossl
+define Package/zabbix-proxy
+  $(call Package/zabbix-proxy/Default)
+  TITLE+= (full/with OpenSSL)
+  DEPENDS+= \
+    +ZABBIX_CURL:libcurl \
+    +ZABBIX_CURL_GNUTLS:libcurl-gnutls \
+    +ZABBIX_GNUTLS:libgnutls \
+    +ZABBIX_LDAP:libopenldap \
+    +ZABBIX_MYSQL:libmariadbclient \
+    +ZABBIX_NETSNMP:libnetsnmp-ssl \
+    +ZABBIX_OPENSSL:libopenssl \
+    +ZABBIX_POSTGRESQL:libpq \
+    +ZABBIX_SQLITE:libsqlite3
+  VARIANT:=full
   DEFAULT_VARIANT:=1
 endef
 
-define Package/zabbix-server-openssl
-  $(call Package/zabbix-server/Default)
-  TITLE+= (with OpenSSL)
-  DEPENDS+= +libopenssl
-  PROVIDES+= zabbix-server-ssl
-  VARIANT:=openssl
+define Package/zabbix-proxy/description
+$(call Package/zabbix-full/description/Default)
+.
+Provides 'Zabbix Proxy'.
 endef
 
-define Package/zabbix-server-gnutls
-  $(call Package/zabbix-server/Default)
-  TITLE+= (with GnuTLS)
-  DEPENDS+= +libgnutls
-  PROVIDES+= zabbix-server-ssl
-  VARIANT:=gnutls
+define Package/zabbix-proxy-basic-sqlite
+  $(call Package/zabbix-proxy/Default)
+  TITLE+= sqlite3 (basic/with TLS)
+  DEPENDS+= \
+    +libopenssl \
+    +libsqlite3
+  VARIANT:=basic
 endef
 
-define Package/zabbix-proxy/Default
-  $(call Package/zabbix-server-or-proxy/Default)
-  TITLE+= proxy
-  DEPENDS+= +ZABBIX_SQLITE:libsqlite3
-  PROVIDES:=zabbix-proxy
+define Package/zabbix-proxy-basic-sqlite/description
+$(call Package/zabbix-basic/description/Default)
+.
+Provides 'Zabbix Proxy' using sqlite3 for
+the database.
 endef
 
-define Package/zabbix-proxy-nossl
-  $(call Package/zabbix-proxy/Default)
-  TITLE+= (no SSL)
-  VARIANT:=nossl
-  DEFAULT_VARIANT:=1
+define Package/zabbix-sender
+  $(call Package/zabbix/Default)
+  TITLE+= sender (with TLS)
+  DEPENDS:= \
+    @(ZABBIX_BUILD_SUPPORT_BIN) \
+    $(ICONV_DEPENDS) \
+    +ZABBIX_GNUTLS:libgnutls \
+    +ZABBIX_OPENSSL:libopenssl \
+    +libpcre2 \
+    +zlib
+  PROVIDES:=\
+    zabbix-sender-ssl \
+    zabbix-sender-openssl
+  VARIANT:=full
 endef
 
-define Package/zabbix-proxy-openssl
-  $(call Package/zabbix-proxy/Default)
-  TITLE+= (with OpenSSL)
-  DEPENDS+= +libopenssl
-  PROVIDES+= zabbix-proxy-ssl
-  VARIANT:=openssl
+define Package/zabbix-sender/description
+$(call Package/zabbix-basic/description/Default)
+.
+Provides 'Zabbix Sender'.
 endef
 
-define Package/zabbix-proxy-gnutls
-  $(call Package/zabbix-proxy/Default)
-  TITLE+= (with GnuTLS)
-  DEPENDS+= +libgnutls
-  PROVIDES+= zabbix-proxy-ssl
-  VARIANT:=gnutls
+define Package/zabbix-server
+  $(call Package/zabbix-server-or-proxy/Default)
+  TITLE+= server (full/with OpenSSL)
+  DEPENDS+= \
+    @(!ZABBIX_SQLITE) \
+    +ZABBIX_CURL:libcurl \
+    +ZABBIX_CURL_GNUTLS:libcurl-gnutls \
+    +ZABBIX_GNUTLS:libgnutls \
+    +ZABBIX_LDAP:libopenldap \
+    +ZABBIX_MYSQL:libmariadbclient \
+    +ZABBIX_OPENSSL:libopenssl \
+    +ZABBIX_NETSNMP:libnetsnmp-ssl \
+    +ZABBIX_POSTGRESQL:libpq
+  PROVIDES:=\
+    zabbix-server-ssl \
+    zabbix-server-openssl
+  VARIANT:=full
+endef
+
+define Package/zabbix-server/description
+$(call Package/zabbix-full/description/Default)
+.
+Provides 'Zabbix Server'.
 endef
 
 define Package/zabbix-extra-mac80211
@@ -240,10 +276,16 @@ define Package/zabbix-extra-mac80211
   DEPENDS:= \
     @KERNEL_DEBUG_FS \
     @PACKAGE_MAC80211_DEBUGFS \
-    +zabbix-agentd
+    @zabbix-agentd-any
   VARIANT:=no-configure
 endef
 
+define Package/zabbix-extra-mac80211/description
+An extra package for zabbix-agentd that adds a discovery rule for mac80211 wifi phy and many userparameters.
+It contains an suid helper to allow zabbix-agentd to still run as zabbix user and not as root.
+See https://openwrt.org/docs/guide-user/services/network_monitoring/zabbix for ready to use zabbix templates.
+endef
+
 define Package/zabbix-extra-network
   $(call Package/zabbix/Default)
   TITLE+= discovery/userparameters for network
@@ -251,10 +293,16 @@ define Package/zabbix-extra-network
   DEPENDS:= \
     +libubus-lua \
     +lua \
-    +zabbix-agentd
+    @zabbix-agentd-any
   VARIANT:=no-configure
 endef
 
+define Package/zabbix-extra-network/description
+An extra package for zabbix-agentd that adds a discovery rule for openwrt network interfaces.
+The idea here is to discover only interfaces listed in /etc/config/network (discover br-lan and not eth0.1 and wlan0)
+See https://openwrt.org/docs/guide-user/services/network_monitoring/zabbix for ready to use zabbix templates.
+endef
+
 define Package/zabbix-extra-wifi
   $(call Package/zabbix/Default)
   TITLE+= discovery/userparameters for wifi
@@ -262,10 +310,16 @@ define Package/zabbix-extra-wifi
   DEPENDS:= \
     +libiwinfo-lua \
     +libubus-lua +lua \
-    +zabbix-agentd
+    @zabbix-agentd-any
   VARIANT:=no-configure
 endef
 
+define Package/zabbix-extra-wifi/description
+An extra package for zabbix-agentd that adds a discovery rule for wifi interfaces and many userparameters.
+As it uses libiwinfo, it works with all wifi devices supported by openwrt.
+See https://openwrt.org/docs/guide-user/services/network_monitoring/zabbix for ready to use zabbix templates.
+endef
+
 define Package/zabbix-frontend-server
   $(call Package/zabbix/Default)
   TITLE+= frontend server
@@ -279,8 +333,10 @@ define Package/zabbix-frontend-server
     +php8-mod-gd \
     +php8-mod-bcmath \
     +php8-mod-ctype \
+    +php8-mod-curl \
     +php8-mod-filter \
     +php8-mod-gettext \
+    +php8-mod-ldap \
     +php8-mod-mbstring \
     +php8-mod-openssl \
     +php8-mod-session \
@@ -291,52 +347,69 @@ define Package/zabbix-frontend-server
   VARIANT:=no-configure
 endef
 
-define Package/zabbix-extra-mac80211/description
-An extra package for zabbix-agentd that adds a discovery rule for mac80211 wifi phy and many userparameters.
-It contains an suid helper to allow zabbix-agentd to still run as zabbix user and not as root.
-See https://openwrt.org/docs/guide-user/services/network_monitoring/zabbix for ready to use zabbix templates.
-endef
-
-define Package/zabbix-extra-network/description
-An extra package for zabbix-agentd that adds a discovery rule for openwrt network interfaces.
-The idea here is to discover only interfaces listed in /etc/config/network (discover br-lan and not eth0.1 and wlan0)
-See https://openwrt.org/docs/guide-user/services/network_monitoring/zabbix for ready to use zabbix templates.
-endef
-
-define Package/zabbix-extra-wifi/description
-An extra package for zabbix-agentd that adds a discovery rule for wifi interfaces and many userparameters.
-As it uses libiwinfo, it works with all wifi devices supported by openwrt.
-See https://openwrt.org/docs/guide-user/services/network_monitoring/zabbix for ready to use zabbix templates.
+define Package/zabbix-frontend-server/description
+$(call Package/zabbix/description/Default)
+.
+Provides the Web UI (frontend server) for Zabbix.
 endef
 
 ifneq ($(BUILD_VARIANT),no-configure)
-
 CONFIGURE_ARGS+= \
-       --enable-agent \
-       $(if $(CONFIG_ZABBIX_SQLITE),--disable-server,--enable-server) \
-       --enable-proxy \
        $(call autoconf_bool,CONFIG_IPV6,ipv6) \
        --disable-java \
-       $(if $(CONFIG_ZABBIX_MYSQL),--with-mysql) \
-       $(if $(CONFIG_ZABBIX_POSTGRESQL),--with-postgresql) \
-       $(if $(CONFIG_ZABBIX_SQLITE),--with-sqlite3=$(STAGING_DIR)/usr) \
        --with-libevent=$(STAGING_DIR)/usr/include \
        --with-libpcre2=$(STAGING_DIR)/usr/include \
        --with-zlib=$(STAGING_DIR)/usr/include
+endif
 
-ifeq ($(BUILD_VARIANT),nossl)
-       CONFIGURE_ARGS+= --with-openssl="no" --with-gnutls="no"
+ifeq ($(BUILD_VARIANT),basic)
+CONFIGURE_ARGS+= \
+       $(if $(CONFIG_PACKAGE_zabbix-agentd-basic),--enable-agent,--disable-agent) \
+       $(if $(CONFIG_PACKAGE_zabbix-proxy-basic-sqlite),--enable-proxy --with-sqlite3,--disable-proxy) \
+       --with-openssl="$(STAGING_DIR)/usr" \
+       --disable-server
+endif
+
+ifeq ($(BUILD_VARIANT),full)
+
+CONFIGURE_ARGS+= \
+       $(if $(CONFIG_PACKAGE_zabbix-agentd),--enable-agent,--disable-agent) \
+       $(if $(CONFIG_PACKAGE_zabbix-proxy),--enable-proxy,--disable-proxy) \
+       $(if $(CONFIG_PACKAGE_zabbix-server),--enable-server,--disable-server) \
+       $(if $(CONFIG_ZABBIX_GNUTLS),--with-gnutls="$(STAGING_DIR)/usr",--with-gnutls="no") \
+       $(if $(CONFIG_ZABBIX_LDAP),--with-ldap="$(STAGING_DIR)/usr",--with-ldap="no") \
+       $(if $(CONFIG_ZABBIX_MYSQL),--with-mysql,--with-mysql="no") \
+       $(if $(CONFIG_ZABBIX_NETSNMP),--with-net-snmp="$(STAGING_DIR)/usr",--with-net-snmp="no") \
+       $(if $(CONFIG_ZABBIX_OPENSSL),--with-openssl="$(STAGING_DIR)/usr",--with-openssl="no") \
+       $(if $(CONFIG_ZABBIX_POSTGRESQL),--with-postgresql,--with-postgresql="no") \
+       $(if $(CONFIG_ZABBIX_SQLITE),--with-sqlite3,--with-sqlite3="no") \
+  --enable-year2038
+
+ifeq ($(CONFIG_ZABBIX_CURL),y)
+CONFIGURE_ARGS += \
+  --with-libcurl
+endif
+
+ifeq ($(CONFIG_ZABBIX_CURL_GNUTLS),y)
+CONFIGURE_VARS += \
+  ac_cv_path__libcurl_config="/bin/true" \
+  LIBCURL_CPPFLAGS="-I$(STAGING_DIR)/usr/include" \
+  LIBCURL_LDFLAGS="-L$(STAGING_DIR)/usr/lib" \
+  LIBCURL_LIBS="-lcurl-gnutls" \
+  libcurl_cv_lib_curl_usable=yes \
+  libcurl_cv_lib_curl_version=8.14.1 \
+  libcurl_cv_lib_curl_version_ok=yes
+CONFIGURE_ARGS += --with-libcurl="yes"
 endif
 
-ifeq ($(BUILD_VARIANT),openssl)
-       CONFIGURE_ARGS+= --with-openssl="$(STAGING_DIR)/usr"
+ifeq ($(CONFIG_ZABBIX_CURL)$(CONFIG_ZABBIX_CURL_GNUTLS),)
+CONFIGURE_ARGS += \
+  --with-libcurl="no"
 endif
 
-ifeq ($(BUILD_VARIANT),gnutls)
-       CONFIGURE_ARGS+= --with-gnutls="$(STAGING_DIR)/usr"
 endif
 
-else
+ifeq ($(BUILD_VARIANT),no-configure)
 
 define Build/Configure
        true
@@ -421,11 +494,11 @@ endef
 # Due to nested defines, eval, and call, the extra spaces for the nested define,
 # and tabs for the part that actually executes in a shell, is essential.
 define Package/zabbix-daemon/files
-        define Package/zabbix-$(1)-$(2)/conffiles
+        define Package/zabbix-$(1)$(2)/conffiles
   /etc/zabbix_$(1).conf
   $(3)
         endef
-        define Package/zabbix-$(1)-$(2)/install
+        define Package/zabbix-$(1)$(2)/install
                $(INSTALL_DIR) $$(1)/etc/zabbix_$(1).conf.d
                $(call Package/zabbix/install/sbin,$$(1),$(1))
                $(4)
@@ -454,30 +527,28 @@ define Package/zabbix-server/install-extra
        $(INSTALL_BIN) ./files/zabbix_server.defaults $$(1)/etc/uci-defaults/90_zabbix_server
 endef
 
-$(foreach zvariant,nossl openssl gnutls,$(eval $(call Package/zabbix-daemon/files,agentd,$(zvariant),,$(call Package/zabbix-agentd/install-extra))))
-$(foreach zvariant,nossl openssl gnutls,$(eval $(call Package/zabbix-daemon/files,server,$(zvariant),$(call Package/zabbix-server/conffiles-extra),$(call Package/zabbix-server/install-extra))))
-$(foreach zvariant,nossl openssl gnutls,$(eval $(call Package/zabbix-daemon/files,proxy,$(zvariant))))
+$(eval $(call Package/zabbix-daemon/files,agentd,-basic,,$(call Package/zabbix-agentd/install-extra)))
+$(eval $(call Package/zabbix-daemon/files,agentd,,,$(call Package/zabbix-agentd/install-extra)))
+$(eval $(call Package/zabbix-daemon/files,proxy,-basic-sqlite))
+$(eval $(call Package/zabbix-daemon/files,proxy))
+$(eval $(call Package/zabbix-daemon/files,server,,$(call Package/zabbix-server/conffiles-extra),$(call Package/zabbix-server/install-extra)))
 
-# Due to nested defines, eval, and call, the extra spaces for the nested define
-# is essential.
-define Package/zabbix-server/postinst/Default
-        define Package/zabbix-server-$(1)/postinst
+define Package/zabbix-server/postinst
   #!/bin/sh
-  [ -n "$$$${IPKG_INSTROOT}" ] || (. /etc/uci-defaults/90_zabbix_server) && rm -f /etc/uci-defaults/90_zabbix_server
+  [ -n "$${IPKG_INSTROOT}" ] || (. /etc/uci-defaults/90_zabbix_server) && rm -f /etc/uci-defaults/90_zabbix_server
   exit 0
-         endef
 endef
 
-$(foreach zvariant,nossl openssl gnutls,$(eval $(call Package/zabbix-server/postinst/Default,$(zvariant))))
-
+# Due to nested defines, eval, and call, the extra spaces for the nested define
+# is essential.
 define Package/zabbix-program/files
-        define Package/zabbix-$(1)-$(2)/install
+        define Package/zabbix-$(1)/install
                $(call Package/zabbix/install/bin,$$(1),$(1))
         endef
 endef
 
-$(foreach zvariant,nossl openssl gnutls,$(eval $(call Package/zabbix-program/files,sender,$(zvariant))))
-$(foreach zvariant,nossl openssl gnutls,$(eval $(call Package/zabbix-program/files,get,$(zvariant))))
+$(eval $(call Package/zabbix-program/files,get))
+$(eval $(call Package/zabbix-program/files,sender))
 
 define Package/zabbix-extra-mac80211/install
        $(call Package/zabbix/install/zabbix.conf.d,$(1),mac80211)
@@ -517,21 +588,15 @@ define Package/zabbix-frontend-server/install
        $(CP) $(PKG_BUILD_DIR)/ui/* $(1)/www/zabbix
 endef
 
-$(eval $(call BuildPackage,zabbix-agentd-nossl))
-$(eval $(call BuildPackage,zabbix-agentd-openssl))
-$(eval $(call BuildPackage,zabbix-agentd-gnutls))
-$(eval $(call BuildPackage,zabbix-get-nossl))
-$(eval $(call BuildPackage,zabbix-get-openssl))
-$(eval $(call BuildPackage,zabbix-get-gnutls))
-$(eval $(call BuildPackage,zabbix-sender-nossl))
-$(eval $(call BuildPackage,zabbix-sender-openssl))
-$(eval $(call BuildPackage,zabbix-sender-gnutls))
-$(eval $(call BuildPackage,zabbix-proxy-nossl))
-$(eval $(call BuildPackage,zabbix-proxy-openssl))
-$(eval $(call BuildPackage,zabbix-proxy-gnutls))
-$(eval $(call BuildPackage,zabbix-server-nossl))
-$(eval $(call BuildPackage,zabbix-server-openssl))
-$(eval $(call BuildPackage,zabbix-server-gnutls))
+# zabbix compiled variants (configured)
+$(eval $(call BuildPackage,zabbix-agentd))
+$(eval $(call BuildPackage,zabbix-agentd-basic))
+$(eval $(call BuildPackage,zabbix-get))
+$(eval $(call BuildPackage,zabbix-sender))
+$(eval $(call BuildPackage,zabbix-server))
+$(eval $(call BuildPackage,zabbix-proxy))
+$(eval $(call BuildPackage,zabbix-proxy-basic-sqlite))
+# no-configure packages
 $(eval $(call BuildPackage,zabbix-extra-mac80211))
 $(eval $(call BuildPackage,zabbix-extra-network))
 $(eval $(call BuildPackage,zabbix-extra-wifi))
git clone https://git.99rst.org/PROJECT