diff --git a/Dockerfile b/Dockerfile index fee2bb21..dbe38812 100644 --- a/Dockerfile +++ b/Dockerfile @@ -62,6 +62,7 @@ RUN apk --update --no-cache add \ php83-sockets \ php83-tokenizer \ php83-xml \ + php83-xmlwriter \ php83-zip \ python3 \ py3-pip \ diff --git a/README.md b/README.md index b2e01910..3c700bf0 100644 --- a/README.md +++ b/README.md @@ -187,6 +187,13 @@ linux/s390x * `DB_PASSWORD`: MySQL password (default `librenms`) * `DB_TIMEOUT`: Time in seconds after which we stop trying to reach the MySQL server (useful for clusters, default `60`) +### Plugins +* `INSTALL_PLUGINS`: Space-separated list of plugins to install + +> This environment variable allows you to specify which plugins should be installed +> in your LibreNMS container. It's particularly useful for enabling SAML authentication. +> The value should be a space-separated list of plugin names. + ### Misc * `LIBRENMS_BASE_URL`: URL of your LibreNMS instance (default `/`) diff --git a/rootfs/etc/cont-init.d/09-install-plugins.sh b/rootfs/etc/cont-init.d/09-install-plugins.sh new file mode 100644 index 00000000..8b3149f9 --- /dev/null +++ b/rootfs/etc/cont-init.d/09-install-plugins.sh @@ -0,0 +1,34 @@ +#!/usr/bin/with-contenv sh +# shellcheck shell=sh +set -e + +INSTALL_PLUGINS=${INSTALL_PLUGINS:-0} +SIDECAR_DISPATCHER=${SIDECAR_DISPATCHER:-0} +SIDECAR_SYSLOGNG=${SIDECAR_SYSLOGNG:-0} +SIDECAR_SNMPTRAPD=${SIDECAR_SNMPTRAPD:-0} + +# Exit if any sidecar is enabled +if [ "$SIDECAR_DISPATCHER" = "1" ] || [ "$SIDECAR_SYSLOGNG" = "1" ] || [ "$SIDECAR_SNMPTRAPD" = "1" ]; then + exit 0 +fi + +# Exit if plugins are not needed +if [ "$INSTALL_PLUGINS" = "0" ]; then + exit 0 +fi + +echo ">> Plugin configuration detected" + +echo "Fixing permissions..." +chown librenms:librenms \ + "${LIBRENMS_PATH}"/composer.* \ + "${LIBRENMS_PATH}/logs/librenms.log" \ + "${LIBRENMS_PATH}/scripts/composer_wrapper.php" + +chown -R librenms:librenms \ + "${LIBRENMS_PATH}/scripts" \ + "${LIBRENMS_PATH}/vendor" \ + "${LIBRENMS_PATH}/bootstrap" + +# Install plugins +lnms plugin:add "$INSTALL_PLUGINS" diff --git a/rootfs/etc/cont-init.d/09-plugin-add.sh b/rootfs/etc/cont-init.d/09-plugin-add.sh new file mode 100644 index 00000000..318197a5 --- /dev/null +++ b/rootfs/etc/cont-init.d/09-plugin-add.sh @@ -0,0 +1,43 @@ +#!/usr/bin/with-contenv sh +# shellcheck shell=sh +set -e + +INSTALL_PLUGINS=${INSTALL_PLUGINS:-0} + +# Continue only if plugins are needed +if [ "$INSTALL_PLUGINS" = "0" ]; then + exit 0 +fi + +echo ">>" +echo ">> Plugin configuration detected" +echo ">>" + +# Fix perms +echo "Fixing perms..." +chown librenms:librenms \ + ${LIBRENMS_PATH}/composer.* \ + ${LIBRENMS_PATH}/logs/librenms.log \ + ${LIBRENMS_PATH}/scripts/composer_wrapper.php +chown -R librenms:librenms \ + ${LIBRENMS_PATH}/scripts \ + ${LIBRENMS_PATH}/vendor \ + ${LIBRENMS_PATH}/bootstrap + +# Create service +IFS=, read -ra PLUGINS <<< "$INSTALL_PLUGINS" + +for plugin in "${PLUGINS[@]}"; do + echo "Installing plugin: $plugin" + + if ! lnms plugin:installed "$plugin"; then + if ! lnms plugin:add "$plugin"; then + echo "Error installing $plugin" >&2 + exit 1 + fi + echo "Installed $plugin" + else + echo "$plugin already installed" + fi + +done