Files
packages/admin/zabbix/Makefile
Daniel F. Dickinson 75146ea2be zabbix: deduplicate and reorganize package defines
In preparation for further changes, deduplicate package definitions,
and reorganize them. At the same time make use of provides to ensure
both existing names are preserved, and that it is possible to be
specific about the variant of the package one wants.

Also, condense the package conffiles, install, postinst, etc handling.
This is more maintainable (less copy and paste and less to modify).

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
2026-02-01 20:39:30 +01:00

552 lines
14 KiB
Makefile

#
# Copyright (C) 2006-2015 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
include $(TOPDIR)/rules.mk
PKG_NAME:=zabbix
PKG_VERSION:=7.0.22
PKG_RELEASE:=3
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://cdn.zabbix.com/zabbix/sources/stable/$(basename $(PKG_VERSION))/ \
https://cdn.zabbix.com/zabbix/sources/oldstable/$(basename $(PKG_VERSION))/
PKG_HASH:=7a74794b2124607d8036be36cc104da056a2fb653811c84acbe29f3f6d97860a
PKG_MAINTAINER:=Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
PKG_LICENSE:=AGPL-3.0-only
PKG_LICENSE_FILES:=COPYING
PKG_CPE_ID:=cpe:/a:zabbix:zabbix
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
PKG_CONFIG_DEPENDS:= \
CONFIG_ZABBIX_MYSQL \
CONFIG_ZABBIX_POSTGRESQL \
CONFIG_ZABBIX_SQLITE
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/nls.mk
define Package/zabbix-proxy/config
comment "Database Software"
choice
prompt "Selected Database Software"
default ZABBIX_POSTGRESQL
config ZABBIX_MYSQL
bool "MySQL/MariaDB"
config ZABBIX_POSTGRESQL
bool "PostgreSQL"
config ZABBIX_SQLITE
bool "SQLite"
endchoice
endef
define Package/zabbix/Default
SECTION:=admin
CATEGORY:=Administration
SUBMENU:=Zabbix
TITLE:=Zabbix
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
endef
define Package/zabbix-agentd-nossl
$(call Package/zabbix-agentd/Default)
TITLE+= (no SSL)
VARIANT:=nossl
DEFAULT_VARIANT:=1
endef
define Package/zabbix-agentd-openssl
$(call Package/zabbix-agentd/Default)
TITLE+= (with OpenSSL)
DEPENDS+= +libopenssl
PROVIDES+= zabbix-agentd-ssl
VARIANT:=openssl
endef
define Package/zabbix-agentd-gnutls
$(call Package/zabbix-agentd/Default)
TITLE+= (with GnuTLS)
DEPENDS+= +libgnutls
PROVIDES+= zabbix-agentd-ssl
VARIANT:=gnutls
endef
define Package/zabbix-sender/Default
$(call Package/zabbix/Default)
TITLE+= sender
DEPENDS:= \
$(ICONV_DEPENDS) \
+libpcre2 \
+zlib
PROVIDES:=zabbix-sender
endef
define Package/zabbix-sender-nossl
$(call Package/zabbix-sender/Default)
TITLE+= (no SSL)
VARIANT:=nossl
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
endef
define Package/zabbix-sender-gnutls
$(call Package/zabbix-sender/Default)
TITLE+= (with GnuTLS)
DEPENDS+= +libgnutls
PROVIDES+= zabbix-sender-ssl
VARIANT:=gnutls
endef
define Package/zabbix-get/Default
$(call Package/zabbix/Default)
TITLE+= get
DEPENDS:= \
$(ICONV_DEPENDS) \
+libpcre2 \
+zlib
PROVIDES:=@zabbix-get
endef
define Package/zabbix-get-nossl
$(call Package/zabbix-get/Default)
TITLE+= (no SSL)
VARIANT:=nossl
DEFAULT_VARIANT:=1
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 \
+libevent2-extra \
+libpcre2 \
+zlib
USERID:=zabbix-server=70:zabbix-server=70
endef
define Package/zabbix-server/Default
$(call Package/zabbix-server-or-proxy/Default)
TITLE+= server
DEPENDS+= @(!ZABBIX_SQLITE)
PROVIDES:=zabbix-server
endef
define Package/zabbix-server-nossl
$(call Package/zabbix-server/Default)
TITLE+= (no SSL)
VARIANT:=nossl
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
endef
define Package/zabbix-server-gnutls
$(call Package/zabbix-server/Default)
TITLE+= (with GnuTLS)
DEPENDS+= +libgnutls
PROVIDES+= zabbix-server-ssl
VARIANT:=gnutls
endef
define Package/zabbix-proxy/Default
$(call Package/zabbix-server-or-proxy/Default)
TITLE+= proxy
DEPENDS+= +ZABBIX_SQLITE:libsqlite3
PROVIDES:=zabbix-proxy
endef
define Package/zabbix-proxy-nossl
$(call Package/zabbix-proxy/Default)
TITLE+= (no SSL)
VARIANT:=nossl
DEFAULT_VARIANT:=1
endef
define Package/zabbix-proxy-openssl
$(call Package/zabbix-proxy/Default)
TITLE+= (with OpenSSL)
DEPENDS+= +libopenssl
PROVIDES+= zabbix-proxy-ssl
VARIANT:=openssl
endef
define Package/zabbix-proxy-gnutls
$(call Package/zabbix-proxy/Default)
TITLE+= (with GnuTLS)
DEPENDS+= +libgnutls
PROVIDES+= zabbix-proxy-ssl
VARIANT:=gnutls
endef
define Package/zabbix-extra-mac80211
$(call Package/zabbix/Default)
TITLE+= discovery/userparameters for mac80211
DEPENDS:= \
@KERNEL_DEBUG_FS \
@PACKAGE_MAC80211_DEBUGFS \
+zabbix-agentd
VARIANT:=no-configure
endef
define Package/zabbix-extra-network
$(call Package/zabbix/Default)
TITLE+= discovery/userparameters for network
DEPENDS:= \
+libubus-lua \
+lua \
+zabbix-agentd
VARIANT:=no-configure
endef
define Package/zabbix-extra-wifi
$(call Package/zabbix/Default)
TITLE+= discovery/userparameters for wifi
DEPENDS:= \
+libiwinfo-lua \
+libubus-lua +lua \
+zabbix-agentd
VARIANT:=no-configure
endef
define Package/zabbix-frontend-server
$(call Package/zabbix/Default)
TITLE+= frontend server
DEPENDS:= \
@PACKAGE_php8 \
+ZABBIX_MYSQL:php8-mod-mysqli \
+ZABBIX_POSTGRESQL:php8-mod-pgsql \
@(!ZABBIX_SQLITE) \
+php8-cgi \
+php8-mod-gd \
+php8-mod-bcmath \
+php8-mod-ctype \
+php8-mod-filter \
+php8-mod-gettext \
+php8-mod-mbstring \
+php8-mod-openssl \
+php8-mod-session \
+php8-mod-sockets \
+php8-mod-xmlreader \
+php8-mod-xmlwriter
PROVIDES:=zabbix-server-frontend
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.
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
ifeq ($(BUILD_VARIANT),nossl)
CONFIGURE_ARGS+= --with-openssl="no" --with-gnutls="no"
endif
ifeq ($(BUILD_VARIANT),openssl)
CONFIGURE_ARGS+= --with-openssl="$(STAGING_DIR)/usr"
endif
ifeq ($(BUILD_VARIANT),gnutls)
CONFIGURE_ARGS+= --with-gnutls="$(STAGING_DIR)/usr"
endif
else
define Build/Prepare
true
endef
define Build/Configure
true
endef
define Build/Compile
true
endef
endif
ifdef CONFIG_PACKAGE_zabbix-extra-mac80211
define Build/Prepare
$(call Build/Prepare/Default)
mkdir -p $(PKG_BUILD_DIR)/zabbix-extra-mac80211
$(CP) ./files/zabbix_helper_mac80211.c $(PKG_BUILD_DIR)/zabbix-extra-mac80211/
endef
define Build/Configure
$(call Build/Configure/Default)
endef
# We use spaces for continued lines so that is if continuation does not parse
# properly we will get a hard error instead of subtle failure.
define Build/Compile
$(call Build/Compile/Default)
$(TARGET_CC) $(TARGET_CFLAGS) \
$(PKG_BUILD_DIR)/zabbix-extra-mac80211/zabbix_helper_mac80211.c \
-o $(PKG_BUILD_DIR)/zabbix-extra-mac80211/zabbix_helper_mac80211
endef
endif
MAKE_FLAGS += ARCH="linux"
define Package/zabbix/install/sbin
$(INSTALL_DIR) \
$(1)/usr/sbin
$(INSTALL_BIN) \
$(PKG_INSTALL_DIR)/usr/sbin/zabbix_$(2) \
$(1)/usr/sbin/
endef
define Package/zabbix/install/bin
$(INSTALL_DIR) \
$(1)/usr/bin
$(INSTALL_BIN) \
$(PKG_INSTALL_DIR)/usr/bin/zabbix_$(2) \
$(1)/usr/bin/
endef
define Package/zabbix/install/etc
$(INSTALL_DIR) \
$(1)/etc
$(INSTALL_CONF) \
$(PKG_INSTALL_DIR)/etc/zabbix_$(2).conf \
$(1)/etc/
endef
define Package/zabbix/install/init.d
$(INSTALL_DIR) \
$(1)/etc/init.d
$(INSTALL_BIN) \
./files/zabbix_$(2).init \
$(1)/etc/init.d/zabbix_$(2)
endef
define Package/zabbix/install/zabbix.conf.d
$(INSTALL_DIR) \
$(1)/etc/zabbix_agentd.conf.d
$(INSTALL_BIN) \
./files/$(2) \
$(1)/etc/zabbix_agentd.conf.d/$(2)
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
/etc/zabbix_$(1).conf
$(3)
endef
define Package/zabbix-$(1)-$(2)/install
$(INSTALL_DIR) $$(1)/etc/zabbix_$(1).conf.d
$(call Package/zabbix/install/sbin,$$(1),$(1))
$(4)
endef
endef
define Package/zabbix-server/conffiles-extra
/etc/config/zabbix_server
/etc/sysctl.d/90-zabbix-discovery-workers.conf
endef
define Package/zabbix-agentd/install-extra
$(call Package/zabbix/install/etc,$$(1),agentd)
$(call Package/zabbix/install/init.d,$$(1),agentd)
endef
define Package/zabbix-server/install-extra
$(call Package/zabbix/install/etc,$$(1),server)
$(call Package/zabbix/install/init.d,$$(1),server)
$(INSTALL_DIR) $$(1)/etc/sysctl.d
$(INSTALL_CONF) ./files/zabbix-discovery-workers.conf.sysctl \
$$(1)/etc/sysctl.d/90-zabbix-discovery-workers.conf
$(INSTALL_DIR) $$(1)/etc/config
$(INSTALL_CONF) ./files/zabbix_server.config $$(1)/etc/config/zabbix_server
$(INSTALL_DIR) $$(1)/etc/uci-defaults
$(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))))
# 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
#!/bin/sh
[ -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))))
define Package/zabbix-program/files
define Package/zabbix-$(1)-$(2)/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))))
define Package/zabbix-extra-mac80211/install
$(call Package/zabbix/install/zabbix.conf.d,$(1),mac80211)
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/zabbix-extra-mac80211/zabbix_helper_mac80211 $(1)/usr/bin/
chmod 4755 $(1)/usr/bin/zabbix_helper_mac80211
endef
define Package/zabbix-extra-network/install
$(call Package/zabbix/install/zabbix.conf.d,$(1),network)
$(INSTALL_DIR) $(1)/usr/share/acl.d
$(INSTALL_DATA) ./files/zabbix-network-ubus-acl.json $(1)/usr/share/acl.d/zabbix-network.json
endef
define Package/zabbix-extra-network/postinst
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
killall -s HUP ubusd
fi
endef
define Package/zabbix-extra-wifi/install
$(call Package/zabbix/install/zabbix.conf.d,$(1),wifi)
$(INSTALL_DIR) $(1)/usr/share/acl.d
$(INSTALL_DATA) ./files/zabbix-wifi-ubus-acl.json $(1)/usr/share/acl.d/zabbix-wifi.json
endef
define Package/zabbix-extra-wifi/postinst
#!/bin/sh
if [ -z "$${IPKG_INSTROOT}" ]; then
killall -s HUP ubusd
fi
endef
define Package/zabbix-frontend-server/install
$(INSTALL_DIR) $(1)/www/zabbix
$(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))
$(eval $(call BuildPackage,zabbix-extra-mac80211))
$(eval $(call BuildPackage,zabbix-extra-network))
$(eval $(call BuildPackage,zabbix-extra-wifi))
$(eval $(call BuildPackage,zabbix-frontend-server))