Skip to content

Instantly share code, notes, and snippets.

@PcChip
Last active March 20, 2026 18:48
Show Gist options
  • Select an option

  • Save PcChip/8437be3144448da12eff1caec0bcfde1 to your computer and use it in GitHub Desktop.

Select an option

Save PcChip/8437be3144448da12eff1caec0bcfde1 to your computer and use it in GitHub Desktop.
Centre-ZabbixProxyInstall
#!/bin/sh
set -eu
export DEBIAN_FRONTEND=noninteractive
ZABBIX_VERSION="7.4"
ZABBIX_RELEASE_DEB="zabbix-release_latest_${ZABBIX_VERSION}+ubuntu24.04_all.deb"
ZABBIX_RELEASE_URL="https://repo.zabbix.com/zabbix/${ZABBIX_VERSION}/release/ubuntu/pool/main/z/zabbix-release/${ZABBIX_RELEASE_DEB}"
CONFIG_FILE="/etc/zabbix/zabbix_proxy.conf"
PSK_FILE="/etc/zabbix/zabbix_proxy.psk"
DB_FILE="/var/lib/zabbix/zabbix_proxy.db"
LOG_FILE="/var/log/zabbix/zabbix_proxy.log"
if [ "$(id -u)" -ne 0 ]; then
echo "This script must be run as root."
echo "Example:"
echo " curl -fsSL <raw-gist-url> -o /tmp/zabbixproxy.sh && sudo sh /tmp/zabbixproxy.sh"
exit 1
fi
if ! command -v apt >/dev/null 2>&1; then
echo "apt not found. This script is intended for Ubuntu."
exit 1
fi
LOCAL_HOSTNAME="$(hostname)"
printf "Enter the Zabbix server IP address or DNS name: "
read -r ZABBIX_SERVER
if [ -z "${ZABBIX_SERVER}" ]; then
echo "Zabbix server value cannot be blank."
exit 1
fi
set_config_value() {
KEY="$1"
VALUE="$2"
FILE="$3"
if grep -Eq "^[[:space:]]*#?[[:space:]]*${KEY}[[:space:]]*=" "$FILE"; then
sed -i -E "s|^[[:space:]]*#?[[:space:]]*${KEY}[[:space:]]*=.*|${KEY}=${VALUE}|" "$FILE"
else
printf '\n%s=%s\n' "$KEY" "$VALUE" >> "$FILE"
fi
awk -v key="$KEY" '
BEGIN { seen=0 }
$0 ~ "^[[:space:]]*" key "[[:space:]]*=" {
seen++
if (seen > 1) next
}
{ print }
' "$FILE" > "${FILE}.tmp" && mv "${FILE}.tmp" "$FILE"
}
echo
echo "Installing prerequisite packages..."
apt update
apt install -y wget ca-certificates gnupg openssl
echo "Installing Zabbix repository package..."
TMP_DEB="/tmp/${ZABBIX_RELEASE_DEB}"
wget -O "${TMP_DEB}" "${ZABBIX_RELEASE_URL}"
dpkg -i "${TMP_DEB}"
echo "Refreshing package lists..."
apt update
echo "Installing Zabbix proxy packages..."
apt install -y zabbix-proxy-sqlite3 zabbix-sql-scripts
echo "Preparing directories..."
mkdir -p /var/lib/zabbix
mkdir -p /var/log/zabbix
chown zabbix:zabbix /var/lib/zabbix
chmod 755 /var/lib/zabbix
touch "${LOG_FILE}"
chown zabbix:zabbix "${LOG_FILE}"
chmod 640 "${LOG_FILE}"
echo "Generating PSK..."
OLD_UMASK="$(umask)"
umask 077
openssl rand -hex 32 > "${PSK_FILE}"
umask "${OLD_UMASK}"
chown zabbix:zabbix "${PSK_FILE}"
chmod 600 "${PSK_FILE}"
PSK_IDENTITY="${LOCAL_HOSTNAME}-psk"
echo "Backing up config..."
cp "${CONFIG_FILE}" "${CONFIG_FILE}.bak.$(date +%Y%m%d%H%M%S)"
echo "Configuring ${CONFIG_FILE} ..."
set_config_value "ProxyMode" "0" "${CONFIG_FILE}"
set_config_value "Server" "${ZABBIX_SERVER}" "${CONFIG_FILE}"
set_config_value "Hostname" "${LOCAL_HOSTNAME}" "${CONFIG_FILE}"
set_config_value "LogFile" "${LOG_FILE}" "${CONFIG_FILE}"
set_config_value "DBName" "${DB_FILE}" "${CONFIG_FILE}"
set_config_value "StartVMwareCollectors" "2" "${CONFIG_FILE}"
set_config_value "TLSConnect" "psk" "${CONFIG_FILE}"
set_config_value "TLSAccept" "psk" "${CONFIG_FILE}"
set_config_value "TLSPSKIdentity" "${PSK_IDENTITY}" "${CONFIG_FILE}"
set_config_value "TLSPSKFile" "${PSK_FILE}" "${CONFIG_FILE}"
chown root:root "${CONFIG_FILE}"
chmod 644 "${CONFIG_FILE}"
echo "Enabling and starting zabbix-proxy..."
systemctl enable zabbix-proxy
if ! systemctl restart zabbix-proxy; then
echo
echo "zabbix-proxy failed to start. Recent journal output:"
journalctl -u zabbix-proxy.service -n 100 --no-pager || true
exit 1
fi
echo
echo "Done."
echo
echo "Proxy hostname: ${LOCAL_HOSTNAME}"
echo "Server: ${ZABBIX_SERVER}"
echo "DB file: ${DB_FILE}"
echo "Log file: ${LOG_FILE}"
echo "PSK identity: ${PSK_IDENTITY}"
echo "PSK file: ${PSK_FILE}"
echo
echo "PSK value:"
cat "${PSK_FILE}"
echo
echo "Configure the same PSK identity and PSK value on the proxy entry in the Zabbix frontend."
echo
echo "Service status:"
systemctl --no-pager --full status zabbix-proxy || true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment