INIT: First commit
This commit is contained in:
		
							
								
								
									
										0
									
								
								zabbix-apk-builder/.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								zabbix-apk-builder/.github/workflows/build.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										16
									
								
								zabbix-apk-builder/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								zabbix-apk-builder/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| # Build artifacts | ||||
| packages/ | ||||
| *.apk | ||||
| src/ | ||||
| *.tar.gz | ||||
|  | ||||
| # Docker cache | ||||
| .docker/ | ||||
|  | ||||
| # Backup files | ||||
| *.backup | ||||
| *~ | ||||
|  | ||||
| # OS files | ||||
| .DS_Store | ||||
| Thumbs.db | ||||
							
								
								
									
										148
									
								
								zabbix-apk-builder/APKBUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								zabbix-apk-builder/APKBUILD
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,148 @@ | ||||
| # Contributor: Maks <maks@onet.com> | ||||
| # Maintainer: Maks <maks@onet.com> | ||||
| pkgname=zabbix | ||||
| pkgver=7.4.2 | ||||
| pkgrel=0 | ||||
| pkgdesc="Enterprise-class open source distributed monitoring solution" | ||||
| url="https://www.zabbix.com/" | ||||
| arch="all" | ||||
| license="AGPL-3.0-or-later" | ||||
| options="!check"  # No test suite available | ||||
| makedepends=" | ||||
| 	autoconf | ||||
| 	automake | ||||
| 	curl-dev | ||||
| 	libevent-dev | ||||
| 	libxml2-dev | ||||
| 	libtool | ||||
| 	linux-headers | ||||
| 	net-snmp-dev | ||||
| 	openssl-dev | ||||
| 	pcre2-dev | ||||
| 	sqlite-dev | ||||
| 	unixodbc-dev | ||||
| 	libssh2-dev | ||||
| 	" | ||||
| pkgusers="zabbix" | ||||
| pkggroups="zabbix" | ||||
| install="$pkgname-agent.pre-install $pkgname-proxy.pre-install" | ||||
| subpackages="$pkgname-agent $pkgname-proxy" | ||||
| source="https://cdn.zabbix.com/zabbix/sources/stable/${pkgver%.*}/zabbix-$pkgver.tar.gz | ||||
| 	zabbix-agent.initd | ||||
| 	zabbix-agent.confd | ||||
| 	zabbix-proxy.initd | ||||
| 	zabbix-proxy.confd | ||||
| 	" | ||||
| builddir="$srcdir/$pkgname-$pkgver" | ||||
|  | ||||
| prepare() { | ||||
| 	default_prepare | ||||
| 	 | ||||
| 	# Regenerate autotools files | ||||
| 	cd "$builddir" | ||||
| 	autoreconf -fiv | ||||
| 	 | ||||
| 	# Create separate build directories for agent and proxy | ||||
| 	cp -r "$builddir" "$srcdir/zabbix-agent-$pkgver" | ||||
| 	cp -r "$builddir" "$srcdir/zabbix-proxy-$pkgver" | ||||
| } | ||||
|  | ||||
| build() { | ||||
| 	# Build agent with minimal dependencies | ||||
| 	cd "$srcdir/zabbix-agent-$pkgver" | ||||
| 	./configure \ | ||||
| 		--build=$CBUILD \ | ||||
| 		--host=$CHOST \ | ||||
| 		--prefix=/usr \ | ||||
| 		--sysconfdir=/etc/zabbix \ | ||||
| 		--localstatedir=/var \ | ||||
| 		--enable-agent \ | ||||
| 		--with-libcurl \ | ||||
| 		--with-net-snmp \ | ||||
| 		--with-openssl \ | ||||
| 		--with-libpcre2 | ||||
| 	make | ||||
|  | ||||
| 	# Build proxy with database support | ||||
| 	cd "$srcdir/zabbix-proxy-$pkgver" | ||||
| 	./configure \ | ||||
| 		--build=$CBUILD \ | ||||
| 		--host=$CHOST \ | ||||
| 		--prefix=/usr \ | ||||
| 		--sysconfdir=/etc/zabbix \ | ||||
| 		--localstatedir=/var \ | ||||
| 		--enable-proxy \ | ||||
| 		--with-libcurl \ | ||||
| 		--with-net-snmp \ | ||||
| 		--with-openssl \ | ||||
| 		--with-libpcre2 \ | ||||
| 		--with-sqlite3 \ | ||||
| 		--with-unixodbc \ | ||||
| 		--with-ssh2 \ | ||||
| 		--with-libxml2 \ | ||||
| 		--with-libevent | ||||
| 	make | ||||
| } | ||||
|  | ||||
| package() { | ||||
| 	# Meta-package - intentionally empty | ||||
| 	# Users install zabbix-agent and/or zabbix-proxy directly | ||||
| 	mkdir -p "$pkgdir" | ||||
| } | ||||
|  | ||||
| agent() { | ||||
| 	pkgdesc="Zabbix monitoring agent" | ||||
| 	 | ||||
| 	cd "$srcdir/zabbix-agent-$pkgver" | ||||
| 	 | ||||
| 	# Install agent binary | ||||
| 	install -Dm755 src/zabbix_agent/zabbix_agentd \ | ||||
| 		"$subpkgdir"/usr/sbin/zabbix_agentd | ||||
|  | ||||
| 	 | ||||
| 	# Install agent configuration | ||||
| 	install -Dm644 conf/zabbix_agentd.conf \ | ||||
| 		"$subpkgdir"/etc/zabbix/zabbix_agentd.conf | ||||
| 	 | ||||
| 	# Install init script and conf | ||||
| 	install -Dm755 "$srcdir"/zabbix-agent.initd \ | ||||
| 		"$subpkgdir"/etc/init.d/zabbix-agent | ||||
| 	install -Dm644 "$srcdir"/zabbix-agent.confd \ | ||||
| 		"$subpkgdir"/etc/conf.d/zabbix-agent | ||||
| 	 | ||||
| 	# Create directories | ||||
| 	install -dm755 "$subpkgdir"/var/log/zabbix | ||||
| 	install -dm755 "$subpkgdir"/var/run/zabbix | ||||
| } | ||||
|  | ||||
| proxy() { | ||||
| 	pkgdesc="Zabbix network monitoring proxy daemon" | ||||
| 	 | ||||
| 	cd "$srcdir/zabbix-proxy-$pkgver" | ||||
| 	 | ||||
| 	# Install proxy binary | ||||
| 	install -Dm755 src/zabbix_proxy/zabbix_proxy \ | ||||
| 		"$subpkgdir"/usr/sbin/zabbix_proxy | ||||
| 	 | ||||
| 	# Install proxy configuration | ||||
| 	install -Dm644 conf/zabbix_proxy.conf \ | ||||
| 		"$subpkgdir"/etc/zabbix/zabbix_proxy.conf | ||||
| 	 | ||||
| 	# Install init script and conf | ||||
| 	install -Dm755 "$srcdir"/zabbix-proxy.initd \ | ||||
| 		"$subpkgdir"/etc/init.d/zabbix-proxy | ||||
| 	install -Dm644 "$srcdir"/zabbix-proxy.confd \ | ||||
| 		"$subpkgdir"/etc/conf.d/zabbix-proxy | ||||
| 	 | ||||
| 	# Create directories | ||||
| 	install -dm755 "$subpkgdir"/var/log/zabbix | ||||
| 	install -dm755 "$subpkgdir"/var/run/zabbix | ||||
| } | ||||
|  | ||||
| sha512sums=" | ||||
| 3bf1f915c2cd5a59f1dd3afc10dd1a6e596840e576013839d6eae057cd327893f87cc5cec1d32b6a8ca8bd00735c0070327084aae01dc8d3399202f5a3e365c1  zabbix-7.4.2.tar.gz | ||||
| SKIP | ||||
| SKIP | ||||
| SKIP | ||||
| SKIP | ||||
| " | ||||
							
								
								
									
										40
									
								
								zabbix-apk-builder/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								zabbix-apk-builder/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| FROM alpine:latest | ||||
