zabbix: add initscript for server
authorDaniel F. Dickinson <dfdpublic@wildtechgarden.ca>
Tue, 9 Dec 2025 05:21:18 +0000 (00:21 -0500)
committerGeorge Sapkin <george@sapk.in>
Thu, 15 Jan 2026 23:10:59 +0000 (01:10 +0200)
Adds an initscript for zabbix_server, and related helper files

+ uses a zabbix_server uci conf to enable/disable startup
+ updates the default zabbix_server.conf to work with initscript
+ add a sysctl.d conf to set max-files more appropriate for zabbix_server

Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
admin/zabbix/Makefile
admin/zabbix/files/zabbix-discovery-workers.conf.sysctl [new file with mode: 0644]
admin/zabbix/files/zabbix_server.config [new file with mode: 0644]
admin/zabbix/files/zabbix_server.defaults [new file with mode: 0644]
admin/zabbix/files/zabbix_server.init [new file with mode: 0755]
admin/zabbix/patches/020-change-server-config.patch [new file with mode: 0644]

index 5069ffed22e167ba377f80a17d985536a3a94ec0..af1921657fe9ef39af92fc5e24762632208d130a 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=zabbix
 PKG_VERSION:=7.0.21
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://cdn.zabbix.com/zabbix/sources/stable/$(basename $(PKG_VERSION))/ \
@@ -336,6 +336,8 @@ Package/zabbix-agentd-gnutls/conffiles = $(Package/zabbix-agentd/conffiles)
 
 define Package/zabbix-server/conffiles
 /etc/zabbix_server.conf
+/etc/config/zabbix_server
+/etc/sysctl.d/90-zabbix-discovery-workers.conf
 endef
 Package/zabbix-server-openssl/conffiles = $(Package/zabbix-server/conffiles)
 Package/zabbix-server-gnutls/conffiles = $(Package/zabbix-server/conffiles)
@@ -424,10 +426,26 @@ Package/zabbix-get-gnutls/install = $(Package/zabbix-get/install)
 define Package/zabbix-server/install
        $(call Package/zabbix/install/sbin,$(1),server)
        $(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
 Package/zabbix-server-openssl/install = $(Package/zabbix-server/install)
 Package/zabbix-server-gnutls/install = $(Package/zabbix-server/install)
 
+define Package/zabbix-server/postinst
+#!/bin/sh
+[ -n "$${IPKG_INSTROOT}" ] || (. /etc/uci-defaults/90_zabbix_server) && rm -f /etc/uci-defaults/90_zabbix_server
+exit 0
+endef
+Package/zabbix-server-openssl/postinst = $(Package/zabbix-server/postinst)
+Package/zabbix-server-gnutls/postinst = $(Package/zabbix-server/postinst)
+
 define Package/zabbix-server-frontend/install
        $(INSTALL_DIR) $(1)/www/zabbix
        $(CP) $(PKG_BUILD_DIR)/ui/* $(1)/www/zabbix
diff --git a/admin/zabbix/files/zabbix-discovery-workers.conf.sysctl b/admin/zabbix/files/zabbix-discovery-workers.conf.sysctl
new file mode 100644 (file)
index 0000000..e88c239
--- /dev/null
@@ -0,0 +1 @@
+fs.file-max=100000
diff --git a/admin/zabbix/files/zabbix_server.config b/admin/zabbix/files/zabbix_server.config
new file mode 100644 (file)
index 0000000..45e3f30
--- /dev/null
@@ -0,0 +1,3 @@
+
+config zabbix_server 'general'
+    option enabled 0
diff --git a/admin/zabbix/files/zabbix_server.defaults b/admin/zabbix/files/zabbix_server.defaults
new file mode 100644 (file)
index 0000000..4b14067
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+chown zabbix:zabbix /etc/zabbix_server.conf
diff --git a/admin/zabbix/files/zabbix_server.init b/admin/zabbix/files/zabbix_server.init
new file mode 100755 (executable)
index 0000000..a6b4946
--- /dev/null
@@ -0,0 +1,42 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008-2025 OpenWrt.org
+
+# shellcheck disable=SC2034
+START=59
+
+# shellcheck disable=SC2034
+USE_PROCD=1
+
+NAME=zabbix_server
+PROG=/usr/sbin/${NAME}
+CONFIG=/etc/zabbix_server.conf
+
+start_service() {
+       if [ ! -f "${CONFIG}" ]; then
+               logger "Configuration file not found: '${CONFIG}'"
+               return 1
+       fi
+
+       # Get enabled config option
+       config_load "$NAME"
+       config_get_bool enabled general enabled 0
+
+       # shellcheck disable=SC2154
+       if [ "$enabled" -eq 0 ]; then
+               logger "service not enabled in /etc/config/$NAME"
+               return 1
+       fi
+
+       mkdir -p /var/run/zabbix
+       chown zabbix:zabbix /var/run/zabbix
+
+       procd_open_instance
+       procd_set_param command ${PROG} -c ${CONFIG} -f
+       procd_set_param user zabbix
+       procd_set_param limits nofile="16384 100000"
+       procd_set_param file ${CONFIG}
+       procd_set_param respawn
+       procd_set_param stdout 1
+       procd_set_param stderr 1
+       procd_close_instance
+}
diff --git a/admin/zabbix/patches/020-change-server-config.patch b/admin/zabbix/patches/020-change-server-config.patch
new file mode 100644 (file)
index 0000000..493638d
--- /dev/null
@@ -0,0 +1,52 @@
+From 9675bd17ae35744696c90b423b0c19905349c8a1 Mon Sep 17 00:00:00 2001
+From: "Daniel F. Dickinson" <dfdpublic@wildtechgarden.ca>
+Date: Wed, 17 Dec 2025 06:39:16 -0500
+Subject: [PATCH] Make zabbix_server config suitable for OpenWrt
+
+1. Log to (default ephemeral) syslog, not a file (and don't rotate)
+2. Update PidFile path so correct permissions can be set for access by
+   Zabbix server running without privileges.
+
+Signed-off-by: Daniel F. Dickinson <dfdpublic@wildtechgarden.ca>
+---
+ conf/zabbix_server.conf | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+--- a/conf/zabbix_server.conf
++++ b/conf/zabbix_server.conf
+@@ -27,6 +27,7 @@
+ # Mandatory: no
+ # Default:
+ # LogType=file
++LogType=system
+ ### Option: LogFile
+ #     Log file name for LogType 'file' parameter.
+@@ -35,7 +36,7 @@
+ # Default:
+ # LogFile=
+-LogFile=/tmp/zabbix_server.log
++# LogFile=/tmp/zabbix_server.log
+ ### Option: LogFileSize
+ #     Maximum size of log file in MB.
+@@ -45,6 +46,7 @@ LogFile=/tmp/zabbix_server.log
+ # Range: 0-1024
+ # Default:
+ # LogFileSize=1
++LogFileSize=0
+ ### Option: DebugLevel
+ #     Specifies debug level:
+@@ -67,6 +69,10 @@ LogFile=/tmp/zabbix_server.log
+ # Default:
+ # PidFile=/tmp/zabbix_server.pid
++# Although procd does not require a pid file, zabbix uses the pidfile to
++# shut down correctly on receipt of a TERM or INT signal.
++PidFile=/var/run/zabbix/zabbix_server.pid
++
+ ### Option: SocketDir
+ #     IPC socket directory.
+ #             Directory to store IPC sockets used by internal Zabbix services.