From a1f9a73af9cbeb49c0f845f603874d40fe3195cf Mon Sep 17 00:00:00 2001 From: anima Date: Sun, 2 Feb 2025 17:48:36 +0100 Subject: [PATCH] inital version --- Dockerfile | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ init.sh | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 Dockerfile create mode 100644 init.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f26f00b --- /dev/null +++ b/Dockerfile @@ -0,0 +1,51 @@ +FROM debian:bookworm-slim +LABEL maintainer="docker@ao-it.net" + +## prepare requirements +RUN ["bash", "-exo", "pipefail", "-c", "\ + export DEBIAN_FRONTEND=noninteractive ; \ + apt update ; \ + apt install -y wget gnupg ; \ + wget -O - https://packages.icinga.com/icinga.key | \ + gpg --dearmor -o /usr/share/keyrings/icinga-archive-keyring.gpg ; \ + source /etc/os-release ; \ + echo \"deb [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-${VERSION_CODENAME} main\" > /etc/apt/sources.list.d/${VERSION_CODENAME}-icinga.list ; \ + echo \"deb-src [signed-by=/usr/share/keyrings/icinga-archive-keyring.gpg] https://packages.icinga.com/debian icinga-${VERSION_CODENAME} main\" >> /etc/apt/sources.list.d/${VERSION_CODENAME}-icinga.list ; \ + apt clean all ; \ + rm -vrf /var/lib/apt/lists/* "] + +## install icinga2 +RUN ["bash", "-exo", "pipefail", "-c", "\ + export DEBIAN_FRONTEND=noninteractive ; \ + apt update ; \ + apt install -y icinga2 monitoring-plugins ; \ + mkdir -p /run/icinga2 ; \ + chown nagios: /run/icinga2 ; \ + apt clean all ; \ + rm -vrf /var/lib/apt/lists/* "] + +## create persistend data store +RUN ["bash", "-exo", "pipefail", "-c", "\ + mkdir -p /var/lib/icinga2/certs ; \ + chown -R nagios:nagios /var/lib/icinga2/certs ; \ + mkdir -p /data ; \ + mkdir -p /data-init/etc/ ; \ + mkdir -p /data-init/var/ ; \ + mkdir -p /data-init/plugins ; \ + mv /etc/icinga2 /data-init/etc/ ; \ + mv /var/lib/icinga2 /data-init/var/ ; \ + mv /usr/lib/nagios/plugins /data-init/ ; \ + ln -vs /data/etc/icinga2 /etc/icinga2 ; \ + ln -vs /data/var/icinga2 /var/lib/icinga2 ; \ + ln -vs /data/plugins /usr/lib/nagios/plugins "] + +COPY init.sh /root/init.sh + +EXPOSE 5665 +VOLUME ["/data"] +WORKDIR /data +USER root + +## run init.sh always! +ENTRYPOINT [ "bash", "/root/init.sh" ] +CMD [ "/usr/sbin/icinga2", "daemon" ] \ No newline at end of file diff --git a/init.sh b/init.sh new file mode 100644 index 0000000..7995d0e --- /dev/null +++ b/init.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +## init icinga if need +if [ -z "$(ls -A /data)" ]; then + ## init icinga config files + echo init icinga2 config + cp -ax /data-init/* /data + rm -rf /data-init + ## create satellite cert + if [ ! -z "$ICINGA2_SATELLITE_CN" ]; then + echo generate new cert + icinga2 pki new-cert --cn $ICINGA2_SATELLITE_CN \ + --key /var/lib/icinga2/certs/$ICINGA2_SATELLITE_CN.key \ + --cert /var/lib/icinga2/certs/$ICINGA2_SATELLITE_CN.crt + fi + + ## get parent cert + if [ ! -z "$ICINGA2_PARENT_HOST" ]; then + echo get parent cert + icinga2 pki save-cert \ + --trustedcert /var/lib/icinga2/certs/trusted-parent.crt \ + --host $ICINGA2_PARENT_HOST + fi + + ## join parent + ### see: https://icinga.com/docs/icinga-2/latest/doc/06-distributed-monitoring/#node-setup + REQUIRED_VARS=("ICINGA2_PARENT_CN" "ICINGA2_PARENT_ZONE" "ICINGA2_PARENT_HOST" \ + "ICINGA2_SATELLITE_CN" "ICINGA2_SATELLITE_ZONE" "ICINGA2_JOIN_TICKET" ) + INIT_SATELLITE=true + echo check env var for auto setup + for VAR in "${REQUIRED_VARS[@]}"; do + if [ -z "${!VAR}" ]; then + echo "'$VAR' not set" + INIT_SATELLITE=false + fi + done + if [ "$INIT_SATELLITE" = true ]; then + echo init satellite + icinga2 node setup --ticket $ICINGA2_JOIN_TICKET \ + --cn $ICINGA2_SATELLITE_CN \ + --endpoint $ICINGA2_PARENT_CN \ + --zone $ICINGA2_SATELLITE_ZONE \ + --parent_zone $ICINGA2_PARENT_ZONE \ + --parent_host $ICINGA2_PARENT_HOST \ + --trustedcert /var/lib/icinga2/certs/trusted-parent.crt \ + --accept-commands --accept-config --disable-confd + else + echo satellite not init must do manually + fi +fi + + +# run CMD +exec "$@" \ No newline at end of file