|  | ||||
| # Install build dependencies | ||||
| RUN apk add --no-cache \ | ||||
|     abuild \ | ||||
|     alpine-sdk \ | ||||
|     autoconf \ | ||||
|     automake \ | ||||
|     libtool \ | ||||
|     linux-headers \ | ||||
|     pkgconfig \ | ||||
|     sudo \ | ||||
|     curl-dev \ | ||||
|     libevent-dev \ | ||||
|     libxml2-dev \ | ||||
|     net-snmp-dev \ | ||||
|     openssl-dev \ | ||||
|     pcre2-dev \ | ||||
|     sqlite-dev \ | ||||
|     unixodbc-dev \ | ||||
|     zlib-dev \ | ||||
|     openldap-dev \ | ||||
|     libssh2-dev \ | ||||
|     && adduser -D -G abuild builder \ | ||||
|     && echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers | ||||
|  | ||||
| # Setup build environment | ||||
| USER builder | ||||
| WORKDIR /home/builder | ||||
|  | ||||
| # Generate signing keys | ||||
| RUN abuild-keygen -a -i -n | ||||
|  | ||||
| # Copy package files | ||||
| COPY --chown=builder:builder . /home/builder/zabbix/ | ||||
|  | ||||
| WORKDIR /home/builder/zabbix | ||||
|  | ||||
| # Set build command | ||||
| CMD ["abuild", "-r"] | ||||
							
								
								
									
										76
									
								
								zabbix-apk-builder/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								zabbix-apk-builder/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,76 @@ | ||||
