diff --git a/setup_proxy.sh b/setup_proxy.sh deleted file mode 100644 index 79d14ad..0000000 --- a/setup_proxy.sh +++ /dev/null @@ -1,225 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -export LC_ALL=C - -################################################################################ -# FAIT Zabbix - Installation d un proxy Zabbix (SQLite, PSK, mode actif) -# -# curl -fsSL https://.../setup_proxy.sh | sudo bash -# -# Ce script ne fait QUE le proxy : depot Zabbix officiel, zabbix-proxy-sqlite3, -# cle PSK, /etc/zabbix/zabbix_proxy.conf, demarrage. Il n enrole pas la machine -# dans la supervision FAIT (pas d agent, pas de paquet fait-zabbix, pas -# d updater) : pour ca, lancer bootstrap.sh separement sur la meme machine. -# -# Variables surchargeables : -# ZBX_PROXY_HOSTNAME nom du proxy, doit correspondre EXACTEMENT au nom -# declare cote serveur (defaut zbx-proxy.audiency.fr) -# ZBX_PSK_IDENTITY identite PSK, idem cote serveur -# (defaut "PSK zbx-proxy audiency") -# ZBX_SERVER serveur Zabbix a joindre (defaut sup.fabout.it) -# ZABBIX_MAJOR branche Zabbix (defaut 7.0) -# ZBX_PSK_FILE chemin de la cle PSK (defaut -# /etc/zabbix/zabbix_proxy.psk) -# -# La cle PSK est generee si le fichier est absent, et affichee en fin -# d execution : c est cette valeur qu il faut coller dans l onglet Encryption -# du proxy cote serveur. Si le fichier existe deja, il est conserve tel quel — -# relancer le script ne casse donc pas un proxy deja apparie. -################################################################################ - -ZABBIX_MAJOR="${ZABBIX_MAJOR:-7.0}" -ZBX_SERVER="${ZBX_SERVER:-sup.fabout.it}" -ZBX_PROXY_HOSTNAME="${ZBX_PROXY_HOSTNAME:-zbx-proxy.audiency.fr}" -ZBX_PSK_IDENTITY="${ZBX_PSK_IDENTITY:-PSK zbx-proxy audiency}" -ZBX_PSK_FILE="${ZBX_PSK_FILE:-/etc/zabbix/zabbix_proxy.psk}" - -PROXY_CONF=/etc/zabbix/zabbix_proxy.conf -PROXY_DB=/var/lib/zabbix/zabbix_proxy.sqlite3 - -log() { echo "INFO: $*" >&2; } -warn() { echo "WARN: $*" >&2; } -err() { echo "ERROR: $*" >&2; exit 1; } - -[[ "${EUID}" -eq 0 ]] || err "A lancer en root (sudo)." - -[[ -r /etc/os-release ]] || err "/etc/os-release introuvable, distribution non supportee." -# shellcheck disable=SC1091 -. /etc/os-release - -# --- prerequis ---------------------------------------------------------------- -ensure_prereqs() { - local manquants=() - for c in curl openssl; do - command -v "$c" >/dev/null 2>&1 || manquants+=("$c") - done - if [[ ${#manquants[@]} -gt 0 ]] || ! dpkg -s ca-certificates >/dev/null 2>&1; then - log "Installation des prerequis : ${manquants[*]:-} ca-certificates" - apt-get update -y >/dev/null 2>&1 || true - DEBIAN_FRONTEND=noninteractive apt-get install -y \ - ${manquants[@]+"${manquants[@]}"} ca-certificates >/dev/null - fi -} - -# --- depot Zabbix officiel ---------------------------------------------------- -# Meme derivation que bootstrap.sh : Zabbix nomme ses artefacts Ubuntu avec la -# version complete (ubuntu22.04) et Debian avec le seul majeur (debian13). Un -# relver tronque a la majeure donnerait ubuntu22, qui n existe pas au depot. -ajouter_depot_zabbix() { - local dist relver url tmp_deb - dist="${ID}"; [[ "${dist}" == "ubuntu" ]] || dist="debian" - if [[ "${dist}" == "ubuntu" ]]; then - relver="${VERSION_ID}" - else - relver="${VERSION_ID%%.*}" - fi - - # Deja pose (par bootstrap.sh, ou par un passage precedent de ce script) : - # inutile de retelecharger le .deb, apt a deja la source. - if [[ -f /etc/apt/sources.list.d/zabbix.list ]] \ - || [[ -f /etc/apt/sources.list.d/zabbix.sources ]]; then - log "Depot Zabbix deja present." - return 0 - fi - - url="https://repo.zabbix.com/zabbix/${ZABBIX_MAJOR}/${dist}/pool/main/z/zabbix-release/zabbix-release_latest_${ZABBIX_MAJOR}+${dist}${relver}_all.deb" - log "Ajout du depot Zabbix ${ZABBIX_MAJOR} : ${url}" - # Pas de --remove-on-error : absent avant curl 7.83, donc de Debian 11 et - # Ubuntu 22.04. On telecharge dans un temporaire et on n installe que si le - # transfert a reussi ; un fichier tronque ne passe jamais a dpkg. - tmp_deb="$(mktemp --suffix=.deb)" - if ! curl -fsSL -o "${tmp_deb}" "${url}"; then - rm -f "${tmp_deb}" - err "Telechargement zabbix-release echoue : ${url}" - fi - DEBIAN_FRONTEND=noninteractive dpkg -i "${tmp_deb}" >/dev/null - rm -f "${tmp_deb}" -} - -installer_proxy() { - log "Installation de zabbix-proxy-sqlite3..." - apt-get update -y >/dev/null - DEBIAN_FRONTEND=noninteractive apt-get install -y \ - zabbix-proxy-sqlite3 zabbix-sql-scripts >/dev/null -} - -# --- cle PSK ------------------------------------------------------------------ -# Generee une seule fois. Un proxy deja apparie garde sa cle : reexecuter le -# script pour ajuster la conf ne doit pas invalider l appairage cote serveur. -poser_psk() { - install -d -m 0755 "$(dirname "${ZBX_PSK_FILE}")" - if [[ -s "${ZBX_PSK_FILE}" ]]; then - log "Cle PSK existante conservee : ${ZBX_PSK_FILE}" - else - # Cree en 0600 AVANT toute ecriture : l ecrire puis la restreindre - # laisserait le secret lisible par tous dans l intervalle. - install -m 0600 /dev/null "${ZBX_PSK_FILE}" - openssl rand -hex 32 > "${ZBX_PSK_FILE}" - log "Cle PSK generee : ${ZBX_PSK_FILE}" - fi - chmod 0600 "${ZBX_PSK_FILE}" - # zabbix_proxy tourne sous l utilisateur zabbix et lit la cle au demarrage. - if id zabbix >/dev/null 2>&1; then - chown zabbix:zabbix "${ZBX_PSK_FILE}" - else - warn "Utilisateur zabbix absent : proprietaire de la cle PSK non ajuste." - fi -} - -# --- conf proxy --------------------------------------------------------------- -render_conf() { - if [[ -f "${PROXY_CONF}" ]]; then - local bak; bak="${PROXY_CONF}.bak.$(date +%Y%m%d-%H%M%S 2>/dev/null || echo "$$")" - if cp -a "${PROXY_CONF}" "${bak}"; then - log "Conf existante sauvegardee : ${bak}" - else - warn "Echec de la sauvegarde de ${PROXY_CONF} ; elle va etre reecrite sans copie." - fi - fi - - cat > "${PROXY_CONF}" < serveur) --- -TLSConnect=psk -TLSAccept=psk -TLSPSKIdentity=${ZBX_PSK_IDENTITY} -TLSPSKFile=${ZBX_PSK_FILE} - -# --- Perf / pollers (a ajuster selon le nb de hosts) --- -StartPollers=5 -StartPollersUnreachable=1 -StartPingers=1 -StartDiscoverers=1 -CacheSize=32M - -# --- Logs --- -LogFile=/var/log/zabbix/zabbix_proxy.log -LogFileSize=10 -EOF - chmod 0644 "${PROXY_CONF}" - log "Conf proxy ecrite (Hostname=${ZBX_PROXY_HOSTNAME}, Server=${ZBX_SERVER})." -} - -# Le paquet cree /var/lib/zabbix, mais on ne le tient pas pour acquis : sans -# repertoire accessible en ecriture par l utilisateur zabbix, le proxy ne peut -# pas creer sa base au premier demarrage et sort en erreur. -preparer_db() { - local dir; dir="$(dirname "${PROXY_DB}")" - install -d -m 0755 "${dir}" - if id zabbix >/dev/null 2>&1; then - chown zabbix:zabbix "${dir}" - fi -} - -demarrer() { - systemctl enable zabbix-proxy >/dev/null 2>&1 || warn "Echec de l activation au demarrage." - # Le premier demarrage cree le schema SQLite, ce qui prend quelques secondes. - systemctl restart zabbix-proxy \ - || err "Le proxy n a pas demarre. Voir : journalctl -u zabbix-proxy -n 50" -} - -resume() { - echo - echo "==============================================================" - echo " Proxy installe. A declarer cote serveur (${ZBX_SERVER}) :" - echo - echo " Administration > Proxies > Create proxy" - echo " Proxy name : ${ZBX_PROXY_HOSTNAME}" - echo " Proxy mode : Active" - echo " Encryption : Connections from proxy = PSK" - echo " PSK identity : ${ZBX_PSK_IDENTITY}" - echo " PSK value : $(cat "${ZBX_PSK_FILE}")" - echo - echo " Le nom du proxy et l identite PSK doivent correspondre au" - echo " caractere pres, espaces compris." - echo - echo " Verification : journalctl -u zabbix-proxy -f" - echo "==============================================================" -} - -main() { - ensure_prereqs - ajouter_depot_zabbix - installer_proxy - poser_psk - preparer_db - render_conf - demarrer - resume -} - -main "$@"