### ================================== ### ### STAGE 1 CREATE PARENT IMAGE ### ### ================================== ### # https://www.docker.com/blog/docker-arm-virtual-meetup-multi-arch-with-buildx/ FROM alpine:3.22 AS builder-base ARG TARGETPLATFORM ARG BUILDPLATFORM ENV NAGIOS_HOME=/opt/nagios \ NAGIOS_USER=nagios \ NAGIOS_GROUP=nagios \ NAGIOS_CMDUSER=nagios \ NAGIOS_CMDGROUP=nagios \ NAGIOS_TIMEZONE=UTC \ NAGIOS_FQDN=nagios.example.com \ NAGIOSADMIN_USER=nagiosadmin \ NAGIOSADMIN_PASS=nagios \ NAGIOS_VERSION=4.5.10 \ NAGIOS_PLUGINS_VERSION=2.4.12 \ NRPE_VERSION=4.1.3 \ APACHE_LOCK_DIR=/var/run \ APACHE_LOG_DIR=/var/log/apache2 RUN addgroup -S ${NAGIOS_GROUP} && \ adduser -S ${NAGIOS_USER} -G ${NAGIOS_CMDGROUP} -g ${NAGIOS_USER} && \ apk update && \ apk add --no-cache git curl unzip apache2 apache2-utils rsyslog \ php83 php83-gd php83-cli runit parallel ssmtp \ libltdl libintl openssl-dev php83-apache2 procps tzdata \ libldap mariadb-connector-c freeradius-client-dev libpq libdbi \ lm-sensors perl net-snmp-perl perl-net-snmp perl-crypt-x509 \ perl-timedate perl-libwww perl-text-glob samba-client openssh openssl \ net-snmp-tools bind-tools gd gd-dev bash && \ addgroup -S apache ${NAGIOS_CMDGROUP} ### ================================== ### ### STAGE 2 COMPILE NAGIOS SOURCES ### ### ================================== ### FROM builder-base AS builder-compile ARG TARGETPLATFORM ARG BUILDPLATFORM # Add dependencies required to build Nagios RUN apk update && \ apk add --no-cache build-base automake libtool autoconf py-docutils gnutls \ gnutls-dev g++ make alpine-sdk build-base gcc autoconf \ gettext-dev linux-headers openssl-dev net-snmp net-snmp-tools \ libcrypto3 libpq musl libldap libssl3 libdbi freeradius-client mariadb-connector-c \ openssh-client bind-tools samba-client fping grep rpcbind \ lm-sensors net-snmp-tools \ file freeradius-client-dev libdbi-dev libpq linux-headers mariadb-dev \ mariadb-connector-c-dev perl \ net-snmp-dev openldap-dev openssl-dev postgresql-dev wget # Download Nagios core, plugins and nrpe sources RUN cd /tmp && \ echo -n "Downloading Nagios ${NAGIOS_VERSION} source code: " && \ wget -O nagios-core.tar.gz "https://github.com/NagiosEnterprises/nagioscore/archive/refs/tags/nagios-${NAGIOS_VERSION}.tar.gz" && \ echo -n -e "OK\nDownloading Nagios plugins ${NAGIOS_PLUGINS_VERSION} source code: " && \ wget -O nagios-plugins.tar.gz "https://github.com/nagios-plugins/nagios-plugins/archive/refs/tags/release-${NAGIOS_PLUGINS_VERSION}.tar.gz" && \ echo -n -e "OK\nDownloading NRPE ${NRPE_VERSION} source code: " && \ wget -O nrpe.tar.gz "https://github.com/NagiosEnterprises/nrpe/archive/refs/tags/nrpe-${NRPE_VERSION}.tar.gz" && \ env && \ echo "I am running on $BUILDPLATFORM, building for $TARGETPLATFORM !! == " && \ echo "OK" # Compile Nagios Core RUN ls -l /tmp && cd /tmp && \ tar zxf nagios-core.tar.gz && \ tar zxf nagios-plugins.tar.gz && \ tar zxf nrpe.tar.gz && \ cd "/tmp/nagioscore-nagios-${NAGIOS_VERSION}" && \ echo -e "\n ===========================\n Configure Nagios Core\n ===========================\n" && \ ./configure \ --prefix=${NAGIOS_HOME} \ --exec-prefix=${NAGIOS_HOME} \ --enable-event-broker \ --with-command-user=${NAGIOS_CMDUSER} \ --with-command-group=${NAGIOS_CMDGROUP} \ --with-nagios-user=${NAGIOS_USER} \ --with-nagios-group=${NAGIOS_GROUP} && \ : 'Apply patches to Nagios Core sources:' && \ echo -n "Replacing \"\" with \"\": " && \ sed -i 's///g' ./include/config.h && \ echo "OK" && \ echo -e "\n\n ===========================\n Compile Nagios Core\n ===========================\n" && \ make all && \ echo -e "\n\n ===========================\n Install Nagios Core\n ===========================\n" && \ make install && \ make install-commandmode && \ make install-config && \ make install-webconf && \ echo -n "Nagios installed size: " && \ du -h -s ${NAGIOS_HOME} # Compile Nagios Plugins RUN echo -e "\n\n ===========================\n Configure Nagios Plugins\n ===========================\n" && \ ls -lia /tmp && cd /tmp && \ cd /tmp/nagios-plugins-release-${NAGIOS_PLUGINS_VERSION} && \ ./autogen.sh && \ ./configure --with-nagios-user=${NAGIOS_USER} \ --with-nagios-group=${NAGIOS_USER} \ --with-openssl \ --prefix=${NAGIOS_HOME} \ --with-ping-command="/bin/ping -n -w %d -c %d %s" \ --with-ipv6 \ --with-ping6-command="/bin/ping6 -n -w %d -c %d %s" && \ echo "Nagios plugins configured: OK" && \ echo -n "Replacing \"\" with \"\": " && \ egrep -rl "\" . | xargs sed -i 's///g' && \ egrep -rl "\"sys\/poll.h\"" . | xargs sed -i 's/"sys\/poll.h"/"poll.h"/g' && \ echo "OK" && \ echo -e "\n\n ===========================\n Compile Nagios Plugins\n ===========================\n" && \ make && \ echo "Nagios plugins compile successfully: OK" && \ echo -e "\n\n ===========================\nInstall Nagios Plugins\n ===========================\n" && \ make install && \ echo "Nagios plugins installed successfully: OK" # Compile NRPE RUN echo -e "\n\n =====================\n Configure NRPE\n =====================\n" && \ cd /tmp/nrpe-nrpe-${NRPE_VERSION} && \ ./configure --enable-command-args \ --with-nagios-user=${NAGIOS_USER} \ --with-nagios-group=${NAGIOS_USER} \ --with-ssl=/usr/bin/openssl \ --with-ssl-lib=/usr/lib && \ echo "NRPE client configured: OK" && \ echo -e "\n\n ===========================\n Compile NRPE\n ===========================\n" && \ # make all && \ make check_nrpe && \ echo "NRPE compiled successfully: OK" && \ echo -e "\n\n ===========================\n Install NRPE\n ===========================\n" && \ # make install && \ cp src/check_nrpe ${NAGIOS_HOME}/libexec/ && \ echo "NRPE installed successfully: OK" && \ echo -n "Final Nagios installed size: " && \ du -h -s ${NAGIOS_HOME} # Compile Nagios files # Create SSMTP configuration # RUN sed -i.bak 's/.*\=www\-data//g' /etc/apache2/envvars RUN export DOC_ROOT="DocumentRoot $(echo $NAGIOS_HOME/share)" && \ sed -i "s,DocumentRoot.*,$DOC_ROOT," /etc/apache2/httpd.conf && \ sed -i "s|^ *ScriptAlias.*$|ScriptAlias /cgi-bin $NAGIOS_HOME/sbin|g" /etc/apache2/httpd.conf && \ sed -i 's/^\(.*\)#\(LoadModule cgi_module\)\(.*\)/\1\2\3/' /etc/apache2/httpd.conf && \ echo "ServerName ${NAGIOS_FQDN}" >> /etc/apache2/httpd.conf RUN sed -i 's,/bin/mail,/usr/bin/mail,' ${NAGIOS_HOME}/etc/objects/commands.cfg && \ sed -i 's,/usr/usr,/usr,' ${NAGIOS_HOME}/etc/objects/commands.cfg && \ \ : '# Modify Nagios mail commands in order to work with SSMTP' && \ sed -i 's/^.*command_line.*Host Alert.*$//g' /opt/nagios/etc/objects/commands.cfg && \ sed -i 's/^.*command_line.*Service Alert.*$//g' /opt/nagios/etc/objects/commands.cfg && \ sed -i '/notify-host-by-email/a command_line /usr/bin/printf "%b" "Subject: $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$\\n\\n***** Nagios *****\\n\\nNotification Type: $NOTIFICATIONTYPE$\\nHost: $HOSTNAME$\\nState: $HOSTSTATE$\\nAddress: $HOSTADDRESS$\\nInfo: $HOSTOUTPUT$\\n\\nDate/Time: $LONGDATETIME$\\n" | /usr/sbin/sendmail -v $CONTACTEMAIL$' ${NAGIOS_HOME}/etc/objects/commands.cfg && \ sed -i '/notify-service-by-email/a command_line /usr/bin/printf "%b" "Subject: $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$\\n\\n***** Nagios *****\\n\\nNotification Type: $NOTIFICATIONTYPE$\\n\\nService: $SERVICEDESC$\\nHost: $HOSTALIAS$\\nAddress: $HOSTADDRESS$\\nState: $SERVICESTATE$\\n\\nDate/Time: $LONGDATETIME$\\n\\nAdditional Info:\\n\\n$SERVICEOUTPUT$\\n" | /usr/sbin/sendmail -v $CONTACTEMAIL$' ${NAGIOS_HOME}/etc/objects/commands.cfg && \ \ : '# Modify etc/resource.cfg in order to include custom plugins directory' && \ sed -i 's/^\(.*\)\(Sets .USER2. to be the path to\) event handlers.*$/\1\2 custom plugins directory/g' "${NAGIOS_HOME}"/etc/resource.cfg && \ sed -i 's;^#\([$]USER2[$]=\).*$;\1/opt/Custom-Nagios-Plugins;g' "${NAGIOS_HOME}"/etc/resource.cfg RUN echo "use_timezone=${NAGIOS_TIMEZONE}" >> ${NAGIOS_HOME}/etc/nagios.cfg && \ sed -i 's/date_format=us/date_format=iso8601/g' ${NAGIOS_HOME}/etc/nagios.cfg # Copy original configuration to /orig directory RUN mkdir -p /orig/apache2 && \ cp -r /etc/apache2/* /orig/apache2 && \ cp -r ${NAGIOS_HOME}/etc /orig/etc && \ cp -r ${NAGIOS_HOME}/var /orig/var ### ========================== ### ### START OF ACTUAL DOCKERFILE ### ### ========================== ### FROM builder-base LABEL name="Nagios" \ nagiosVersion=$NAGIOS_VERSION \ nagiosPluginsVersion=$NAGIOS_PLUGINS_VERSION \ nrpeVersion=$NRPE_VERSION \ homepage="https://www.nagios.com/" \ maintainer="Christos Manios " \ build="31" \ org.opencontainers.image.title="Nagios" \ org.opencontainers.image.description="Nagios, the Industry Standard In IT Infrastructure Monitoring" \ org.opencontainers.image.vendor="Nagios" \ org.opencontainers.image.authors="Christos Manios " \ org.opencontainers.image.licenses="MIT" \ org.opencontainers.image.url="https://hub.docker.com/r/manios/nagios" \ org.opencontainers.image.source="https://github.com/manios/docker-nagios" \ org.opencontainers.image.documentation="https://github.com/manios/docker-nagios/blob/master/README.md" \ org.opencontainers.image.version="31" RUN mkdir -p ${NAGIOS_HOME} && \ mkdir -p /orig/apache2 WORKDIR ${NAGIOS_HOME} COPY --from=builder-compile ${NAGIOS_HOME} ${NAGIOS_HOME} COPY --from=builder-compile /orig /orig ADD overlay/ / # Make RUN chmod +x /usr/local/bin/start_nagios \ /etc/sv/apache/run \ /etc/sv/nagios/run \ /etc/sv/rsyslog/run && \ rm -rf /etc/sv/getty-5 && \ \ : '# enable all runit services' && \ ln -s /etc/sv/* /etc/service && \ \ : '# Copy initial settings files' && \ chown -R nagios:nagios ${NAGIOS_HOME} && \ : '# Create special dirs' && \ (mkdir /run/apache2 || true) && \ mkdir -p /var/spool/rsyslog && \ : '# Copy Apache configuration' && \ cp -Rp /orig/apache2/* /etc/apache2 && \ : '# Convert files to Unix format' && \ dos2unix /etc/rsyslog.conf && \ dos2unix /usr/local/bin/start_nagios && \ dos2unix /etc/sv/**/run && \ dos2unix /etc/ssmtp/ssmtp.conf && \ : '# Add mail symbolic links to ssmtp' && \ ln -s $(which ssmtp) /bin/mail && \ ln -s $(which ssmtp) /usr/sbin/mail EXPOSE 80 VOLUME "${NAGIOS_HOME}/var" "${NAGIOS_HOME}/etc" "/var/log/apache2" "/opt/Custom-Nagios-Plugins" CMD [ "/usr/local/bin/start_nagios" ]