| # Zabbix APK Builder | ||||
|  | ||||
| Automated build system for creating Zabbix monitoring packages for Alpine Linux using Docker. | ||||
|  | ||||
| ## What it does | ||||
|  | ||||
| This project builds separate Alpine Linux packages for: | ||||
| - **zabbix-agent** - Monitoring agent for data collection | ||||
| - **zabbix-proxy** - Network monitoring proxy daemon | ||||
| - **zabbix** - Meta-package that installs both components | ||||
|  | ||||
| Each package includes proper OpenRC init scripts and user management for production deployment. | ||||
|  | ||||
| ## Quick Start | ||||
|  | ||||
| ```bash | ||||
| # Build packages | ||||
| ./build.sh | ||||
|  | ||||
| # Install on Alpine Linux | ||||
| apk add --allow-untrusted packages/zabbix-agent-*.apk | ||||
| apk add --allow-untrusted packages/zabbix-proxy-*.apk | ||||
|  | ||||
| # Enable and start services | ||||
| rc-update add zabbix-agent default | ||||
| rc-service zabbix-agent start | ||||
| ``` | ||||
|  | ||||
| ## Configuration | ||||
|  | ||||
| ### Change Zabbix Version | ||||
| Edit `APKBUILD`: | ||||
| ```bash | ||||
| pkgver=7.4.2  # Change to desired version | ||||
| ``` | ||||
|  | ||||
| ### Change Architecture | ||||
| Edit `APKBUILD`: | ||||
| ```bash | ||||
| arch="all"           # All architectures | ||||
| arch="x86_64"        # 64-bit Intel/AMD only | ||||
| arch="x86_64 aarch64"  # 64-bit Intel/AMD and ARM64 | ||||
| ``` | ||||
|  | ||||
| ### Update Checksums | ||||
| After changing the version: | ||||
| ```bash | ||||
| # Manual approach | ||||
| wget https://cdn.zabbix.com/zabbix/sources/stable/X.Y/zabbix-X.Y.Z.tar.gz | ||||
| sha512sum zabbix-X.Y.Z.tar.gz  # Update sha512sums in APKBUILD | ||||
| # Or let the build system handle it | ||||
| ./build.sh  # Will download and verify against official SHA256 | ||||
| ``` | ||||
| sha512 is used per Alpine recommendation: | ||||
| https://wiki.alpinelinux.org/wiki/APKBUILD_Reference | ||||
| `New packages should use only sha512sums. Support for md5sums and sha1sums was dropped.` | ||||
|  | ||||
| ## Build Process | ||||
|  | ||||
| 1. **Docker Build**: Creates Alpine Linux build environment  | ||||
| 2. **Download Sources**: `abuild checksum` downloads tarball and generates SHA512 | ||||
| 2. **Package Build**: Compiles and packages using Alpine's `abuild` system | ||||
| 3. **Output**: Generated APK files in `packages/` directory | ||||
|  | ||||
| ## Requirements | ||||
|  | ||||
| - Docker | ||||
| - Internet connection (for source download and verification) | ||||
|  | ||||
| ## Files | ||||
|  | ||||
| - `APKBUILD` - Alpine package definition | ||||
| - `build.sh` - Build automation script | ||||
| - `Dockerfile` - Build environment container | ||||
| - `zabbix-agent.*` - Agent service configuration files | ||||
| - `zabbix-proxy.*` - Proxy service configuration files | ||||
							
								
								
									
										54
									
								
								zabbix-apk-builder/build.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										54
									
								
								zabbix-apk-builder/build.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| set -e | ||||
