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