|  | ||||
| # Configuration | ||||
| PROJECT_DIR="$(pwd)" | ||||
| IMAGE_NAME="zabbix-apk-builder" | ||||
| CONTAINER_NAME="zabbix-build-$$" | ||||
| OUTPUT_DIR="$PROJECT_DIR/packages" | ||||
|  | ||||
| echo "=== Zabbix APK Builder ===" | ||||
| echo "Project directory: $PROJECT_DIR" | ||||
| echo "Output directory: $OUTPUT_DIR" | ||||
|  | ||||
| # Clean up any existing containers | ||||
| cleanup() { | ||||
|     echo "Cleaning up..." | ||||
|     docker rm -f "$CONTAINER_NAME" 2>/dev/null || true | ||||
| } | ||||
|  | ||||
| trap cleanup EXIT | ||||
|  | ||||
| # Create output directory | ||||
| mkdir -p "$OUTPUT_DIR" | ||||
|  | ||||
| # Build Docker image | ||||
| echo "Building Docker image..." | ||||
| docker build -t "$IMAGE_NAME" "$PROJECT_DIR" | ||||
|  | ||||
| # Run the build in container | ||||
| echo "Running package build..." | ||||
| docker run --rm \ | ||||
|     --name "$CONTAINER_NAME" \ | ||||
|     -v "$OUTPUT_DIR:/output" \ | ||||
|     "$IMAGE_NAME" \ | ||||
|     sh -c " | ||||
|         set -e | ||||
|         echo 'Starting package build...' | ||||
|          | ||||
|         # Generate checksums for APKBUILD | ||||
|         echo 'Generating checksums for APKBUILD...' | ||||
|         abuild checksum | ||||
|          | ||||
|         # Build packages | ||||
|         abuild -r | ||||
|          | ||||
|         # Copy packages to output | ||||
|         echo 'Copying packages to output directory...' | ||||
|         find /home/builder/packages -name '*.apk' -exec cp {} /output/ \; | ||||
|     " | ||||
| echo "Build completed successfully!" | ||||
| echo "To install packages:" | ||||
| echo "  apk add --allow-untrusted $OUTPUT_DIR/zabbix-agent-*.apk" | ||||
| echo "  apk add --allow-untrusted $OUTPUT_DIR/zabbix-proxy-*.apk" | ||||
							
								
								
									
										11
									
								
								zabbix-apk-builder/zabbix-agent.confd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								zabbix-apk-builder/zabbix-agent.confd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| # Configuration for zabbix-agent | ||||
|  | ||||
| # User and group for the agent | ||||
| ZABBIX_AGENT_USER="zabbix" | ||||
| ZABBIX_AGENT_GROUP="zabbix" | ||||
|  | ||||
| # Configuration file location | ||||
| ZABBIX_AGENT_CONFIG="/etc/zabbix/zabbix_agentd.conf" | ||||
|  | ||||
| # PID file location | ||||
| ZABBIX_AGENT_PID="/var/run/zabbix/zabbix_agentd.pid" | ||||
							
								
								
									
										42
									
								
								zabbix-apk-builder/zabbix-agent.initd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								zabbix-apk-builder/zabbix-agent.initd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| #!/sbin/openrc-run | ||||
| # Copyright 1999-2023 Gentoo Authors | ||||
| # Distributed under the terms of the GNU General Public License v2 | ||||
|  | ||||
| extra_commands="checkconfig" | ||||
| extra_started_commands="reload" | ||||
|  | ||||
| depend() { | ||||
| 	need net | ||||
| 	use logger | ||||
| } | ||||
|  | ||||
| : ${ZABBIX_AGENT_USER:=zabbix} | ||||
| : ${ZABBIX_AGENT_GROUP:=zabbix} | ||||
| : ${ZABBIX_AGENT_CONFIG:=/etc/zabbix/zabbix_agentd.conf} | ||||
| : ${ZABBIX_AGENT_PID:=/var/run/zabbix/zabbix_agentd.pid} | ||||
|  | ||||
| command="/usr/sbin/zabbix_agentd" | ||||
| command_args="-c ${ZABBIX_AGENT_CONFIG}" | ||||
| command_user="${ZABBIX_AGENT_USER}:${ZABBIX_AGENT_GROUP}" | ||||
| pidfile="${ZABBIX_AGENT_PID}" | ||||
| required_files="${ZABBIX_AGENT_CONFIG}" | ||||
|  | ||||
| checkconfig() { | ||||
| 	if [ ! -f "${ZABBIX_AGENT_CONFIG}" ] ; then | ||||
| 		eerror "You need to create appropriate config file." | ||||
| 		return 1 | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| start_pre() { | ||||
| 	checkconfig || return $? | ||||
| 	 | ||||
| 	checkpath --directory --owner ${ZABBIX_AGENT_USER}:${ZABBIX_AGENT_GROUP} --mode 0755 \ | ||||
| 		$(dirname ${ZABBIX_AGENT_PID}) /var/log/zabbix | ||||
| } | ||||
|  | ||||
| reload() { | ||||
| 	ebegin "Reloading ${SVCNAME}" | ||||
| 	start-stop-daemon --signal HUP --pidfile "${pidfile}" | ||||
| 	eend $? | ||||
| } | ||||
							
								
								
									
										6
									
								
								zabbix-apk-builder/zabbix-agent.pre-install
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								zabbix-apk-builder/zabbix-agent.pre-install
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| addgroup -S zabbix 2>/dev/null | ||||
| adduser -S -D -H -s /bin/false -G zabbix -g zabbix zabbix 2>/dev/null | ||||
|  | ||||
| exit 0 | ||||
							
								
								
									
										11
									
								
								zabbix-apk-builder/zabbix-proxy.confd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								zabbix-apk-builder/zabbix-proxy.confd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| # Configuration for zabbix-proxy | ||||
|  | ||||
| # User and group for the proxy | ||||
| ZABBIX_PROXY_USER="zabbix" | ||||
| ZABBIX_PROXY_GROUP="zabbix" | ||||
|  | ||||
| # Configuration file location | ||||
| ZABBIX_PROXY_CONFIG="/etc/zabbix/zabbix_proxy.conf" | ||||
|  | ||||
| # PID file location | ||||
| ZABBIX_PROXY_PID="/var/run/zabbix/zabbix_proxy.pid" | ||||
							
								
								
									
										43
									
								
								zabbix-apk-builder/zabbix-proxy.initd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								zabbix-apk-builder/zabbix-proxy.initd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,43 @@ | ||||
| #!/sbin/openrc-run | ||||
| # Copyright 1999-2023 Gentoo Authors | ||||
| # Distributed under the terms of the GNU General Public License v2 | ||||
|  | ||||
| extra_commands="checkconfig" | ||||
| extra_started_commands="reload" | ||||
|  | ||||
| depend() { | ||||
| 	need net | ||||
| 	use logger | ||||
| 	after postgresql mysql | ||||
| } | ||||
|  | ||||
| : ${ZABBIX_PROXY_USER:=zabbix} | ||||
| : ${ZABBIX_PROXY_GROUP:=zabbix} | ||||
| : ${ZABBIX_PROXY_CONFIG:=/etc/zabbix/zabbix_proxy.conf} | ||||
| : ${ZABBIX_PROXY_PID:=/var/run/zabbix/zabbix_proxy.pid} | ||||
|  | ||||
| command="/usr/sbin/zabbix_proxy" | ||||
| command_args="-c ${ZABBIX_PROXY_CONFIG}" | ||||
| command_user="${ZABBIX_PROXY_USER}:${ZABBIX_PROXY_GROUP}" | ||||
| pidfile="${ZABBIX_PROXY_PID}" | ||||
| required_files="${ZABBIX_PROXY_CONFIG}" | ||||
|  | ||||
| checkconfig() { | ||||
| 	if [ ! -f "${ZABBIX_PROXY_CONFIG}" ] ; then | ||||
| 		eerror "You need to create appropriate config file." | ||||
| 		return 1 | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| start_pre() { | ||||
| 	checkconfig || return $? | ||||
| 	 | ||||
| 	checkpath --directory --owner ${ZABBIX_PROXY_USER}:${ZABBIX_PROXY_GROUP} --mode 0755 \ | ||||
| 		$(dirname ${ZABBIX_PROXY_PID}) /var/log/zabbix | ||||
| } | ||||
|  | ||||
| reload() { | ||||
| 	ebegin "Reloading ${SVCNAME}" | ||||
| 	start-stop-daemon --signal HUP --pidfile "${pidfile}" | ||||
| 	eend $? | ||||
| } | ||||
							
								
								
									
										6
									
								
								zabbix-apk-builder/zabbix-proxy.pre-install
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								zabbix-apk-builder/zabbix-proxy.pre-install
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| #!/bin/sh | ||||
|  | ||||
| addgroup -S zabbix 2>/dev/null | ||||
| adduser -S -D -H -s /bin/false -G zabbix -g zabbix zabbix 2>/dev/null | ||||
|  | ||||
| exit 0 | ||||
		Reference in New Issue
	
	Block a user