first commit
This commit is contained in:
5
rootfs/opt/bitnami/apache/conf/deflate.conf
Normal file
5
rootfs/opt/bitnami/apache/conf/deflate.conf
Normal file
@ -0,0 +1,5 @@
|
||||
<IfModule mod_deflate.c>
|
||||
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
|
||||
AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript
|
||||
AddOutputFilterByType DEFLATE application/rss+xml
|
||||
</IfModule>
|
@ -0,0 +1,7 @@
|
||||
<VirtualHost 127.0.0.1:80>
|
||||
ServerName status.localhost
|
||||
<Location /server-status>
|
||||
Require local
|
||||
SetHandler server-status
|
||||
</Location>
|
||||
</VirtualHost>
|
81
rootfs/opt/bitnami/scripts/apache-env.sh
Normal file
81
rootfs/opt/bitnami/scripts/apache-env.sh
Normal file
@ -0,0 +1,81 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
#
|
||||
# Environment configuration for apache
|
||||
|
||||
# The values for all environment variables will be set in the below order of precedence
|
||||
# 1. Custom environment variables defined below after Bitnami defaults
|
||||
# 2. Constants defined in this file (environment variables with no default), i.e. BITNAMI_ROOT_DIR
|
||||
# 3. Environment variables overridden via external files using *_FILE variables (see below)
|
||||
# 4. Environment variables set externally (i.e. current Bash context/Dockerfile/userdata)
|
||||
|
||||
# Load logging library
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
export BITNAMI_ROOT_DIR="/opt/bitnami"
|
||||
export BITNAMI_VOLUME_DIR="/bitnami"
|
||||
|
||||
# Logging configuration
|
||||
export MODULE="${MODULE:-apache}"
|
||||
export BITNAMI_DEBUG="${BITNAMI_DEBUG:-false}"
|
||||
|
||||
# By setting an environment variable matching *_FILE to a file path, the prefixed environment
|
||||
# variable will be overridden with the value specified in that file
|
||||
apache_env_vars=(
|
||||
APACHE_HTTP_PORT_NUMBER
|
||||
APACHE_HTTPS_PORT_NUMBER
|
||||
APACHE_SERVER_TOKENS
|
||||
APACHE_HTTP_PORT
|
||||
APACHE_HTTPS_PORT
|
||||
)
|
||||
for env_var in "${apache_env_vars[@]}"; do
|
||||
file_env_var="${env_var}_FILE"
|
||||
if [[ -n "${!file_env_var:-}" ]]; then
|
||||
if [[ -r "${!file_env_var:-}" ]]; then
|
||||
export "${env_var}=$(< "${!file_env_var}")"
|
||||
unset "${file_env_var}"
|
||||
else
|
||||
warn "Skipping export of '${env_var}'. '${!file_env_var:-}' is not readable."
|
||||
fi
|
||||
fi
|
||||
done
|
||||
unset apache_env_vars
|
||||
export WEB_SERVER_TYPE="apache"
|
||||
|
||||
# Paths
|
||||
export APACHE_BASE_DIR="${BITNAMI_ROOT_DIR}/apache"
|
||||
export APACHE_BIN_DIR="${APACHE_BASE_DIR}/bin"
|
||||
export APACHE_CONF_DIR="${APACHE_BASE_DIR}/conf"
|
||||
export APACHE_DEFAULT_CONF_DIR="${APACHE_BASE_DIR}/conf.default"
|
||||
export APACHE_HTDOCS_DIR="${APACHE_BASE_DIR}/htdocs"
|
||||
export APACHE_TMP_DIR="${APACHE_BASE_DIR}/var/run"
|
||||
export APACHE_LOGS_DIR="${APACHE_BASE_DIR}/logs"
|
||||
export APACHE_VHOSTS_DIR="${APACHE_CONF_DIR}/vhosts"
|
||||
export APACHE_HTACCESS_DIR="${APACHE_VHOSTS_DIR}/htaccess"
|
||||
export APACHE_CONF_FILE="${APACHE_CONF_DIR}/httpd.conf"
|
||||
export APACHE_PID_FILE="${APACHE_TMP_DIR}/httpd.pid"
|
||||
export PATH="${APACHE_BIN_DIR}:${BITNAMI_ROOT_DIR}/common/bin:${PATH}"
|
||||
|
||||
# System users (when running with a privileged user)
|
||||
export APACHE_DAEMON_USER="daemon"
|
||||
export WEB_SERVER_DAEMON_USER="$APACHE_DAEMON_USER"
|
||||
export APACHE_DAEMON_GROUP="daemon"
|
||||
export WEB_SERVER_DAEMON_GROUP="$APACHE_DAEMON_GROUP"
|
||||
export WEB_SERVER_GROUP="$APACHE_DAEMON_GROUP"
|
||||
|
||||
# Apache configuration
|
||||
export APACHE_DEFAULT_HTTP_PORT_NUMBER="8080"
|
||||
export WEB_SERVER_DEFAULT_HTTP_PORT_NUMBER="$APACHE_DEFAULT_HTTP_PORT_NUMBER" # only used at build time
|
||||
export APACHE_DEFAULT_HTTPS_PORT_NUMBER="8443"
|
||||
export WEB_SERVER_DEFAULT_HTTPS_PORT_NUMBER="$APACHE_DEFAULT_HTTPS_PORT_NUMBER" # only used at build time
|
||||
APACHE_HTTP_PORT_NUMBER="${APACHE_HTTP_PORT_NUMBER:-"${APACHE_HTTP_PORT:-}"}"
|
||||
export APACHE_HTTP_PORT_NUMBER="${APACHE_HTTP_PORT_NUMBER:-}"
|
||||
export WEB_SERVER_HTTP_PORT_NUMBER="$APACHE_HTTP_PORT_NUMBER"
|
||||
APACHE_HTTPS_PORT_NUMBER="${APACHE_HTTPS_PORT_NUMBER:-"${APACHE_HTTPS_PORT:-}"}"
|
||||
export APACHE_HTTPS_PORT_NUMBER="${APACHE_HTTPS_PORT_NUMBER:-}"
|
||||
export WEB_SERVER_HTTPS_PORT_NUMBER="$APACHE_HTTPS_PORT_NUMBER"
|
||||
export APACHE_SERVER_TOKENS="${APACHE_SERVER_TOKENS:-Prod}"
|
||||
|
||||
# Custom environment variables may be defined below
|
43
rootfs/opt/bitnami/scripts/apache-modphp/postunpack.sh
Executable file
43
rootfs/opt/bitnami/scripts/apache-modphp/postunpack.sh
Executable file
@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libversion.sh
|
||||
. /opt/bitnami/scripts/libapache.sh
|
||||
|
||||
# Load Apache environment
|
||||
. /opt/bitnami/scripts/apache-env.sh
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
# Enable required Apache modules
|
||||
apache_enable_module "mpm_prefork_module"
|
||||
php_version="$("${PHP_BIN_DIR}/php" -v | grep ^PHP | cut -d' ' -f2))"
|
||||
php_major_version="$(get_sematic_version "$php_version" 1)"
|
||||
if [[ "$php_major_version" -eq "8" ]]; then
|
||||
apache_enable_module "php_module" "modules/libphp.so"
|
||||
else
|
||||
apache_enable_module "php${php_major_version}_module" "modules/libphp${php_major_version}.so"
|
||||
fi
|
||||
|
||||
# Disable incompatible Apache modules
|
||||
apache_disable_module "mpm_event_module"
|
||||
|
||||
# Write Apache configuration
|
||||
apache_php_conf_file="${APACHE_CONF_DIR}/bitnami/php.conf"
|
||||
cat > "$apache_php_conf_file" <<EOF
|
||||
AddType application/x-httpd-php .php
|
||||
DirectoryIndex index.html index.htm index.php
|
||||
EOF
|
||||
ensure_apache_configuration_exists "Include \"${apache_php_conf_file}\""
|
||||
|
||||
# Copy all initially generated configuration files to the default directory
|
||||
# (this is to avoid breaking when entrypoint is being overridden)
|
||||
cp -r "$APACHE_CONF_DIR"/* "$APACHE_DEFAULT_CONF_DIR"
|
@ -0,0 +1,7 @@
|
||||
{{http_listen_configuration}}
|
||||
{{before_vhost_configuration}}
|
||||
<VirtualHost {{http_listen_addresses}}>
|
||||
{{server_name_configuration}}
|
||||
{{additional_http_configuration}}
|
||||
{{additional_configuration}}
|
||||
</VirtualHost>
|
@ -0,0 +1,10 @@
|
||||
{{https_listen_configuration}}
|
||||
{{before_vhost_configuration}}
|
||||
<VirtualHost {{https_listen_addresses}}>
|
||||
{{server_name_configuration}}
|
||||
SSLEngine on
|
||||
SSLCertificateFile "{{APACHE_CONF_DIR}}/bitnami/certs/server.crt"
|
||||
SSLCertificateKeyFile "{{APACHE_CONF_DIR}}/bitnami/certs/server.key"
|
||||
{{additional_https_configuration}}
|
||||
{{additional_configuration}}
|
||||
</VirtualHost>
|
@ -0,0 +1 @@
|
||||
{{additional_configuration}}
|
@ -0,0 +1,15 @@
|
||||
{{http_listen_configuration}}
|
||||
{{before_vhost_configuration}}
|
||||
<VirtualHost {{http_listen_addresses}}>
|
||||
{{server_name_configuration}}
|
||||
DocumentRoot {{document_root}}
|
||||
<Directory "{{document_root}}">
|
||||
Options -Indexes +FollowSymLinks -MultiViews
|
||||
AllowOverride {{allow_override}}
|
||||
{{acl_configuration}}
|
||||
{{extra_directory_configuration}}
|
||||
</Directory>
|
||||
{{additional_http_configuration}}
|
||||
{{additional_configuration}}
|
||||
{{htaccess_include}}
|
||||
</VirtualHost>
|
@ -0,0 +1,18 @@
|
||||
{{https_listen_configuration}}
|
||||
{{before_vhost_configuration}}
|
||||
<VirtualHost {{https_listen_addresses}}>
|
||||
{{server_name_configuration}}
|
||||
SSLEngine on
|
||||
SSLCertificateFile "{{APACHE_CONF_DIR}}/bitnami/certs/server.crt"
|
||||
SSLCertificateKeyFile "{{APACHE_CONF_DIR}}/bitnami/certs/server.key"
|
||||
DocumentRoot {{document_root}}
|
||||
<Directory "{{document_root}}">
|
||||
Options -Indexes +FollowSymLinks -MultiViews
|
||||
AllowOverride {{allow_override}}
|
||||
{{acl_configuration}}
|
||||
{{extra_directory_configuration}}
|
||||
</Directory>
|
||||
{{additional_https_configuration}}
|
||||
{{additional_configuration}}
|
||||
{{htaccess_include}}
|
||||
</VirtualHost>
|
@ -0,0 +1,9 @@
|
||||
{{prefix_conf}}
|
||||
<Directory "{{document_root}}">
|
||||
Options -Indexes +FollowSymLinks -MultiViews
|
||||
AllowOverride {{allow_override}}
|
||||
{{acl_configuration}}
|
||||
{{extra_directory_configuration}}
|
||||
</Directory>
|
||||
{{additional_configuration}}
|
||||
{{htaccess_include}}
|
@ -0,0 +1,11 @@
|
||||
{{http_listen_configuration}}
|
||||
{{before_vhost_configuration}}
|
||||
<VirtualHost {{http_listen_addresses}}>
|
||||
{{server_name_configuration}}
|
||||
{{proxy_configuration}}
|
||||
{{proxy_http_configuration}}
|
||||
ProxyPass / {{proxy_address}}
|
||||
ProxyPassReverse / {{proxy_address}}
|
||||
{{additional_http_configuration}}
|
||||
{{additional_configuration}}
|
||||
</VirtualHost>
|
@ -0,0 +1,14 @@
|
||||
{{https_listen_configuration}}
|
||||
{{before_vhost_configuration}}
|
||||
<VirtualHost {{https_listen_addresses}}>
|
||||
{{server_name_configuration}}
|
||||
SSLEngine on
|
||||
SSLCertificateFile "{{APACHE_CONF_DIR}}/bitnami/certs/server.crt"
|
||||
SSLCertificateKeyFile "{{APACHE_CONF_DIR}}/bitnami/certs/server.key"
|
||||
{{proxy_configuration}}
|
||||
{{proxy_https_configuration}}
|
||||
ProxyPass / {{proxy_address}}
|
||||
ProxyPassReverse / {{proxy_address}}
|
||||
{{additional_https_configuration}}
|
||||
{{additional_configuration}}
|
||||
</VirtualHost>
|
@ -0,0 +1,11 @@
|
||||
{{prefix_conf}}
|
||||
<Directory "{{document_root}}">
|
||||
Options -Indexes +FollowSymLinks -MultiViews
|
||||
AllowOverride {{allow_override}}
|
||||
{{acl_configuration}}
|
||||
{{proxy_configuration}}
|
||||
ProxyPass / {{proxy_address}}
|
||||
ProxyPassReverse / {{proxy_address}}
|
||||
{{extra_directory_configuration}}
|
||||
</Directory>
|
||||
{{additional_configuration}}
|
@ -0,0 +1,16 @@
|
||||
{{http_listen_configuration}}
|
||||
{{before_vhost_configuration}}
|
||||
PassengerPreStart http://localhost:{{http_port}}/
|
||||
<VirtualHost {{http_listen_addresses}}>
|
||||
{{server_name_configuration}}
|
||||
DocumentRoot {{document_root}}
|
||||
<Directory "{{document_root}}">
|
||||
Options -Indexes +FollowSymLinks -MultiViews
|
||||
AllowOverride {{allow_override}}
|
||||
{{acl_configuration}}
|
||||
PassengerEnabled on
|
||||
{{extra_directory_configuration}}
|
||||
</Directory>
|
||||
{{additional_http_configuration}}
|
||||
{{additional_configuration}}
|
||||
</VirtualHost>
|
@ -0,0 +1,19 @@
|
||||
{{https_listen_configuration}}
|
||||
{{before_vhost_configuration}}
|
||||
PassengerPreStart https://localhost:{{https_port}}/
|
||||
<VirtualHost {{https_listen_addresses}}>
|
||||
{{server_name_configuration}}
|
||||
SSLEngine on
|
||||
SSLCertificateFile "{{APACHE_CONF_DIR}}/bitnami/certs/server.crt"
|
||||
SSLCertificateKeyFile "{{APACHE_CONF_DIR}}/bitnami/certs/server.key"
|
||||
DocumentRoot {{document_root}}
|
||||
<Directory "{{document_root}}">
|
||||
Options -Indexes +FollowSymLinks -MultiViews
|
||||
AllowOverride {{allow_override}}
|
||||
{{acl_configuration}}
|
||||
PassengerEnabled on
|
||||
{{extra_directory_configuration}}
|
||||
</Directory>
|
||||
{{additional_https_configuration}}
|
||||
{{additional_configuration}}
|
||||
</VirtualHost>
|
@ -0,0 +1,9 @@
|
||||
{{prefix_conf}}
|
||||
<Directory "{{document_root}}">
|
||||
Options -Indexes +FollowSymLinks -MultiViews
|
||||
AllowOverride {{allow_override}}
|
||||
{{acl_configuration}}
|
||||
PassengerEnabled on
|
||||
{{extra_directory_configuration}}
|
||||
</Directory>
|
||||
{{additional_configuration}}
|
@ -0,0 +1,29 @@
|
||||
# Default SSL Virtual Host configuration.
|
||||
|
||||
<IfModule !ssl_module>
|
||||
LoadModule ssl_module modules/mod_ssl.so
|
||||
</IfModule>
|
||||
|
||||
Listen 443
|
||||
SSLProtocol all -SSLv2 -SSLv3
|
||||
SSLHonorCipherOrder on
|
||||
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !EDH !RC4"
|
||||
SSLPassPhraseDialog builtin
|
||||
SSLSessionCache "shmcb:{{APACHE_LOGS_DIR}}/ssl_scache(512000)"
|
||||
SSLSessionCacheTimeout 300
|
||||
|
||||
<VirtualHost _default_:443>
|
||||
DocumentRoot "{{APACHE_BASE_DIR}}/htdocs"
|
||||
SSLEngine on
|
||||
SSLCertificateFile "{{APACHE_CONF_DIR}}/bitnami/certs/server.crt"
|
||||
SSLCertificateKeyFile "{{APACHE_CONF_DIR}}/bitnami/certs/server.key"
|
||||
|
||||
<Directory "{{APACHE_BASE_DIR}}/htdocs">
|
||||
Options Indexes FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
# Error Documents
|
||||
ErrorDocument 503 /503.html
|
||||
</VirtualHost>
|
@ -0,0 +1,17 @@
|
||||
# Default Virtual Host configuration.
|
||||
|
||||
# Let Apache know we're behind a SSL reverse proxy
|
||||
SetEnvIf X-Forwarded-Proto https HTTPS=on
|
||||
|
||||
<VirtualHost _default_:80>
|
||||
DocumentRoot "{{APACHE_BASE_DIR}}/htdocs"
|
||||
<Directory "{{APACHE_BASE_DIR}}/htdocs">
|
||||
Options Indexes FollowSymLinks
|
||||
AllowOverride All
|
||||
Require all granted
|
||||
</Directory>
|
||||
|
||||
# Error Documents
|
||||
ErrorDocument 503 /503.html
|
||||
</VirtualHost>
|
||||
|
35
rootfs/opt/bitnami/scripts/apache/entrypoint.sh
Executable file
35
rootfs/opt/bitnami/scripts/apache/entrypoint.sh
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
#set -o xtrace
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libapache.sh
|
||||
. /opt/bitnami/scripts/libbitnami.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
# Load Apache environment
|
||||
. /opt/bitnami/scripts/apache-env.sh
|
||||
|
||||
print_welcome_page
|
||||
|
||||
# We add the copy from default config in the entrypoint to not break users
|
||||
# bypassing the setup.sh logic. If the file already exists do not overwrite (in
|
||||
# case someone mounts a configuration file in /opt/bitnami/apache/conf)
|
||||
debug "Copying files from $APACHE_DEFAULT_CONF_DIR to $APACHE_CONF_DIR"
|
||||
cp -nr "$APACHE_DEFAULT_CONF_DIR"/. "$APACHE_CONF_DIR"
|
||||
|
||||
if [[ "$*" == *"/opt/bitnami/scripts/apache/run.sh"* ]]; then
|
||||
info "** Starting Apache setup **"
|
||||
/opt/bitnami/scripts/apache/setup.sh
|
||||
info "** Apache setup finished! **"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
exec "$@"
|
131
rootfs/opt/bitnami/scripts/apache/postunpack.sh
Executable file
131
rootfs/opt/bitnami/scripts/apache/postunpack.sh
Executable file
@ -0,0 +1,131 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libapache.sh
|
||||
. /opt/bitnami/scripts/libfs.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
########################
|
||||
# Sets up the default Bitnami configuration
|
||||
# Globals:
|
||||
# APACHE_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
apache_setup_bitnami_config() {
|
||||
local template_dir="${BITNAMI_ROOT_DIR}/scripts/apache/bitnami-templates"
|
||||
|
||||
# Enable Apache modules
|
||||
local -a modules_to_enable=(
|
||||
"deflate_module"
|
||||
"negotiation_module"
|
||||
"proxy[^\s]*_module"
|
||||
"rewrite_module"
|
||||
"slotmem_shm_module"
|
||||
"socache_shmcb_module"
|
||||
"ssl_module"
|
||||
"status_module"
|
||||
"version_module"
|
||||
)
|
||||
for module in "${modules_to_enable[@]}"; do
|
||||
apache_enable_module "$module"
|
||||
done
|
||||
|
||||
# Disable Apache modules
|
||||
local -a modules_to_disable=(
|
||||
"http2_module"
|
||||
"proxy_hcheck_module"
|
||||
"proxy_html_module"
|
||||
"proxy_http2_module"
|
||||
)
|
||||
for module in "${modules_to_disable[@]}"; do
|
||||
apache_disable_module "$module"
|
||||
done
|
||||
|
||||
# Bitnami customizations
|
||||
ensure_dir_exists "${APACHE_CONF_DIR}/bitnami"
|
||||
render-template "${template_dir}/bitnami.conf.tpl" > "${APACHE_CONF_DIR}/bitnami/bitnami.conf"
|
||||
render-template "${template_dir}/bitnami-ssl.conf.tpl" > "${APACHE_CONF_DIR}/bitnami/bitnami-ssl.conf"
|
||||
|
||||
# Add new configuration only once, to avoid a second postunpack run breaking Apache
|
||||
local apache_conf_add
|
||||
apache_conf_add="$(cat <<EOF
|
||||
Include "${APACHE_CONF_DIR}/extra/httpd-default.conf"
|
||||
PidFile "${APACHE_PID_FILE}"
|
||||
TraceEnable Off
|
||||
ServerTokens ${APACHE_SERVER_TOKENS}
|
||||
Include "${APACHE_CONF_DIR}/deflate.conf"
|
||||
IncludeOptional "${APACHE_VHOSTS_DIR}/*.conf"
|
||||
Include "${APACHE_CONF_DIR}/bitnami/bitnami.conf"
|
||||
EOF
|
||||
)"
|
||||
ensure_apache_configuration_exists "$apache_conf_add" "${APACHE_CONF_DIR}/bitnami/bitnami.conf"
|
||||
|
||||
# Configure the default ports since the container is non root by default
|
||||
apache_configure_http_port "$APACHE_DEFAULT_HTTP_PORT_NUMBER"
|
||||
apache_configure_https_port "$APACHE_DEFAULT_HTTPS_PORT_NUMBER"
|
||||
|
||||
# Patch the HTTPoxy vulnerability - see: https://docs.bitnami.com/general/security/security-2016-07-18/
|
||||
apache_patch_httpoxy_vulnerability
|
||||
|
||||
# Remove unnecessary directories that come with the tarball
|
||||
rm -rf "${BITNAMI_ROOT_DIR}/certs" "${BITNAMI_ROOT_DIR}/conf"
|
||||
}
|
||||
|
||||
########################
|
||||
# Patches the HTTPoxy vulnerability - see: https://docs.bitnami.com/general/security/security-2016-07-18/
|
||||
# Globals:
|
||||
# APACHE_CONF_FILE
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
apache_patch_httpoxy_vulnerability() {
|
||||
# Apache HTTPD includes the HTTPoxy fix since 2016, so we only add it if not present
|
||||
if ! grep -q "RequestHeader unset Proxy" "$APACHE_CONF_FILE"; then
|
||||
cat >>"$APACHE_CONF_FILE" <<EOF
|
||||
<IfModule mod_headers.c>
|
||||
RequestHeader unset Proxy
|
||||
</IfModule>
|
||||
EOF
|
||||
fi
|
||||
}
|
||||
|
||||
# Load Apache environment
|
||||
. /opt/bitnami/scripts/apache-env.sh
|
||||
|
||||
apache_setup_bitnami_config
|
||||
|
||||
# Ensure non-root user has write permissions on a set of directories
|
||||
for dir in "$APACHE_TMP_DIR" "$APACHE_CONF_DIR" "$APACHE_LOGS_DIR" "$APACHE_VHOSTS_DIR" "$APACHE_HTACCESS_DIR" "$APACHE_HTDOCS_DIR" "$APACHE_DEFAULT_CONF_DIR"; do
|
||||
ensure_dir_exists "$dir"
|
||||
chmod -R g+rwX "$dir"
|
||||
done
|
||||
|
||||
# Create 'apache2' symlink pointing to the 'apache' directory, for compatibility with Bitnami Docs guides
|
||||
ln -sf apache "${BITNAMI_ROOT_DIR}/apache2"
|
||||
|
||||
ln -sf "/dev/stdout" "${APACHE_LOGS_DIR}/access_log"
|
||||
ln -sf "/dev/stderr" "${APACHE_LOGS_DIR}/error_log"
|
||||
|
||||
# This file is necessary for avoiding the error
|
||||
# "unable to write random state"
|
||||
# Source: https://stackoverflow.com/questions/94445/using-openssl-what-does-unable-to-write-random-state-mean
|
||||
|
||||
touch /.rnd && chmod g+rw /.rnd
|
||||
|
||||
# Copy all initially generated configuration files to the default directory
|
||||
# (this is to avoid breaking when entrypoint is being overridden)
|
||||
cp -r "$APACHE_CONF_DIR"/* "$APACHE_DEFAULT_CONF_DIR"
|
20
rootfs/opt/bitnami/scripts/apache/reload.sh
Executable file
20
rootfs/opt/bitnami/scripts/apache/reload.sh
Executable file
@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libapache.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
# Load Apache environment
|
||||
. /opt/bitnami/scripts/apache-env.sh
|
||||
|
||||
info "** Reloading Apache configuration **"
|
||||
exec "${APACHE_BIN_DIR}/apachectl" -k graceful
|
19
rootfs/opt/bitnami/scripts/apache/restart.sh
Executable file
19
rootfs/opt/bitnami/scripts/apache/restart.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libapache.sh
|
||||
|
||||
# Load Apache environment variables
|
||||
. /opt/bitnami/scripts/apache-env.sh
|
||||
|
||||
/opt/bitnami/scripts/apache/stop.sh
|
||||
/opt/bitnami/scripts/apache/start.sh
|
20
rootfs/opt/bitnami/scripts/apache/run.sh
Executable file
20
rootfs/opt/bitnami/scripts/apache/run.sh
Executable file
@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libapache.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
# Load Apache environment
|
||||
. /opt/bitnami/scripts/apache-env.sh
|
||||
|
||||
info "** Starting Apache **"
|
||||
exec "${APACHE_BIN_DIR}/httpd" -f "$APACHE_CONF_FILE" -D "FOREGROUND"
|
98
rootfs/opt/bitnami/scripts/apache/setup.sh
Executable file
98
rootfs/opt/bitnami/scripts/apache/setup.sh
Executable file
@ -0,0 +1,98 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libfs.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
. /opt/bitnami/scripts/libapache.sh
|
||||
|
||||
# Load Apache environment
|
||||
. /opt/bitnami/scripts/apache-env.sh
|
||||
|
||||
# Ensure Apache environment variables are valid
|
||||
apache_validate
|
||||
|
||||
# Ensure Apache daemon user exists when running as 'root'
|
||||
am_i_root && ensure_user_exists "$APACHE_DAEMON_USER" --group "$APACHE_DAEMON_GROUP"
|
||||
|
||||
if ! is_dir_empty "$APACHE_DEFAULT_CONF_DIR"; then
|
||||
# We add the copy from default config in the initialize function for web applications
|
||||
# that make use of the Apache setup.sh script
|
||||
debug "Copying files from $APACHE_DEFAULT_CONF_DIR to $APACHE_CONF_DIR"
|
||||
cp -nr "$APACHE_DEFAULT_CONF_DIR"/. "$APACHE_CONF_DIR"
|
||||
fi
|
||||
# Generate SSL certs (without a passphrase)
|
||||
ensure_dir_exists "${APACHE_CONF_DIR}/bitnami/certs"
|
||||
if [[ ! -f "${APACHE_CONF_DIR}/bitnami/certs/server.crt" ]]; then
|
||||
info "Generating sample certificates"
|
||||
SSL_KEY_FILE="${APACHE_CONF_DIR}/bitnami/certs/server.key"
|
||||
SSL_CERT_FILE="${APACHE_CONF_DIR}/bitnami/certs/server.crt"
|
||||
SSL_CSR_FILE="${APACHE_CONF_DIR}/bitnami/certs/server.csr"
|
||||
SSL_SUBJ="/CN=example.com"
|
||||
SSL_EXT="subjectAltName=DNS:example.com,DNS:www.example.com,IP:127.0.0.1"
|
||||
rm -f "$SSL_KEY_FILE" "$SSL_CERT_FILE"
|
||||
openssl genrsa -out "$SSL_KEY_FILE" 4096
|
||||
# OpenSSL version 1.0.x does not use the same parameters as OpenSSL >= 1.1.x
|
||||
if [[ "$(openssl version | grep -oE "[0-9]+\.[0-9]+")" == "1.0" ]]; then
|
||||
openssl req -new -sha256 -out "$SSL_CSR_FILE" -key "$SSL_KEY_FILE" -nodes -subj "$SSL_SUBJ"
|
||||
else
|
||||
openssl req -new -sha256 -out "$SSL_CSR_FILE" -key "$SSL_KEY_FILE" -nodes -subj "$SSL_SUBJ" -addext "$SSL_EXT"
|
||||
fi
|
||||
openssl x509 -req -sha256 -in "$SSL_CSR_FILE" -signkey "$SSL_KEY_FILE" -out "$SSL_CERT_FILE" -days 1825 -extfile <(echo -n "$SSL_EXT")
|
||||
rm -f "$SSL_CSR_FILE"
|
||||
fi
|
||||
# Load SSL configuration
|
||||
if [[ -f "${APACHE_CONF_DIR}/bitnami/bitnami.conf" ]] && [[ -f "${APACHE_CONF_DIR}/bitnami/bitnami-ssl.conf" ]]; then
|
||||
ensure_apache_configuration_exists "Include \"${APACHE_CONF_DIR}/bitnami/bitnami-ssl.conf\"" "bitnami-ssl\.conf" "${APACHE_CONF_DIR}/bitnami/bitnami.conf"
|
||||
fi
|
||||
|
||||
# Copy vhosts files
|
||||
if ! is_dir_empty "/vhosts"; then
|
||||
info "Found mounted virtual hosts in '/vhosts'. Copying them to '${APACHE_BASE_DIR}/conf/vhosts'"
|
||||
cp -Lr "/vhosts/." "${APACHE_VHOSTS_DIR}"
|
||||
fi
|
||||
|
||||
# Mount certificate files
|
||||
if ! is_dir_empty "${APACHE_BASE_DIR}/certs"; then
|
||||
warn "The directory '${APACHE_BASE_DIR}/certs' was externally mounted. This is a legacy configuration and will be deprecated soon. Please mount certificate files at '/certs' instead. Find an example at: https://github.com/bitnami/containers/tree/main/bitnami/apache#using-custom-ssl-certificates"
|
||||
warn "Restoring certificates at '${APACHE_BASE_DIR}/certs' to '${APACHE_CONF_DIR}/bitnami/certs'"
|
||||
rm -rf "${APACHE_CONF_DIR}/bitnami/certs"
|
||||
ln -sf "${APACHE_BASE_DIR}/certs" "${APACHE_CONF_DIR}/bitnami/certs"
|
||||
elif ! is_dir_empty "/certs"; then
|
||||
info "Mounting certificates files from '/certs'"
|
||||
rm -rf "${APACHE_CONF_DIR}/bitnami/certs"
|
||||
ln -sf "/certs" "${APACHE_CONF_DIR}/bitnami/certs"
|
||||
fi
|
||||
|
||||
# Mount application files
|
||||
if ! is_dir_empty "/app"; then
|
||||
info "Mounting application files from '/app'"
|
||||
rm -rf "$APACHE_HTDOCS_DIR"
|
||||
ln -sf "/app" "$APACHE_HTDOCS_DIR"
|
||||
fi
|
||||
|
||||
# Restore persisted configuration files (deprecated)
|
||||
if ! is_dir_empty "/bitnami/apache/conf"; then
|
||||
warn "The directory '/bitnami/apache/conf' was externally mounted. This is a legacy configuration and will be deprecated soon. Please mount certificate files at '${APACHE_CONF_DIR}' instead. Find an example at: https://github.com/bitnami/containers/tree/main/bitnami/apache#full-configuration"
|
||||
warn "Restoring configuration at '/bitnami/apache/conf' to '${APACHE_CONF_DIR}'"
|
||||
rm -rf "$APACHE_CONF_DIR"
|
||||
ln -sf "/bitnami/apache/conf" "$APACHE_CONF_DIR"
|
||||
fi
|
||||
|
||||
# Update ports in configuration
|
||||
[[ -n "$APACHE_HTTP_PORT_NUMBER" ]] && info "Configuring the HTTP port" && apache_configure_http_port "$APACHE_HTTP_PORT_NUMBER"
|
||||
[[ -n "$APACHE_HTTPS_PORT_NUMBER" ]] && info "Configuring the HTTPS port" && apache_configure_https_port "$APACHE_HTTPS_PORT_NUMBER"
|
||||
|
||||
# Configure ServerTokens with user values
|
||||
[[ -n "$APACHE_SERVER_TOKENS" ]] && info "Configuring Apache ServerTokens directive" && apache_configure_server_tokens "$APACHE_SERVER_TOKENS"
|
||||
|
||||
# Fix logging issue when running as root
|
||||
! am_i_root || chmod o+w "$(readlink /dev/stdout)" "$(readlink /dev/stderr)"
|
34
rootfs/opt/bitnami/scripts/apache/start.sh
Executable file
34
rootfs/opt/bitnami/scripts/apache/start.sh
Executable file
@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libapache.sh
|
||||
. /opt/bitnami/scripts/libos.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
# Load Apache environment variables
|
||||
. /opt/bitnami/scripts/apache-env.sh
|
||||
|
||||
error_code=0
|
||||
|
||||
if is_apache_not_running; then
|
||||
"${APACHE_BIN_DIR}/httpd" -f "$APACHE_CONF_FILE"
|
||||
if ! retry_while "is_apache_running"; then
|
||||
error "apache did not start"
|
||||
error_code=1
|
||||
else
|
||||
info "apache started"
|
||||
fi
|
||||
else
|
||||
info "apache is already running"
|
||||
fi
|
||||
|
||||
exit "$error_code"
|
23
rootfs/opt/bitnami/scripts/apache/status.sh
Executable file
23
rootfs/opt/bitnami/scripts/apache/status.sh
Executable file
@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libapache.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
# Load Apache environment variables
|
||||
. /opt/bitnami/scripts/apache-env.sh
|
||||
|
||||
if is_apache_running; then
|
||||
info "apache is already running"
|
||||
else
|
||||
info "apache is not running"
|
||||
fi
|
34
rootfs/opt/bitnami/scripts/apache/stop.sh
Executable file
34
rootfs/opt/bitnami/scripts/apache/stop.sh
Executable file
@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libapache.sh
|
||||
. /opt/bitnami/scripts/libos.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
# Load Apache environment variables
|
||||
. /opt/bitnami/scripts/apache-env.sh
|
||||
|
||||
error_code=0
|
||||
|
||||
if is_apache_running; then
|
||||
BITNAMI_QUIET=1 apache_stop
|
||||
if ! retry_while "is_apache_not_running"; then
|
||||
error "apache could not be stopped"
|
||||
error_code=1
|
||||
else
|
||||
info "apache stopped"
|
||||
fi
|
||||
else
|
||||
info "apache is not running"
|
||||
fi
|
||||
|
||||
exit "$error_code"
|
64
rootfs/opt/bitnami/scripts/dokuwiki-env.sh
Normal file
64
rootfs/opt/bitnami/scripts/dokuwiki-env.sh
Normal file
@ -0,0 +1,64 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
#
|
||||
# Environment configuration for dokuwiki
|
||||
|
||||
# The values for all environment variables will be set in the below order of precedence
|
||||
# 1. Custom environment variables defined below after Bitnami defaults
|
||||
# 2. Constants defined in this file (environment variables with no default), i.e. BITNAMI_ROOT_DIR
|
||||
# 3. Environment variables overridden via external files using *_FILE variables (see below)
|
||||
# 4. Environment variables set externally (i.e. current Bash context/Dockerfile/userdata)
|
||||
|
||||
# Load logging library
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
export BITNAMI_ROOT_DIR="/opt/bitnami"
|
||||
export BITNAMI_VOLUME_DIR="/bitnami"
|
||||
|
||||
# Logging configuration
|
||||
export MODULE="${MODULE:-dokuwiki}"
|
||||
export BITNAMI_DEBUG="${BITNAMI_DEBUG:-false}"
|
||||
|
||||
# By setting an environment variable matching *_FILE to a file path, the prefixed environment
|
||||
# variable will be overridden with the value specified in that file
|
||||
dokuwiki_env_vars=(
|
||||
DOKUWIKI_DATA_TO_PERSIST
|
||||
DOKUWIKI_USERNAME
|
||||
DOKUWIKI_FULL_NAME
|
||||
DOKUWIKI_EMAIL
|
||||
DOKUWIKI_PASSWORD
|
||||
DOKUWIKI_WIKI_NAME
|
||||
)
|
||||
for env_var in "${dokuwiki_env_vars[@]}"; do
|
||||
file_env_var="${env_var}_FILE"
|
||||
if [[ -n "${!file_env_var:-}" ]]; then
|
||||
if [[ -r "${!file_env_var:-}" ]]; then
|
||||
export "${env_var}=$(< "${!file_env_var}")"
|
||||
unset "${file_env_var}"
|
||||
else
|
||||
warn "Skipping export of '${env_var}'. '${!file_env_var:-}' is not readable."
|
||||
fi
|
||||
fi
|
||||
done
|
||||
unset dokuwiki_env_vars
|
||||
|
||||
# Paths
|
||||
export DOKUWIKI_BASE_DIR="${BITNAMI_ROOT_DIR}/dokuwiki"
|
||||
|
||||
# DokuWiki persistence configuration
|
||||
export DOKUWIKI_VOLUME_DIR="${BITNAMI_VOLUME_DIR}/dokuwiki"
|
||||
export DOKUWIKI_DATA_TO_PERSIST="${DOKUWIKI_DATA_TO_PERSIST:-data conf lib/plugins lib/tpl lib/images/smileys/local lib/images/interwiki}"
|
||||
|
||||
# DokuWiki configuration
|
||||
export DOKUWIKI_USERNAME="${DOKUWIKI_USERNAME:-user}"
|
||||
export DOKUWIKI_FULL_NAME="${DOKUWIKI_FULL_NAME:-FirstName LastName}"
|
||||
export DOKUWIKI_EMAIL="${DOKUWIKI_EMAIL:-user@example.com}"
|
||||
export DOKUWIKI_PASSWORD="${DOKUWIKI_PASSWORD:-bitnami1}"
|
||||
export DOKUWIKI_WIKI_NAME="${DOKUWIKI_WIKI_NAME:-Bitnami DokuWiki}"
|
||||
|
||||
# PHP configuration
|
||||
export PHP_DEFAULT_MEMORY_LIMIT="256M" # only used at build time
|
||||
|
||||
# Custom environment variables may be defined below
|
32
rootfs/opt/bitnami/scripts/dokuwiki/entrypoint.sh
Executable file
32
rootfs/opt/bitnami/scripts/dokuwiki/entrypoint.sh
Executable file
@ -0,0 +1,32 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load DokuWiki environment
|
||||
. /opt/bitnami/scripts/dokuwiki-env.sh
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libbitnami.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
. /opt/bitnami/scripts/libwebserver.sh
|
||||
|
||||
print_welcome_page
|
||||
|
||||
if [[ "$1" = "/opt/bitnami/scripts/$(web_server_type)/run.sh" || "$1" = "/opt/bitnami/scripts/nginx-php-fpm/run.sh" ]]; then
|
||||
info "** Starting DokuWiki setup **"
|
||||
/opt/bitnami/scripts/"$(web_server_type)"/setup.sh
|
||||
/opt/bitnami/scripts/php/setup.sh
|
||||
/opt/bitnami/scripts/dokuwiki/setup.sh
|
||||
/post-init.sh
|
||||
info "** DokuWiki setup finished! **"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
exec "$@"
|
63
rootfs/opt/bitnami/scripts/dokuwiki/postunpack.sh
Executable file
63
rootfs/opt/bitnami/scripts/dokuwiki/postunpack.sh
Executable file
@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load DokuWiki environment
|
||||
. /opt/bitnami/scripts/dokuwiki-env.sh
|
||||
|
||||
# Load PHP environment for 'php_conf_set' (after 'dokuwiki-env.sh' so that MODULE is not set to a wrong value)
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libdokuwiki.sh
|
||||
. /opt/bitnami/scripts/libfile.sh
|
||||
. /opt/bitnami/scripts/libfs.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
. /opt/bitnami/scripts/libphp.sh
|
||||
. /opt/bitnami/scripts/libwebserver.sh
|
||||
|
||||
# Load web server environment and functions (after DokuWiki environment file so MODULE is not set to a wrong value)
|
||||
. "/opt/bitnami/scripts/$(web_server_type)-env.sh"
|
||||
|
||||
# Ensure the DokuWiki base directory exists and has proper permissions
|
||||
info "Configuring file permissions for DokuWiki"
|
||||
ensure_user_exists "$WEB_SERVER_DAEMON_USER" --group "$WEB_SERVER_DAEMON_GROUP"
|
||||
for dir in "$DOKUWIKI_BASE_DIR" "$DOKUWIKI_VOLUME_DIR" "${DOKUWIKI_BASE_DIR}/lib/images/smileys/local" "${DOKUWIKI_BASE_DIR}/uploads"; do
|
||||
ensure_dir_exists "$dir"
|
||||
# Use daemon:root ownership for compatibility when running as a non-root user
|
||||
configure_permissions_ownership "$dir" -d "775" -f "664" -u "$WEB_SERVER_DAEMON_USER" -g "root"
|
||||
done
|
||||
|
||||
# Configure memory limit for PHP
|
||||
info "Configuring default PHP options for DokuWiki"
|
||||
php_conf_set memory_limit "$PHP_DEFAULT_MEMORY_LIMIT"
|
||||
|
||||
# Enable default web server configuration for DokuWiki
|
||||
info "Creating default web server configuration for DokuWiki"
|
||||
web_server_validate
|
||||
# shellcheck disable=SC2016
|
||||
ensure_web_server_app_configuration_exists "dokuwiki" --type php --apache-extra-directory-configuration '
|
||||
# Enable DokuWiki friendly URLs - Based on https://www.dokuwiki.org/rewrite
|
||||
RewriteEngine on
|
||||
RewriteRule ^_media/(.*) lib/exe/fetch.php?media=$1 [QSA,L]
|
||||
RewriteRule ^_detail/(.*) lib/exe/detail.php?media=$1 [QSA,L]
|
||||
RewriteRule ^_export/([^/]+)/(.*) doku.php?do=export_$1&id=$2 [QSA,L]
|
||||
RewriteRule ^$ doku.php [L]
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
# Fix: DokuWiki rewrite rule affects Apache server-status page and makes it return a DokuWiki 404 page instead
|
||||
RewriteCond %{REQUEST_URI} !^/server-status$
|
||||
RewriteRule (.*) doku.php?id=$1 [QSA,L]
|
||||
RewriteRule ^index.php$ doku.php
|
||||
'
|
||||
|
||||
# Copy all initially generated configuration files to the default directory
|
||||
# (this is to avoid breaking when entrypoint is being overridden)
|
||||
cp -r "/opt/bitnami/$(web_server_type)/conf"/* "/opt/bitnami/$(web_server_type)/conf.default"
|
29
rootfs/opt/bitnami/scripts/dokuwiki/setup.sh
Executable file
29
rootfs/opt/bitnami/scripts/dokuwiki/setup.sh
Executable file
@ -0,0 +1,29 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load DokuWiki environment
|
||||
. /opt/bitnami/scripts/dokuwiki-env.sh
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libdokuwiki.sh
|
||||
. /opt/bitnami/scripts/libwebserver.sh
|
||||
|
||||
# Load web server environment and functions (after DokuWiki environment file so MODULE is not set to a wrong value)
|
||||
. "/opt/bitnami/scripts/$(web_server_type)-env.sh"
|
||||
|
||||
# Ensure DokuWiki environment variables are valid
|
||||
dokuwiki_validate
|
||||
|
||||
# Update web server configuration with runtime environment (needs to happen before the initialization)
|
||||
web_server_update_app_configuration "dokuwiki"
|
||||
|
||||
# Ensure DokuWiki is initialized
|
||||
dokuwiki_initialize
|
808
rootfs/opt/bitnami/scripts/libapache.sh
Normal file
808
rootfs/opt/bitnami/scripts/libapache.sh
Normal file
@ -0,0 +1,808 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
#
|
||||
# Bitnami Apache library
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
# Load Generic Libraries
|
||||
. /opt/bitnami/scripts/libfs.sh
|
||||
. /opt/bitnami/scripts/libfile.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
. /opt/bitnami/scripts/libos.sh
|
||||
. /opt/bitnami/scripts/libvalidations.sh
|
||||
. /opt/bitnami/scripts/libservice.sh
|
||||
|
||||
########################
|
||||
# Validate settings in APACHE_* env vars
|
||||
# Globals:
|
||||
# APACHE_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
apache_validate() {
|
||||
debug "Validating settings in APACHE_* environment variables"
|
||||
local error_code=0
|
||||
|
||||
# Auxiliary functions
|
||||
print_validation_error() {
|
||||
error "$1"
|
||||
error_code=1
|
||||
}
|
||||
|
||||
check_allowed_port() {
|
||||
local port_var="${1:?missing port variable}"
|
||||
local -a validate_port_args=()
|
||||
! am_i_root && validate_port_args+=("-unprivileged")
|
||||
validate_port_args+=("${!port_var}")
|
||||
if ! err=$(validate_port "${validate_port_args[@]}"); then
|
||||
print_validation_error "An invalid port was specified in the environment variable ${port_var}: ${err}."
|
||||
fi
|
||||
}
|
||||
|
||||
[[ -w "$APACHE_CONF_FILE" ]] || warn "The Apache configuration file '${APACHE_CONF_FILE}' is not writable. Configurations based on environment variables will not be applied."
|
||||
|
||||
if [[ -n "$APACHE_HTTP_PORT_NUMBER" ]] && [[ -n "$APACHE_HTTPS_PORT_NUMBER" ]]; then
|
||||
if [[ "$APACHE_HTTP_PORT_NUMBER" -eq "$APACHE_HTTPS_PORT_NUMBER" ]]; then
|
||||
print_validation_error "APACHE_HTTP_PORT_NUMBER and APACHE_HTTPS_PORT_NUMBER are bound to the same port!"
|
||||
fi
|
||||
fi
|
||||
|
||||
[[ -n "$APACHE_HTTP_PORT_NUMBER" ]] && check_allowed_port APACHE_HTTP_PORT_NUMBER
|
||||
[[ -n "$APACHE_HTTPS_PORT_NUMBER" ]] && check_allowed_port APACHE_HTTPS_PORT_NUMBER
|
||||
|
||||
[[ "$error_code" -eq 0 ]] || exit "$error_code"
|
||||
}
|
||||
|
||||
########################
|
||||
# Configure Apache's HTTP port
|
||||
# Globals:
|
||||
# APACHE_CONF_FILE, APACHE_CONF_DIR
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
apache_configure_http_port() {
|
||||
local -r port=${1:?missing port}
|
||||
local -r listen_exp="s|^\s*Listen\s+([^:]*:)?[0-9]+\s*$|Listen ${port}|"
|
||||
local -r server_name_exp="s|^\s*#?\s*ServerName\s+([^:\s]+)(:[0-9]+)?$|ServerName \1:${port}|"
|
||||
local -r vhost_exp="s|VirtualHost\s+([^:>]+)(:[0-9]+)|VirtualHost \1:${port}|"
|
||||
local apache_configuration
|
||||
|
||||
if [[ -w "$APACHE_CONF_FILE" ]]; then
|
||||
debug "Configuring port ${port} on file ${APACHE_CONF_FILE}"
|
||||
apache_configuration="$(sed -E -e "$listen_exp" -e "$server_name_exp" "$APACHE_CONF_FILE")"
|
||||
echo "$apache_configuration" > "$APACHE_CONF_FILE"
|
||||
fi
|
||||
|
||||
if [[ -w "${APACHE_CONF_DIR}/bitnami/bitnami.conf" ]]; then
|
||||
debug "Configuring port ${port} on file ${APACHE_CONF_DIR}/bitnami/bitnami.conf"
|
||||
apache_configuration="$(sed -E "$vhost_exp" "${APACHE_CONF_DIR}/bitnami/bitnami.conf")"
|
||||
echo "$apache_configuration" > "${APACHE_CONF_DIR}/bitnami/bitnami.conf"
|
||||
fi
|
||||
|
||||
if [[ -w "${APACHE_VHOSTS_DIR}/00_status-vhost.conf" ]]; then
|
||||
debug "Configuring port ${port} on file ${APACHE_VHOSTS_DIR}/00_status-vhost.conf"
|
||||
apache_configuration="$(sed -E "$vhost_exp" "${APACHE_VHOSTS_DIR}/00_status-vhost.conf")"
|
||||
echo "$apache_configuration" > "${APACHE_VHOSTS_DIR}/00_status-vhost.conf"
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Configure Apache's HTTPS port
|
||||
# Globals:
|
||||
# APACHE_CONF_DIR
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
apache_configure_https_port() {
|
||||
local -r port=${1:?missing port}
|
||||
local -r listen_exp="s|^\s*Listen\s+([^:]*:)?[0-9]+\s*$|Listen ${port}|"
|
||||
local -r vhost_exp="s|VirtualHost\s+([^:>]+)(:[0-9]+)|VirtualHost \1:${port}|"
|
||||
local apache_configuration
|
||||
|
||||
if [[ -w "${APACHE_CONF_DIR}/bitnami/bitnami-ssl.conf" ]]; then
|
||||
debug "Configuring port ${port} on file ${APACHE_CONF_DIR}/bitnami/bitnami-ssl.conf"
|
||||
apache_configuration="$(sed -E -e "$listen_exp" -e "$vhost_exp" "${APACHE_CONF_DIR}/bitnami/bitnami-ssl.conf")"
|
||||
echo "$apache_configuration" > "${APACHE_CONF_DIR}/bitnami/bitnami-ssl.conf"
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Configure Apache's ServerTokens directive
|
||||
# Globals:
|
||||
# APACHE_CONF_DIR
|
||||
# Arguments:
|
||||
# $1 - Value for ServerTokens directive
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
apache_configure_server_tokens() {
|
||||
local -r value=${1:?missing value}
|
||||
local -r server_tokens_exp="s|^\s*ServerTokens\s+\w+\s*$|ServerTokens ${value}|"
|
||||
local apache_configuration
|
||||
|
||||
if [[ -w "$APACHE_CONF_FILE" ]]; then
|
||||
debug "Configuring ServerTokens ${value} on file ${APACHE_CONF_FILE}"
|
||||
apache_configuration="$(sed -E -e "$server_tokens_exp" "$APACHE_CONF_FILE")"
|
||||
echo "$apache_configuration" > "$APACHE_CONF_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Enable a module in the Apache configuration file
|
||||
# Globals:
|
||||
# APACHE_CONF_FILE
|
||||
# Arguments:
|
||||
# $1 - Module to enable
|
||||
# $2 - Path to module .so file (optional if already defined in httpd.conf)
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
apache_enable_module() {
|
||||
local -r name="${1:?missing name}"
|
||||
local -r file="${2:-}"
|
||||
local -r regex="[#\s]*(LoadModule\s+${name}\s+.*)$"
|
||||
local apache_configuration
|
||||
|
||||
if [[ -w "$APACHE_CONF_FILE" ]]; then
|
||||
debug "Enabling module '${name}'"
|
||||
if grep -q -E "$regex" "$APACHE_CONF_FILE"; then
|
||||
# Uncomment line if the module was already defined
|
||||
replace_in_file "$APACHE_CONF_FILE" "$regex" "\1"
|
||||
elif [[ -n "$file" ]]; then
|
||||
# Add right after the last LoadModule, so all Apache modules are organized in the same section of the file
|
||||
append_file_after_last_match "$APACHE_CONF_FILE" "^[#\s]*LoadModule" "LoadModule ${name} ${file}"
|
||||
else
|
||||
error "Module ${name} was not defined in ${APACHE_CONF_FILE}. Please specify the 'file' parameter for 'apache_enable_module'."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Disable a module in the Apache configuration file
|
||||
# Globals:
|
||||
# APACHE_CONF_FILE
|
||||
# Arguments:
|
||||
# $1 - Module to disable
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
apache_disable_module() {
|
||||
local -r name="${1:?missing name}"
|
||||
local -r file="${2:-}"
|
||||
local -r regex="[#\s]*(LoadModule\s+${name}\s+.*)$"
|
||||
local apache_configuration
|
||||
|
||||
if [[ -w "$APACHE_CONF_FILE" ]]; then
|
||||
debug "Disabling module '${name}'"
|
||||
replace_in_file "$APACHE_CONF_FILE" "$regex" "#\1"
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Stop Apache
|
||||
# Globals:
|
||||
# APACHE_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
apache_stop() {
|
||||
is_apache_not_running && return
|
||||
stop_service_using_pid "$APACHE_PID_FILE"
|
||||
}
|
||||
|
||||
########################
|
||||
# Check if Apache is running
|
||||
# Globals:
|
||||
# APACHE_PID_FILE
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# Whether Apache is running
|
||||
########################
|
||||
is_apache_running() {
|
||||
local pid
|
||||
pid="$(get_pid_from_file "$APACHE_PID_FILE")"
|
||||
if [[ -n "$pid" ]]; then
|
||||
is_service_running "$pid"
|
||||
else
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Check if Apache is running
|
||||
# Globals:
|
||||
# APACHE_PID_FILE
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# Whether Apache is not running
|
||||
########################
|
||||
is_apache_not_running() {
|
||||
! is_apache_running
|
||||
}
|
||||
|
||||
########################
|
||||
# Ensure configuration gets added to the main Apache configuration file
|
||||
# Globals:
|
||||
# APACHE_*
|
||||
# Arguments:
|
||||
# $1 - configuration string
|
||||
# $2 - pattern to use for checking if the configuration already exists (default: $1)
|
||||
# $3 - Apache configuration file (default: $APACHE_CONF_FILE)
|
||||
# Returns:
|
||||
# None
|
||||
########################
|
||||
ensure_apache_configuration_exists() {
|
||||
local -r conf="${1:?conf missing}"
|
||||
local -r pattern="${2:-"$conf"}"
|
||||
local -r conf_file="${3:-"$APACHE_CONF_FILE"}"
|
||||
# Enable configuration by appending to httpd.conf
|
||||
if ! grep -E -q "$pattern" "$conf_file"; then
|
||||
if is_file_writable "$conf_file"; then
|
||||
cat >> "$conf_file" <<< "$conf"
|
||||
else
|
||||
error "Could not add the following configuration to '${conf_file}:"
|
||||
error ""
|
||||
error "$(indent "$conf" 4)"
|
||||
error ""
|
||||
error "Include the configuration manually and try again."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Collect all the .htaccess files from /opt/bitnami/$name and write the result in the 'htaccess' directory
|
||||
# Globals:
|
||||
# APACHE_*
|
||||
# Arguments:
|
||||
# $1 - App name
|
||||
# $2 - Overwrite the original .htaccess with the explanation text (defaults to 'yes')
|
||||
# Flags:
|
||||
# --document-root - Path to document root directory
|
||||
# Returns:
|
||||
# None
|
||||
########################
|
||||
apache_replace_htaccess_files() {
|
||||
local -r app="${1:?missing app}"
|
||||
local -r result_file="${APACHE_HTACCESS_DIR}/${app}-htaccess.conf"
|
||||
# Default options
|
||||
local document_root="${BITNAMI_ROOT_DIR}/${app}"
|
||||
local overwrite="yes"
|
||||
local -a htaccess_files
|
||||
local htaccess_dir
|
||||
local htaccess_contents
|
||||
# Validate arguments
|
||||
shift
|
||||
while [[ "$#" -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--document-root)
|
||||
shift
|
||||
document_root="$1"
|
||||
;;
|
||||
--overwrite)
|
||||
shift
|
||||
overwrite="$1"
|
||||
;;
|
||||
*)
|
||||
echo "Invalid command line flag ${1}" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
if is_file_writable "$result_file"; then
|
||||
# Locate all .htaccess files inside the document root
|
||||
read -r -a htaccess_files <<< "$(find "$document_root" -name .htaccess -print0 | xargs -0)"
|
||||
[[ "${#htaccess_files[@]}" = 0 ]] && return
|
||||
# Create file with root group write privileges, so it can be modified in non-root containers
|
||||
[[ ! -f "$result_file" ]] && touch "$result_file" && chmod g+rw "$result_file"
|
||||
for htaccess_file in "${htaccess_files[@]}"; do
|
||||
htaccess_dir="$(dirname "$htaccess_file")"
|
||||
htaccess_contents="$(indent "$(< "$htaccess_file")" 2)"
|
||||
# Skip if it was already included to the resulting htaccess file
|
||||
if grep -q "^<Directory \"$htaccess_dir\">" <<< "$htaccess_contents"; then
|
||||
continue
|
||||
fi
|
||||
# Add to the htaccess file
|
||||
cat >> "$result_file" <<EOF
|
||||
<Directory "${htaccess_dir}">
|
||||
${htaccess_contents}
|
||||
</Directory>
|
||||
EOF
|
||||
# Overwrite the original .htaccess with the explanation text
|
||||
if is_boolean_yes "$overwrite"; then
|
||||
echo "# This configuration has been moved to the ${result_file} config file for performance and security reasons" > "$htaccess_file"
|
||||
fi
|
||||
done
|
||||
elif [[ ! -f "$result_file" ]]; then
|
||||
error "Could not create htaccess for ${app} at '${result_file}'. Check permissions and ownership for parent directories."
|
||||
return 1
|
||||
else
|
||||
warn "The ${app} htaccess file '${result_file}' is not writable. Configurations based on environment variables will not be applied for this file."
|
||||
return
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Ensure an Apache application configuration exists (in virtual host format)
|
||||
# Globals:
|
||||
# APACHE_*
|
||||
# Arguments:
|
||||
# $1 - App name
|
||||
# Flags:
|
||||
# --type - Application type, which has an effect on what configuration template will be used, allowed values: php, (empty)
|
||||
# --hosts - Host listen addresses
|
||||
# --server-name - Server name
|
||||
# --server-aliases - Server aliases (defaults to '*')
|
||||
# --allow-remote-connections - Whether to allow remote connections or to require local connections
|
||||
# --disable - Whether to render the app's virtual hosts with a .disabled prefix
|
||||
# --disable-http - Whether to render the app's HTTP virtual host with a .disabled prefix
|
||||
# --disable-https - Whether to render the app's HTTPS virtual host with a .disabled prefix
|
||||
# --http-port - HTTP port number
|
||||
# --https-port - HTTPS port number
|
||||
# --move-htaccess - Move .htaccess files to a common place so they can be loaded during Apache startup (only allowed when type is not defined)
|
||||
# --additional-configuration - Additional vhost configuration (no default)
|
||||
# --additional-http-configuration - Additional HTTP vhost configuration (no default)
|
||||
# --additional-https-configuration - Additional HTTPS vhost configuration (no default)
|
||||
# --before-vhost-configuration - Configuration to add before the <VirtualHost> directive (no default)
|
||||
# --allow-override - Whether to allow .htaccess files (only allowed when --move-htaccess is set to 'no' and type is not defined)
|
||||
# --document-root - Path to document root directory
|
||||
# --extra-directory-configuration - Extra configuration for the document root directory
|
||||
# --proxy-address - Address where to proxy requests
|
||||
# --proxy-configuration - Extra configuration for the proxy
|
||||
# --proxy-http-configuration - Extra configuration for the proxy HTTP vhost
|
||||
# --proxy-https-configuration - Extra configuration for the proxy HTTPS vhost
|
||||
# Returns:
|
||||
# true if the configuration was enabled, false otherwise
|
||||
########################
|
||||
ensure_apache_app_configuration_exists() {
|
||||
local -r app="${1:?missing app}"
|
||||
# Default options
|
||||
local type=""
|
||||
local -a hosts=("127.0.0.1" "_default_")
|
||||
local server_name="www.example.com" # Default ServerName in httpd.conf
|
||||
local -a server_aliases=("*")
|
||||
local allow_remote_connections="yes"
|
||||
local disable="no"
|
||||
local disable_http="no"
|
||||
local disable_https="no"
|
||||
local move_htaccess="yes"
|
||||
# Template variables defaults
|
||||
export additional_configuration=""
|
||||
export additional_http_configuration=""
|
||||
export additional_https_configuration=""
|
||||
export before_vhost_configuration=""
|
||||
export allow_override="All"
|
||||
export document_root="${BITNAMI_ROOT_DIR}/${app}"
|
||||
export extra_directory_configuration=""
|
||||
export default_http_port="${APACHE_HTTP_PORT_NUMBER:-"$APACHE_DEFAULT_HTTP_PORT_NUMBER"}"
|
||||
export default_https_port="${APACHE_HTTPS_PORT_NUMBER:-"$APACHE_DEFAULT_HTTPS_PORT_NUMBER"}"
|
||||
export http_port="$default_http_port"
|
||||
export https_port="$default_https_port"
|
||||
export proxy_address=""
|
||||
export proxy_configuration=""
|
||||
export proxy_http_configuration=""
|
||||
export proxy_https_configuration=""
|
||||
# Validate arguments
|
||||
local var_name
|
||||
shift
|
||||
while [[ "$#" -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--hosts \
|
||||
| --server-aliases)
|
||||
var_name="$(echo "$1" | sed -e "s/^--//" -e "s/-/_/g")"
|
||||
shift
|
||||
read -r -a "${var_name?}" <<< "$1"
|
||||
;;
|
||||
--disable \
|
||||
| --disable-http \
|
||||
| --disable-https \
|
||||
)
|
||||
var_name="$(echo "$1" | sed -e "s/^--//" -e "s/-/_/g")"
|
||||
export "${var_name}=yes"
|
||||
;;
|
||||
--type \
|
||||
| --server-name \
|
||||
| --allow-remote-connections \
|
||||
| --http-port \
|
||||
| --https-port \
|
||||
| --move-htaccess \
|
||||
| --additional-configuration \
|
||||
| --additional-http-configuration \
|
||||
| --additional-https-configuration \
|
||||
| --before-vhost-configuration \
|
||||
| --allow-override \
|
||||
| --document-root \
|
||||
| --extra-directory-configuration \
|
||||
| --proxy-address \
|
||||
| --proxy-configuration \
|
||||
| --proxy-http-configuration \
|
||||
| --proxy-https-configuration \
|
||||
)
|
||||
var_name="$(echo "$1" | sed -e "s/^--//" -e "s/-/_/g")"
|
||||
shift
|
||||
export "${var_name}=${1}"
|
||||
;;
|
||||
*)
|
||||
echo "Invalid command line flag $1" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
# Construct listen ports configuration (only to add when using non-standard ports)
|
||||
export http_listen_configuration=""
|
||||
export https_listen_configuration=""
|
||||
[[ "$http_port" != "$default_http_port" ]] && http_listen_configuration="Listen ${http_port}"
|
||||
[[ "$https_port" != "$default_https_port" ]] && https_listen_configuration="Listen ${https_port}"
|
||||
# Construct host string in the format of "host1:port1[ host2:port2[ ...]]"
|
||||
export http_listen_addresses=""
|
||||
export https_listen_addresses=""
|
||||
for host in "${hosts[@]}"; do
|
||||
http_listen="${host}:${http_port}"
|
||||
https_listen="${host}:${https_port}"
|
||||
[[ -z "${http_listen_addresses:-}" ]] && http_listen_addresses="$http_listen" || http_listen_addresses="${http_listen_addresses} ${http_listen}"
|
||||
[[ -z "${https_listen_addresses:-}" ]] && https_listen_addresses="$https_listen" || https_listen_addresses="${https_listen_addresses} ${https_listen}"
|
||||
done
|
||||
# Construct ServerName/ServerAlias block
|
||||
export server_name_configuration=""
|
||||
if ! is_empty_value "${server_name:-}"; then
|
||||
server_name_configuration="ServerName ${server_name}"
|
||||
fi
|
||||
if [[ "${#server_aliases[@]}" -gt 0 ]]; then
|
||||
server_name_configuration+=$'\n'"ServerAlias ${server_aliases[*]}"
|
||||
fi
|
||||
# App .htaccess support (only when type is not defined)
|
||||
export htaccess_include
|
||||
[[ -z "$type" || "$type" = "php" ]] && is_boolean_yes "$move_htaccess" && apache_replace_htaccess_files "$app" --document-root "$document_root"
|
||||
if [[ -z "$type" || "$type" = "php" ]] && [[ -f "${APACHE_HTACCESS_DIR}/${app}-htaccess.conf" ]]; then
|
||||
allow_override="None"
|
||||
htaccess_include="Include \"${APACHE_HTACCESS_DIR}/${app}-htaccess.conf\""
|
||||
else
|
||||
# allow_override is already set to the expected value
|
||||
htaccess_include=""
|
||||
fi
|
||||
# ACL configuration
|
||||
export acl_configuration
|
||||
if is_boolean_yes "$allow_remote_connections"; then
|
||||
acl_configuration="Require all granted"
|
||||
else
|
||||
acl_configuration="$(cat <<EOF
|
||||
Require local
|
||||
ErrorDocument 403 "For security reasons, this URL is only accessible using localhost (127.0.0.1) as the hostname."
|
||||
# AuthType Basic
|
||||
# AuthName ${app}
|
||||
# AuthUserFile "${APACHE_BASE_DIR}/users"
|
||||
# Require valid-user
|
||||
EOF
|
||||
)"
|
||||
fi
|
||||
# Indent configurations
|
||||
server_name_configuration="$(indent $'\n'"$server_name_configuration" 2)"
|
||||
additional_configuration="$(indent $'\n'"$additional_configuration" 2)"
|
||||
additional_http_configuration="$(indent $'\n'"$additional_http_configuration" 2)"
|
||||
additional_https_configuration="$(indent $'\n'"$additional_https_configuration" 2)"
|
||||
htaccess_include="$(indent $'\n'"$htaccess_include" 2)"
|
||||
acl_configuration=""$(indent $'\n'"$acl_configuration" 4)
|
||||
extra_directory_configuration="$(indent $'\n'"$extra_directory_configuration" 4)"
|
||||
proxy_configuration="$(indent $'\n'"$proxy_configuration" 2)"
|
||||
proxy_http_configuration="$(indent $'\n'"$proxy_http_configuration" 2)"
|
||||
proxy_https_configuration="$(indent $'\n'"$proxy_https_configuration" 2)"
|
||||
# Render templates
|
||||
# We remove lines that are empty or contain only newspaces with 'sed', so the resulting file looks better
|
||||
local template_name="app"
|
||||
[[ -n "$type" && "$type" != "php" ]] && template_name="app-${type}"
|
||||
local -r template_dir="${BITNAMI_ROOT_DIR}/scripts/apache/bitnami-templates"
|
||||
local http_vhost="${APACHE_VHOSTS_DIR}/${app}-vhost.conf"
|
||||
local https_vhost="${APACHE_VHOSTS_DIR}/${app}-https-vhost.conf"
|
||||
local -r disable_suffix=".disabled"
|
||||
( is_boolean_yes "$disable" || is_boolean_yes "$disable_http" ) && http_vhost+="$disable_suffix"
|
||||
( is_boolean_yes "$disable" || is_boolean_yes "$disable_https" ) && https_vhost+="$disable_suffix"
|
||||
if is_file_writable "$http_vhost"; then
|
||||
# Create file with root group write privileges, so it can be modified in non-root containers
|
||||
[[ ! -f "$http_vhost" ]] && touch "$http_vhost" && chmod g+rw "$http_vhost"
|
||||
render-template "${template_dir}/${template_name}-http-vhost.conf.tpl" | sed '/^\s*$/d' > "$http_vhost"
|
||||
elif [[ ! -f "$http_vhost" ]]; then
|
||||
error "Could not create virtual host for ${app} at '${http_vhost}'. Check permissions and ownership for parent directories."
|
||||
return 1
|
||||
else
|
||||
warn "The ${app} virtual host file '${http_vhost}' is not writable. Configurations based on environment variables will not be applied for this file."
|
||||
fi
|
||||
if is_file_writable "$https_vhost"; then
|
||||
# Create file with root group write privileges, so it can be modified in non-root containers
|
||||
[[ ! -f "$https_vhost" ]] && touch "$https_vhost" && chmod g+rw "$https_vhost"
|
||||
render-template "${template_dir}/${template_name}-https-vhost.conf.tpl" | sed '/^\s*$/d' > "$https_vhost"
|
||||
elif [[ ! -f "$https_vhost" ]]; then
|
||||
error "Could not create virtual host for ${app} at '${https_vhost}'. Check permissions and ownership for parent directories."
|
||||
return 1
|
||||
else
|
||||
warn "The ${app} virtual host file '${https_vhost}' is not writable. Configurations based on environment variables will not be applied for this file."
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Ensure an Apache application configuration does not exist anymore (in virtual hosts format)
|
||||
# Globals:
|
||||
# *
|
||||
# Arguments:
|
||||
# $1 - App name
|
||||
# Returns:
|
||||
# true if the configuration was disabled, false otherwise
|
||||
########################
|
||||
ensure_apache_app_configuration_not_exists() {
|
||||
local -r app="${1:?missing app}"
|
||||
local -r http_vhost="${APACHE_VHOSTS_DIR}/${app}-vhost.conf"
|
||||
local -r https_vhost="${APACHE_VHOSTS_DIR}/${app}-https-vhost.conf"
|
||||
local -r disable_suffix=".disabled"
|
||||
# Note that 'rm -f' will not fail if the files don't exist
|
||||
# However if we lack permissions to remove the file, it will result in a non-zero exit code, as expected by this function
|
||||
rm -f "$http_vhost" "$https_vhost" "${http_vhost}${disable_suffix}" "${https_vhost}${disable_suffix}"
|
||||
}
|
||||
|
||||
########################
|
||||
# Ensure Apache loads the configuration for an application in a URL prefix
|
||||
# Globals:
|
||||
# APACHE_*
|
||||
# Arguments:
|
||||
# $1 - App name
|
||||
# Flags:
|
||||
# --type - Application type, which has an effect on what configuration template will be used, allowed values: php, (empty)
|
||||
# --allow-remote-connections - Whether to allow remote connections or to require local connections
|
||||
# --move-htaccess - Move .htaccess files to a common place so they can be loaded during Apache startup (only allowed when type is not defined)
|
||||
# --prefix - URL prefix from where it will be accessible (i.e. /myapp)
|
||||
# --additional-configuration - Additional vhost configuration (no default)
|
||||
# --allow-override - Whether to allow .htaccess files (only allowed when --move-htaccess is set to 'no' and type is not defined)
|
||||
# --document-root - Path to document root directory
|
||||
# --extra-directory-configuration - Extra configuration for the document root directory
|
||||
# Returns:
|
||||
# true if the configuration was enabled, false otherwise
|
||||
########################
|
||||
ensure_apache_prefix_configuration_exists() {
|
||||
local -r app="${1:?missing app}"
|
||||
# Default options
|
||||
local type=""
|
||||
local allow_remote_connections="yes"
|
||||
local move_htaccess="yes"
|
||||
local prefix="/${app}"
|
||||
# Template variables defaults
|
||||
export additional_configuration=""
|
||||
export allow_override="All"
|
||||
export document_root="${BITNAMI_ROOT_DIR}/${app}"
|
||||
export extra_directory_configuration=""
|
||||
# Validate arguments
|
||||
local var_name
|
||||
shift
|
||||
while [[ "$#" -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--type \
|
||||
| --allow-remote-connections \
|
||||
| --move-htaccess \
|
||||
| --prefix \
|
||||
| --additional-configuration \
|
||||
| --allow-override \
|
||||
| --document-root \
|
||||
| --extra-directory-configuration \
|
||||
)
|
||||
var_name="$(echo "$1" | sed -e "s/^--//" -e "s/-/_/g")"
|
||||
shift
|
||||
declare "${var_name}=${1}"
|
||||
;;
|
||||
*)
|
||||
echo "Invalid command line flag $1" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
# App .htaccess support (only when type is not defined)
|
||||
export htaccess_include
|
||||
[[ -z "$type" || "$type" = "php" ]] && is_boolean_yes "$move_htaccess" && apache_replace_htaccess_files "$app" --document-root "$document_root"
|
||||
if [[ -z "$type" || "$type" = "php" ]] && [[ -f "${APACHE_HTACCESS_DIR}/${app}-htaccess.conf" ]]; then
|
||||
allow_override="None"
|
||||
htaccess_include="Include \"${APACHE_HTACCESS_DIR}/${app}-htaccess.conf\""
|
||||
else
|
||||
# allow_override is already set to the expected value
|
||||
htaccess_include=""
|
||||
fi
|
||||
# ACL configuration
|
||||
export acl_configuration
|
||||
if is_boolean_yes "$allow_remote_connections"; then
|
||||
acl_configuration="Require all granted"
|
||||
else
|
||||
acl_configuration="$(cat <<EOF
|
||||
Require local
|
||||
ErrorDocument 403 "For security reasons, this URL is only accessible using localhost (127.0.0.1) as the hostname."
|
||||
# AuthType Basic
|
||||
# AuthName ${app}
|
||||
# AuthUserFile "${APACHE_BASE_DIR}/users"
|
||||
# Require valid-user
|
||||
EOF
|
||||
)"
|
||||
fi
|
||||
# Prefix configuration
|
||||
export prefix_conf="Alias ${prefix} \"${document_root}\""
|
||||
# Indent configurations
|
||||
acl_configuration="$(indent $'\n'"$acl_configuration" 2)"
|
||||
extra_directory_configuration="$(indent $'\n'"$extra_directory_configuration" 2)"
|
||||
# Render templates
|
||||
# We remove lines that are empty or contain only newspaces with 'sed', so the resulting file looks better
|
||||
local template_name="app"
|
||||
[[ -n "$type" && "$type" != "php" ]] && template_name="app-${type}"
|
||||
local -r template_dir="${BITNAMI_ROOT_DIR}/scripts/apache/bitnami-templates"
|
||||
local -r prefix_file="${APACHE_CONF_DIR}/bitnami/${app}.conf"
|
||||
if is_file_writable "$prefix_file"; then
|
||||
# Create file with root group write privileges, so it can be modified in non-root containers
|
||||
[[ ! -f "$prefix_file" ]] && touch "$prefix_file" && chmod g+rw "$prefix_file"
|
||||
render-template "${template_dir}/${template_name}-prefix.conf.tpl" | sed '/^\s*$/d' > "$prefix_file"
|
||||
ensure_apache_configuration_exists "Include \"$prefix_file\""
|
||||
elif [[ ! -f "$prefix_file" ]]; then
|
||||
error "Could not create web server configuration file for ${app} at '${prefix_file}'. Check permissions and ownership for parent directories."
|
||||
return 1
|
||||
else
|
||||
warn "The ${app} web server configuration file '${prefix_file}' is not writable. Configurations based on environment variables will not be applied for this file."
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Ensure Apache application configuration is updated with the runtime configuration (i.e. ports)
|
||||
# Globals:
|
||||
# *
|
||||
# Arguments:
|
||||
# $1 - App name
|
||||
# Flags:
|
||||
# --hosts - Host listen addresses
|
||||
# --server-name - Server name
|
||||
# --server-aliases - Server aliases
|
||||
# --enable-http - Enable HTTP app configuration (if not enabled already)
|
||||
# --enable-https - Enable HTTPS app configuration (if not enabled already)
|
||||
# --disable-http - Disable HTTP app configuration (if not disabled already)
|
||||
# --disable-https - Disable HTTPS app configuration (if not disabled already)
|
||||
# --http-port - HTTP port number
|
||||
# --https-port - HTTPS port number
|
||||
# Returns:
|
||||
# true if the configuration was updated, false otherwise
|
||||
########################
|
||||
apache_update_app_configuration() {
|
||||
local -r app="${1:?missing app}"
|
||||
# Default options
|
||||
local -a hosts=("127.0.0.1" "_default_")
|
||||
local server_name="www.example.com" # Default ServerName in httpd.conf
|
||||
local -a server_aliases=()
|
||||
local enable_http="no"
|
||||
local enable_https="no"
|
||||
local disable_http="no"
|
||||
local disable_https="no"
|
||||
export default_http_port="${APACHE_HTTP_PORT_NUMBER:-"$APACHE_DEFAULT_HTTP_PORT_NUMBER"}"
|
||||
export default_https_port="${APACHE_HTTPS_PORT_NUMBER:-"$APACHE_DEFAULT_HTTPS_PORT_NUMBER"}"
|
||||
export http_port="$default_http_port"
|
||||
export https_port="$default_https_port"
|
||||
local var_name
|
||||
# Validate arguments
|
||||
local var_name
|
||||
shift
|
||||
while [[ "$#" -gt 0 ]]; do
|
||||
case "$1" in
|
||||
--hosts \
|
||||
| --server-aliases)
|
||||
var_name="$(echo "$1" | sed -e "s/^--//" -e "s/-/_/g")"
|
||||
shift
|
||||
read -r -a "${var_name?}" <<< "$1"
|
||||
;;
|
||||
# Common flags
|
||||
--enable-http \
|
||||
| --enable-https \
|
||||
| --disable-http \
|
||||
| --disable-https \
|
||||
)
|
||||
var_name="$(echo "$1" | sed -e "s/^--//" -e "s/-/_/g")"
|
||||
declare "${var_name}=yes"
|
||||
;;
|
||||
--server-name \
|
||||
| --http-port \
|
||||
| --https-port \
|
||||
)
|
||||
var_name="$(echo "$1" | sed -e "s/^--//" -e "s/-/_/g")"
|
||||
shift
|
||||
declare "${var_name}=${1}"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Invalid command line flag $1" >&2
|
||||
return 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
# Construct host string in the format of "host1:port1[ host2:port2[ ...]]"
|
||||
export http_listen_addresses=""
|
||||
export https_listen_addresses=""
|
||||
for host in "${hosts[@]}"; do
|
||||
http_listen="${host}:${http_port}"
|
||||
https_listen="${host}:${https_port}"
|
||||
[[ -z "${http_listen_addresses:-}" ]] && http_listen_addresses="$http_listen" || http_listen_addresses="${http_listen_addresses} ${http_listen}"
|
||||
[[ -z "${https_listen_addresses:-}" ]] && https_listen_addresses="$https_listen" || https_listen_addresses="${https_listen_addresses} ${https_listen}"
|
||||
done
|
||||
# Update configuration
|
||||
local -r http_vhost="${APACHE_VHOSTS_DIR}/${app}-vhost.conf"
|
||||
local -r https_vhost="${APACHE_VHOSTS_DIR}/${app}-https-vhost.conf"
|
||||
local -r disable_suffix=".disabled"
|
||||
# Helper function to avoid duplicating code
|
||||
update_common_vhost_config() {
|
||||
local -r vhost_file="${1:?missing virtual host}"
|
||||
# Update ServerName
|
||||
if ! is_empty_value "${server_name:-}"; then
|
||||
replace_in_file "$vhost_file" "^(\s*ServerName\s+).*" "\1${server_name}"
|
||||
fi
|
||||
# Update ServerAlias
|
||||
if [[ "${#server_aliases[@]}" -gt 0 ]]; then
|
||||
replace_in_file "$vhost_file" "^(\s*ServerAlias\s+).*" "\1${server_aliases[*]}"
|
||||
fi
|
||||
}
|
||||
# Disable and enable configuration files
|
||||
rename_conf_file() {
|
||||
local -r origin="$1"
|
||||
local -r destination="$2"
|
||||
if is_file_writable "$origin" && is_file_writable "$destination"; then
|
||||
warn "Could not rename virtual host file '${origin}' to '${destination}' due to lack of permissions."
|
||||
else
|
||||
mv "$origin" "$destination"
|
||||
fi
|
||||
}
|
||||
is_boolean_yes "$disable_http" && [[ -e "$http_vhost" ]] && rename_conf_file "${http_vhost}${disable_suffix}" "$http_vhost"
|
||||
is_boolean_yes "$disable_https" && [[ -e "$https_vhost" ]] && rename_conf_file "${https_vhost}${disable_suffix}" "$https_vhost"
|
||||
is_boolean_yes "$enable_http" && [[ -e "${http_vhost}${disable_suffix}" ]] && rename_conf_file "${http_vhost}${disable_suffix}" "$http_vhost"
|
||||
is_boolean_yes "$enable_https" && [[ -e "${https_vhost}${disable_suffix}" ]] && rename_conf_file "${https_vhost}${disable_suffix}" "$https_vhost"
|
||||
# Update only configuration files without the '.disabled' suffix
|
||||
if [[ -e "$http_vhost" ]]; then
|
||||
if is_file_writable "$http_vhost"; then
|
||||
update_common_vhost_config "$http_vhost"
|
||||
# Update vhost-specific config (listen port and addresses)
|
||||
replace_in_file "$http_vhost" "^Listen .*" "Listen ${http_port}"
|
||||
replace_in_file "$http_vhost" "^<VirtualHost\s.*>$" "<VirtualHost ${http_listen_addresses}>"
|
||||
else
|
||||
warn "The ${app} virtual host file '${http_vhost}' is not writable. Configurations based on environment variables will not be applied for this file."
|
||||
fi
|
||||
fi
|
||||
if [[ -e "$https_vhost" ]]; then
|
||||
if is_file_writable "$https_vhost"; then
|
||||
update_common_vhost_config "$https_vhost"
|
||||
# Update vhost-specific config (listen port and addresses)
|
||||
replace_in_file "$https_vhost" "^Listen .*" "Listen ${https_port}"
|
||||
replace_in_file "$https_vhost" "^<VirtualHost\s.*>$" "<VirtualHost ${https_listen_addresses}>"
|
||||
else
|
||||
warn "The ${app} virtual host file '${https_vhost}' is not writable. Configurations based on environment variables will not be applied for this file."
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Create a password file for basic authentication and restrict its permissions
|
||||
# Globals:
|
||||
# *
|
||||
# Arguments:
|
||||
# $1 - file
|
||||
# $2 - username
|
||||
# $3 - password
|
||||
# Returns:
|
||||
# true if the configuration was updated, false otherwise
|
||||
########################
|
||||
apache_create_password_file() {
|
||||
local -r file="${1:?missing file}"
|
||||
local -r username="${2:?missing username}"
|
||||
local -r password="${3:?missing password}"
|
||||
|
||||
"${APACHE_BIN_DIR}/htpasswd" -bc "$file" "$username" "$password"
|
||||
am_i_root && configure_permissions_ownership "$file" --file-mode "600" --user "$APACHE_DAEMON_USER" --group "$APACHE_DAEMON_GROUP"
|
||||
}
|
148
rootfs/opt/bitnami/scripts/libdokuwiki.sh
Normal file
148
rootfs/opt/bitnami/scripts/libdokuwiki.sh
Normal file
@ -0,0 +1,148 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
#
|
||||
# Bitnami DokuWiki library
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
# Load generic libraries
|
||||
. /opt/bitnami/scripts/libfs.sh
|
||||
. /opt/bitnami/scripts/libos.sh
|
||||
. /opt/bitnami/scripts/libvalidations.sh
|
||||
. /opt/bitnami/scripts/libpersistence.sh
|
||||
. /opt/bitnami/scripts/libphp.sh
|
||||
. /opt/bitnami/scripts/libwebserver.sh
|
||||
|
||||
########################
|
||||
# Validate settings in DOKUWIKI_* env vars
|
||||
# Globals:
|
||||
# DOKUWIKI_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# 0 if the validation succeeded, 1 otherwise
|
||||
#########################
|
||||
dokuwiki_validate() {
|
||||
debug "Validating settings in DOKUWIKI_* environment variables..."
|
||||
local error_code=0
|
||||
|
||||
# Auxiliary functions
|
||||
print_validation_error() {
|
||||
error "$1"
|
||||
error_code=1
|
||||
}
|
||||
|
||||
# Check that the web server is properly set up
|
||||
web_server_validate || print_validation_error "Web server validation failed"
|
||||
|
||||
return "$error_code"
|
||||
}
|
||||
|
||||
########################
|
||||
# Ensure DokuWiki is initialized
|
||||
# Globals:
|
||||
# DOKUWIKI_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
dokuwiki_initialize() {
|
||||
# Check if dokuwiki has already been initialized and persisted in a previous run
|
||||
local -r app_name="dokuwiki"
|
||||
if ! is_app_initialized "$app_name"; then
|
||||
# Ensure the DokuWikiWiki base directory exists and has proper permissions
|
||||
info "Configuring file permissions for DokuWiki"
|
||||
ensure_dir_exists "$DOKUWIKI_VOLUME_DIR"
|
||||
# Use daemon:root ownership for compatibility when running as a non-root user
|
||||
am_i_root && configure_permissions_ownership "$DOKUWIKI_VOLUME_DIR" -d "775" -f "664" -u "$WEB_SERVER_DAEMON_USER" -g "root"
|
||||
|
||||
if ! is_boolean_yes "${DOKUWIKI_SKIP_BOOTSTRAP:-}"; then
|
||||
web_server_start
|
||||
dokuwiki_pass_wizard
|
||||
web_server_stop
|
||||
dokuwiki_enable_friendly_urls
|
||||
fi
|
||||
|
||||
info "Persisting DokuWiki installation"
|
||||
persist_app "$app_name" "$DOKUWIKI_DATA_TO_PERSIST"
|
||||
else
|
||||
info "Restoring persisted DokuWiki installation"
|
||||
restore_persisted_app "$app_name" "$DOKUWIKI_DATA_TO_PERSIST"
|
||||
fi
|
||||
dokuwiki_configure_DOKU_INC
|
||||
|
||||
# Avoid exit code of previous commands to affect the result of this function
|
||||
true
|
||||
}
|
||||
|
||||
########################
|
||||
# Pass Dokiwiki wizzard
|
||||
# Globals:
|
||||
# DOKUWIKI_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
dokuwiki_pass_wizard() {
|
||||
local -r port="${APACHE_HTTP_PORT_NUMBER:-"$APACHE_DEFAULT_HTTP_PORT_NUMBER"}"
|
||||
local wizard_url curl_output
|
||||
local -a curl_opts curl_data_opts
|
||||
wizard_url="http://127.0.0.1:${port}/install.php"
|
||||
curl_opts=("--location" "--silent")
|
||||
curl_data_opts=(
|
||||
"--data-urlencode" "l=en"
|
||||
"--data-urlencode" "d[acl]=on"
|
||||
"--data-urlencode" "d[policy]=0"
|
||||
"--data-urlencode" "d[allowreg]=on"
|
||||
"--data-urlencode" "d[license]=cc-by-sa"
|
||||
"--data-urlencode" "d[pop]=on"
|
||||
"--data-urlencode" "submit="
|
||||
"--data-urlencode" "d[title]=${DOKUWIKI_WIKI_NAME}"
|
||||
"--data-urlencode" "d[superuser]=${DOKUWIKI_USERNAME}"
|
||||
"--data-urlencode" "d[fullname]=${DOKUWIKI_FULL_NAME}"
|
||||
"--data-urlencode" "d[email]=${DOKUWIKI_EMAIL}"
|
||||
"--data-urlencode" "d[password]=${DOKUWIKI_PASSWORD}"
|
||||
"--data-urlencode" "d[confirm]=${DOKUWIKI_PASSWORD}"
|
||||
)
|
||||
curl_output="$(curl "${curl_opts[@]}" "${curl_data_opts[@]}" "${wizard_url}" 2>&1)"
|
||||
if [[ "$curl_output" != *"The configuration was finished successfully."* ]]; then
|
||||
error "An error occurred while installing DokuWiki"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Enable DokuWiki friendly URLs
|
||||
# Globals:
|
||||
# DOKUWIKI_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
dokuwiki_enable_friendly_urls() {
|
||||
# Based on: https://www.dokuwiki.org/rewrite
|
||||
echo "\$conf['userewrite'] = 1; // URL rewriting is handled by the webserver" >>"${DOKUWIKI_BASE_DIR}/conf/local.php"
|
||||
}
|
||||
|
||||
########################
|
||||
# Configure DOKU_INC
|
||||
# Globals:
|
||||
# DOKUWIKI_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
dokuwiki_configure_DOKU_INC() {
|
||||
# Based on: https://github.com/bitnami/containers/pull/12535
|
||||
# Fix DOKU_INC, since we split application from state, DokuWiki's plugins and templates need to know where they live
|
||||
info "Fix DOKU_INC variable"
|
||||
auto_prepend_file="$DOKUWIKI_BASE_DIR/conf/auto_prepend.php"
|
||||
printf '<?php\ndefine("DOKU_INC", "%s/");\n' "$DOKUWIKI_BASE_DIR" >"$auto_prepend_file"
|
||||
php_conf_set auto_prepend_file "$auto_prepend_file"
|
||||
}
|
222
rootfs/opt/bitnami/scripts/libldapclient.sh
Normal file
222
rootfs/opt/bitnami/scripts/libldapclient.sh
Normal file
@ -0,0 +1,222 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
#
|
||||
# Bitnami LDAP library
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libfs.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
. /opt/bitnami/scripts/libos.sh
|
||||
|
||||
########################
|
||||
# Loads global variables used on LDAP configuration.
|
||||
# Globals:
|
||||
# LDAP_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# Series of exports to be used as 'eval' arguments
|
||||
#########################
|
||||
ldap_env() {
|
||||
cat <<"EOF"
|
||||
export LDAP_NSLCD_USER="nslcd"
|
||||
export LDAP_URI="${LDAP_URI:-}"
|
||||
export LDAP_BASE="${LDAP_BASE:-}"
|
||||
export LDAP_BIND_DN="${LDAP_BIND_DN:-}"
|
||||
export LDAP_BIND_PASSWORD="${LDAP_BIND_PASSWORD:-}"
|
||||
export LDAP_BASE_LOOKUP="${LDAP_BASE_LOOKUP:-}"
|
||||
export LDAP_NSS_INITGROUPS_IGNOREUSERS="${LDAP_NSS_INITGROUPS_IGNOREUSERS:-root,nslcd}"
|
||||
export LDAP_SCOPE="${LDAP_SCOPE:-}"
|
||||
export LDAP_TLS_REQCERT="${LDAP_TLS_REQCERT:-}"
|
||||
export LDAP_SEARCH_FILTER="${LDAP_SEARCH_FILTER:-}"
|
||||
export LDAP_SEARCH_MAP="${LDAP_SEARCH_MAP:-}"
|
||||
|
||||
EOF
|
||||
if [[ "$OS_FLAVOUR" =~ ^debian-.*$ ]]; then
|
||||
cat <<"EOF"
|
||||
export LDAP_NSLCD_GROUP="nslcd"
|
||||
EOF
|
||||
elif [[ "$OS_FLAVOUR" =~ ^(photon)-.*$ ]]; then
|
||||
cat <<"EOF"
|
||||
export LDAP_NSLCD_GROUP="ldap"
|
||||
EOF
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Return LDAP config file path depending on distro
|
||||
# Globals:
|
||||
# OS_FLAVOUR
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# (String) LDAP config file path
|
||||
#########################
|
||||
ldap_openldap_config_path() {
|
||||
local openldap_config
|
||||
case "$OS_FLAVOUR" in
|
||||
debian-* | ubuntu-*) openldap_config=/etc/ldap/ldap.conf ;;
|
||||
photon-* | redhatubi-*) openldap_config=/etc/openldap/ldap.conf ;;
|
||||
*) error "Unsupported OS flavor ${OS_FLAVOUR}" && exit 1 ;;
|
||||
esac
|
||||
echo "$openldap_config"
|
||||
}
|
||||
|
||||
########################
|
||||
# Configure LDAP permissions (to be used at postunpack leve).
|
||||
# Globals:
|
||||
# LDAP_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
ldap_configure_permissions() {
|
||||
ensure_dir_exists "/var/run/nslcd" && configure_permissions_ownership "/var/run/nslcd" -u "root" -g "root" -d "775"
|
||||
# The nslcd.conf file may not exist in distros like UBI, so we need to create it first
|
||||
touch "/etc/nslcd.conf"
|
||||
configure_permissions_ownership "/etc/nslcd.conf" -u "root" -g "root" -f "660"
|
||||
configure_permissions_ownership "$(ldap_openldap_config_path)" -u "root" -g "root" -f "660"
|
||||
}
|
||||
|
||||
########################
|
||||
# Create nslcd.conf file
|
||||
# Globals:
|
||||
# LDAP_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
ldap_create_nslcd_config() {
|
||||
if am_i_root; then
|
||||
chown "root:${LDAP_NSLCD_GROUP}" "/etc/nslcd.conf"
|
||||
chown -R "${LDAP_NSLCD_USER}:${LDAP_NSLCD_GROUP}" "/var/run/nslcd"
|
||||
cat >"/etc/nslcd.conf" <<EOF
|
||||
# The user and group nslcd should run as
|
||||
uid $LDAP_NSLCD_USER
|
||||
gid $LDAP_NSLCD_GROUP
|
||||
EOF
|
||||
else
|
||||
cat >"/etc/nslcd.conf" <<EOF
|
||||
# Comment out uid,gid to avoid attempting change user/group to run as
|
||||
# uid
|
||||
# gid
|
||||
EOF
|
||||
fi
|
||||
cat >>"/etc/nslcd.conf" <<EOF
|
||||
nss_initgroups_ignoreusers $LDAP_NSS_INITGROUPS_IGNOREUSERS
|
||||
|
||||
# The location at which the LDAP server(s) should be reachable.
|
||||
uri $LDAP_URI
|
||||
# The search base that will be used for all queries
|
||||
base $LDAP_BASE
|
||||
# The DN to bind with for normal lookups
|
||||
binddn $LDAP_BIND_DN
|
||||
bindpw $LDAP_BIND_PASSWORD
|
||||
EOF
|
||||
if [[ -n "${LDAP_BASE_LOOKUP}" ]]; then
|
||||
cat >>"/etc/nslcd.conf" <<EOF
|
||||
base passwd $LDAP_BASE_LOOKUP
|
||||
EOF
|
||||
fi
|
||||
if [[ -n "${LDAP_SCOPE}" ]]; then
|
||||
cat >>"/etc/nslcd.conf" <<EOF
|
||||
# The search scope
|
||||
scope $LDAP_SCOPE
|
||||
EOF
|
||||
fi
|
||||
if [[ -n "${LDAP_SEARCH_FILTER}" ]]; then
|
||||
cat >>"/etc/nslcd.conf" <<EOF
|
||||
# LDAP search filter to use for posix users
|
||||
filter passwd (objectClass=$LDAP_SEARCH_FILTER)
|
||||
EOF
|
||||
fi
|
||||
if [[ -n "${LDAP_SEARCH_MAP}" ]]; then
|
||||
cat >>"/etc/nslcd.conf" <<EOF
|
||||
# Used for lookup of custom attributes
|
||||
map passwd uid $LDAP_SEARCH_MAP
|
||||
EOF
|
||||
fi
|
||||
if [[ -n "${LDAP_TLS_REQCERT}" ]]; then
|
||||
cat >>"/etc/nslcd.conf" <<EOF
|
||||
# TLS options
|
||||
tls_reqcert $LDAP_TLS_REQCERT
|
||||
EOF
|
||||
fi
|
||||
if am_i_root; then
|
||||
chmod "600" "/etc/nslcd.conf"
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Create ldap.conf file
|
||||
# Globals:
|
||||
# LDAP_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
ldap_create_openldap_config() {
|
||||
cat >>"$(ldap_openldap_config_path)" <<EOF
|
||||
BASE $LDAP_BASE
|
||||
URI $LDAP_URI
|
||||
|
||||
TLS_CACERTDIR /etc/openldap/certs
|
||||
|
||||
# Turning this off breaks GSSAPI used with krb5 when rdns = false
|
||||
SASL_NOCANON on
|
||||
EOF
|
||||
}
|
||||
|
||||
########################
|
||||
# Create PAM configuration file
|
||||
# Globals:
|
||||
# LDAP_*
|
||||
# Arguments:
|
||||
# filename - PAM configuration file name
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
ldap_create_pam_config() {
|
||||
local filename="${1:?ip is missing}"
|
||||
cat >"/etc/pam.d/${filename}" <<EOF
|
||||
auth required pam_ldap.so try_first_pass debug
|
||||
account required pam_ldap.so debug
|
||||
EOF
|
||||
}
|
||||
|
||||
########################
|
||||
# Initialize LDAP services
|
||||
# Globals:
|
||||
# LDAP_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
ldap_initialize() {
|
||||
if [[ -n "${LDAP_URI}" && "${LDAP_BASE}" && "${LDAP_BIND_DN}" && "${LDAP_BIND_PASSWORD}" ]]; then
|
||||
info "Configuring LDAP connection"
|
||||
ldap_create_nslcd_config
|
||||
ldap_create_openldap_config
|
||||
else
|
||||
info "Missing LDAP settings. Skipping LDAP initialization"
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Start nslcd in background
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
ldap_start_nslcd_bg() {
|
||||
info "Starting nslcd in background"
|
||||
nslcd
|
||||
}
|
265
rootfs/opt/bitnami/scripts/libphp.sh
Normal file
265
rootfs/opt/bitnami/scripts/libphp.sh
Normal file
@ -0,0 +1,265 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
#
|
||||
# Bitnami PHP library
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
# Load Generic Libraries
|
||||
. /opt/bitnami/scripts/libfs.sh
|
||||
. /opt/bitnami/scripts/libfile.sh
|
||||
. /opt/bitnami/scripts/libservice.sh
|
||||
. /opt/bitnami/scripts/libvalidations.sh
|
||||
. /opt/bitnami/scripts/libwebserver.sh
|
||||
|
||||
########################
|
||||
# Add or modify an entry in the main PHP configuration file (php.ini)
|
||||
# Globals:
|
||||
# PHP_CONF_FILE
|
||||
# Arguments:
|
||||
# $1 - Key
|
||||
# $2 - Value
|
||||
# $3 - File to modify (default: $PHP_CONF_FILE)
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
php_conf_set() {
|
||||
local -r key="${1:?key missing}"
|
||||
local -r value="${2:?value missing}"
|
||||
local -r file="${3:-"$PHP_CONF_FILE"}"
|
||||
local pattern="^[; ]*${key}\s*=.*$"
|
||||
if [[ "$key" = "extension" || "$key" = "zend_extension" ]]; then
|
||||
# The "extension" property works a bit different for PHP, as there is one per module to be included, meaning it is additive unlike other configurations
|
||||
# Because of that, we first check if the extension was defined in the file to replace the proper entry
|
||||
pattern="^[; ]*${key}\s*=\s*[\"]?${value}(\.so)?[\"]?\s*$"
|
||||
fi
|
||||
local -r entry="${key} = ${value}"
|
||||
if is_file_writable "$file"; then
|
||||
# Not using the ini-file tool since it does not play well with php.ini
|
||||
if grep -q -E "$pattern" "$file"; then
|
||||
replace_in_file "$file" "$pattern" "$entry"
|
||||
else
|
||||
cat >> "$file" <<< "$entry"
|
||||
fi
|
||||
else
|
||||
warn "The PHP configuration file '${file}' is not writable. The '${key}' option will not be configured."
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Ensure PHP is initialized
|
||||
# Globals:
|
||||
# PHP_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
php_initialize() {
|
||||
# Configure PHP options based on the runtime environment
|
||||
info "Configuring PHP options"
|
||||
if ! is_dir_empty "$PHP_DEFAULT_CONF_DIR"; then
|
||||
# Copy default configuration to php configuration directory
|
||||
cp -nr "$PHP_DEFAULT_CONF_DIR"/. "$PHP_CONF_DIR"
|
||||
fi
|
||||
php_set_runtime_config "$PHP_CONF_FILE"
|
||||
|
||||
|
||||
# PHP-FPM configuration
|
||||
! is_empty_value "$PHP_FPM_LISTEN_ADDRESS" && info "Setting PHP-FPM listen option" && php_conf_set "listen" "$PHP_FPM_LISTEN_ADDRESS" "${PHP_CONF_DIR}/php-fpm.d/www.conf"
|
||||
|
||||
# Avoid exit code of previous commands to affect the result of this function
|
||||
true
|
||||
}
|
||||
|
||||
########################
|
||||
# Set PHP runtime options, based on user-provided environment variables
|
||||
# Globals:
|
||||
# PHP_*
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
php_set_runtime_config() {
|
||||
local -r conf_file="${1:?missing conf file}"
|
||||
|
||||
! is_empty_value "$PHP_DATE_TIMEZONE" && info "Setting PHP date.timezone option" && php_conf_set date.timezone "$PHP_DATE_TIMEZONE" "$conf_file"
|
||||
! is_empty_value "$PHP_ENABLE_OPCACHE" && info "Setting PHP opcache.enable option" && php_conf_set opcache.enable "$PHP_ENABLE_OPCACHE" "$conf_file"
|
||||
! is_empty_value "$PHP_EXPOSE_PHP" && info "Setting PHP expose_php option" && php_conf_set expose_php "$PHP_EXPOSE_PHP" "$conf_file"
|
||||
! is_empty_value "$PHP_MAX_EXECUTION_TIME" && info "Setting PHP max_execution_time option" && php_conf_set max_execution_time "$PHP_MAX_EXECUTION_TIME" "$conf_file"
|
||||
! is_empty_value "$PHP_MAX_INPUT_TIME" && info "Setting PHP max_input_time option" && php_conf_set max_input_time "$PHP_MAX_INPUT_TIME" "$conf_file"
|
||||
! is_empty_value "$PHP_MAX_INPUT_VARS" && info "Setting PHP max_input_vars option" && php_conf_set max_input_vars "$PHP_MAX_INPUT_VARS" "$conf_file"
|
||||
! is_empty_value "$PHP_MEMORY_LIMIT" && info "Setting PHP memory_limit option" && php_conf_set memory_limit "$PHP_MEMORY_LIMIT" "$conf_file"
|
||||
! is_empty_value "$PHP_POST_MAX_SIZE" && info "Setting PHP post_max_size option" && php_conf_set post_max_size "$PHP_POST_MAX_SIZE" "$conf_file"
|
||||
! is_empty_value "$PHP_UPLOAD_MAX_FILESIZE" && info "Setting PHP upload_max_filesize option" && php_conf_set upload_max_filesize "$PHP_UPLOAD_MAX_FILESIZE" "$conf_file"
|
||||
! is_empty_value "$PHP_OUTPUT_BUFFERING" && info "Setting PHP output_buffering option" && php_conf_set output_buffering "$PHP_OUTPUT_BUFFERING" "$conf_file"
|
||||
|
||||
true
|
||||
}
|
||||
|
||||
########################
|
||||
# Convert a yes/no value to a PHP boolean
|
||||
# Globals:
|
||||
# None
|
||||
# Arguments:
|
||||
# $1 - yes/no value
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
php_convert_to_boolean() {
|
||||
local -r value="${1:?missing value}"
|
||||
is_boolean_yes "$value" && echo "true" || echo "false"
|
||||
}
|
||||
|
||||
########################
|
||||
# Execute/run PHP code and print to stdout
|
||||
# Globals:
|
||||
# None
|
||||
# Stdin:
|
||||
# Code to execute
|
||||
# Arguments:
|
||||
# $1..$n - Input arguments to script
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
php_execute_print_output() {
|
||||
local php_cmd
|
||||
# Obtain the command specified via stdin
|
||||
php_cmd="$(</dev/stdin)"
|
||||
debug "Executing PHP code:\n${php_cmd}"
|
||||
php -- "$@" <<< "<?php ${php_cmd}"
|
||||
}
|
||||
|
||||
########################
|
||||
# Execute/run PHP code
|
||||
# Globals:
|
||||
# None
|
||||
# Stdin:
|
||||
# Code to execute
|
||||
# Arguments:
|
||||
# $1..$n - Input arguments to script
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
php_execute() {
|
||||
debug_execute php_execute_print_output "$@"
|
||||
}
|
||||
|
||||
########################
|
||||
# Execute/run PHP code and print to stdout
|
||||
# Globals:
|
||||
# None
|
||||
# Stdin:
|
||||
# Code to execute
|
||||
# Arguments:
|
||||
# $1..$n - Input arguments to script
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
php_execute_print_output() {
|
||||
local php_cmd
|
||||
# Obtain the command specified via stdin
|
||||
php_cmd="$(</dev/stdin)"
|
||||
debug "Executing PHP code:\n${php_cmd}"
|
||||
php -- "$@" <<< "<?php ${php_cmd}"
|
||||
}
|
||||
|
||||
########################
|
||||
# Execute/run PHP code
|
||||
# Globals:
|
||||
# None
|
||||
# Stdin:
|
||||
# Code to execute
|
||||
# Arguments:
|
||||
# $1..$n - Input arguments to script
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
php_execute() {
|
||||
debug_execute php_execute_print_output "$@"
|
||||
}
|
||||
|
||||
########################
|
||||
# Stop PHP-FPM
|
||||
# Globals:
|
||||
# PHP_FPM_PID_FILE
|
||||
# Arguments:
|
||||
# $1 - Signal (default: SIGTERM)
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
php_fpm_stop() {
|
||||
local -r signal="${1:-}"
|
||||
is_php_fpm_not_running && return
|
||||
stop_service_using_pid "$PHP_FPM_PID_FILE" "$signal"
|
||||
}
|
||||
|
||||
########################
|
||||
# Reload PHP-FPM configuration
|
||||
# Globals:
|
||||
# PHP_FPM_PID_FILE
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# None
|
||||
#########################
|
||||
php_fpm_reload() {
|
||||
php_fpm_stop "USR2"
|
||||
}
|
||||
|
||||
########################
|
||||
# Check if PHP-FPM is enabled for the current Bitnami installation
|
||||
# Globals:
|
||||
# None
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# true if PHP-FPM is enabled, false otherwise
|
||||
########################
|
||||
is_php_fpm_enabled() {
|
||||
if [[ "$(web_server_type)" = "apache" ]]; then
|
||||
# If mod_php is enabled, then PHP-FPM is cannot be
|
||||
if apachectl -M | grep -q -E "php[0-9]?_module"; then
|
||||
false
|
||||
else
|
||||
true
|
||||
fi
|
||||
else
|
||||
# Assume PHP-FPM is enabled with any other configuration (i.e. NGINX)
|
||||
true
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Check if PHP-FPM is running
|
||||
# Globals:
|
||||
# PHP_FPM_PID_FILE
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# true if PHP-FPM is running, false otherwise
|
||||
########################
|
||||
is_php_fpm_running() {
|
||||
local pid
|
||||
pid="$(get_pid_from_file "$PHP_FPM_PID_FILE")"
|
||||
if [[ -n "$pid" ]]; then
|
||||
is_service_running "$pid"
|
||||
else
|
||||
false
|
||||
fi
|
||||
}
|
||||
|
||||
########################
|
||||
# Check if PHP-FPM is running
|
||||
# Globals:
|
||||
# PHP_FPM_PID_FILE
|
||||
# Arguments:
|
||||
# None
|
||||
# Returns:
|
||||
# true PHP-FPM is not running, false otherwise
|
||||
########################
|
||||
is_php_fpm_not_running() {
|
||||
! is_php_fpm_running
|
||||
}
|
91
rootfs/opt/bitnami/scripts/php-env.sh
Normal file
91
rootfs/opt/bitnami/scripts/php-env.sh
Normal file
@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
#
|
||||
# Environment configuration for php
|
||||
|
||||
# The values for all environment variables will be set in the below order of precedence
|
||||
# 1. Custom environment variables defined below after Bitnami defaults
|
||||
# 2. Constants defined in this file (environment variables with no default), i.e. BITNAMI_ROOT_DIR
|
||||
# 3. Environment variables overridden via external files using *_FILE variables (see below)
|
||||
# 4. Environment variables set externally (i.e. current Bash context/Dockerfile/userdata)
|
||||
|
||||
# Load logging library
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
export BITNAMI_ROOT_DIR="/opt/bitnami"
|
||||
export BITNAMI_VOLUME_DIR="/bitnami"
|
||||
|
||||
# Logging configuration
|
||||
export MODULE="${MODULE:-php}"
|
||||
export BITNAMI_DEBUG="${BITNAMI_DEBUG:-false}"
|
||||
|
||||
# By setting an environment variable matching *_FILE to a file path, the prefixed environment
|
||||
# variable will be overridden with the value specified in that file
|
||||
php_env_vars=(
|
||||
PHP_FPM_LISTEN_ADDRESS
|
||||
PHP_DATE_TIMEZONE
|
||||
PHP_ENABLE_OPCACHE
|
||||
PHP_MAX_EXECUTION_TIME
|
||||
PHP_MAX_INPUT_TIME
|
||||
PHP_MAX_INPUT_VARS
|
||||
PHP_MEMORY_LIMIT
|
||||
PHP_POST_MAX_SIZE
|
||||
PHP_UPLOAD_MAX_FILESIZE
|
||||
PHP_OPCACHE_ENABLED
|
||||
)
|
||||
for env_var in "${php_env_vars[@]}"; do
|
||||
file_env_var="${env_var}_FILE"
|
||||
if [[ -n "${!file_env_var:-}" ]]; then
|
||||
if [[ -r "${!file_env_var:-}" ]]; then
|
||||
export "${env_var}=$(< "${!file_env_var}")"
|
||||
unset "${file_env_var}"
|
||||
else
|
||||
warn "Skipping export of '${env_var}'. '${!file_env_var:-}' is not readable."
|
||||
fi
|
||||
fi
|
||||
done
|
||||
unset php_env_vars
|
||||
|
||||
# Paths
|
||||
export PHP_BASE_DIR="${BITNAMI_ROOT_DIR}/php"
|
||||
export PHP_BIN_DIR="${PHP_BASE_DIR}/bin"
|
||||
export PHP_CONF_DIR="${PHP_BASE_DIR}/etc"
|
||||
export PHP_DEFAULT_CONF_DIR="${PHP_BASE_DIR}/etc.default"
|
||||
export PHP_TMP_DIR="${PHP_BASE_DIR}/var/run"
|
||||
export PHP_CONF_FILE="${PHP_CONF_DIR}/php.ini"
|
||||
|
||||
# PHP default build-time configuration
|
||||
export PHP_DEFAULT_OPCACHE_INTERNED_STRINGS_BUFFER="16" # only used at build time
|
||||
export PHP_DEFAULT_OPCACHE_MEMORY_CONSUMPTION="192" # only used at build time
|
||||
export PHP_DEFAULT_OPCACHE_FILE_CACHE="${PHP_TMP_DIR}/opcache_file" # only used at build time
|
||||
|
||||
# PHP-FPM configuration
|
||||
export PHP_FPM_SBIN_DIR="${PHP_BASE_DIR}/sbin"
|
||||
export PHP_FPM_LOGS_DIR="${PHP_BASE_DIR}/logs"
|
||||
export PHP_FPM_LOG_FILE="${PHP_FPM_LOGS_DIR}/php-fpm.log"
|
||||
export PHP_FPM_CONF_FILE="${PHP_CONF_DIR}/php-fpm.conf"
|
||||
export PHP_FPM_PID_FILE="${PHP_TMP_DIR}/php-fpm.pid"
|
||||
export PHP_FPM_DEFAULT_LISTEN_ADDRESS="${PHP_TMP_DIR}/www.sock" # only used at build time
|
||||
export PHP_FPM_LISTEN_ADDRESS="${PHP_FPM_LISTEN_ADDRESS:-}"
|
||||
export PATH="${PHP_FPM_SBIN_DIR}:${PHP_BIN_DIR}:${BITNAMI_ROOT_DIR}/common/bin:${PATH}"
|
||||
|
||||
# System users (when running with a privileged user)
|
||||
export PHP_FPM_DAEMON_USER="daemon"
|
||||
export PHP_FPM_DAEMON_GROUP="daemon"
|
||||
|
||||
# PHP configuration
|
||||
export PHP_DATE_TIMEZONE="${PHP_DATE_TIMEZONE:-}"
|
||||
PHP_ENABLE_OPCACHE="${PHP_ENABLE_OPCACHE:-"${PHP_OPCACHE_ENABLED:-}"}"
|
||||
export PHP_ENABLE_OPCACHE="${PHP_ENABLE_OPCACHE:-}"
|
||||
export PHP_EXPOSE_PHP="0"
|
||||
export PHP_MAX_EXECUTION_TIME="${PHP_MAX_EXECUTION_TIME:-}"
|
||||
export PHP_MAX_INPUT_TIME="${PHP_MAX_INPUT_TIME:-}"
|
||||
export PHP_MAX_INPUT_VARS="${PHP_MAX_INPUT_VARS:-}"
|
||||
export PHP_MEMORY_LIMIT="${PHP_MEMORY_LIMIT:-}"
|
||||
export PHP_POST_MAX_SIZE="${PHP_POST_MAX_SIZE:-}"
|
||||
export PHP_UPLOAD_MAX_FILESIZE="${PHP_UPLOAD_MAX_FILESIZE:-}"
|
||||
export PHP_OUTPUT_BUFFERING="8196"
|
||||
|
||||
# Custom environment variables may be defined below
|
47
rootfs/opt/bitnami/scripts/php/postunpack.sh
Executable file
47
rootfs/opt/bitnami/scripts/php/postunpack.sh
Executable file
@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libphp.sh
|
||||
. /opt/bitnami/scripts/libfs.sh
|
||||
|
||||
# Load PHP-FPM environment variables
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
# PHP OPcache optimizations
|
||||
php_conf_set "opcache.interned_strings_buffer" "$PHP_DEFAULT_OPCACHE_INTERNED_STRINGS_BUFFER"
|
||||
php_conf_set "opcache.memory_consumption" "$PHP_DEFAULT_OPCACHE_MEMORY_CONSUMPTION"
|
||||
php_conf_set "opcache.file_cache" "$PHP_DEFAULT_OPCACHE_FILE_CACHE"
|
||||
|
||||
# PHP-FPM configuration
|
||||
php_conf_set "listen" "$PHP_FPM_DEFAULT_LISTEN_ADDRESS" "${PHP_CONF_DIR}/php-fpm.d/www.conf"
|
||||
|
||||
# TMP dir configuration
|
||||
php_conf_set "upload_tmp_dir" "${PHP_BASE_DIR}/tmp"
|
||||
php_conf_set "session.save_path" "${PHP_TMP_DIR}/session"
|
||||
|
||||
# Ensure directories used by PHP-FPM exist and have proper ownership and permissions
|
||||
for dir in "$PHP_CONF_DIR" "$PHP_DEFAULT_CONF_DIR" "${PHP_BASE_DIR}/tmp" "$PHP_TMP_DIR" "$PHP_FPM_LOGS_DIR" "${PHP_TMP_DIR}/session"; do
|
||||
ensure_dir_exists "$dir"
|
||||
chmod -R g+rwX "$dir"
|
||||
done
|
||||
|
||||
info "Disabling PHP-FPM daemon user/group configuration"
|
||||
mv "${PHP_CONF_DIR}/common.conf" "${PHP_CONF_DIR}/common.conf.disabled"
|
||||
touch "${PHP_CONF_DIR}/common.conf"
|
||||
|
||||
# Log to stdout/stderr for easy debugging
|
||||
ln -sf "/dev/stdout" "$PHP_FPM_LOG_FILE"
|
||||
php_conf_set "error_log" "/dev/stderr"
|
||||
|
||||
# Copy all initially generated configuration files to the default directory
|
||||
# (this is to avoid breaking when entrypoint is being overridden)
|
||||
cp -r "$PHP_CONF_DIR"/* "$PHP_DEFAULT_CONF_DIR"
|
37
rootfs/opt/bitnami/scripts/php/reload.sh
Executable file
37
rootfs/opt/bitnami/scripts/php/reload.sh
Executable file
@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libphp.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
. /opt/bitnami/scripts/libwebserver.sh
|
||||
|
||||
# Load PHP-FPM environment
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
# Load web server environment and functions
|
||||
. "/opt/bitnami/scripts/$(web_server_type)-env.sh"
|
||||
|
||||
error_code=0
|
||||
|
||||
if is_php_fpm_enabled; then
|
||||
if is_php_fpm_not_running; then
|
||||
error "php-fpm is not running"
|
||||
error_code=1
|
||||
else
|
||||
info "** Reloading PHP-FPM configuration **"
|
||||
php_fpm_reload
|
||||
fi
|
||||
else
|
||||
web_server_reload
|
||||
fi
|
||||
|
||||
exit "$error_code"
|
19
rootfs/opt/bitnami/scripts/php/restart.sh
Executable file
19
rootfs/opt/bitnami/scripts/php/restart.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libphp.sh
|
||||
|
||||
# Load PHP-FPM environment variables
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
/opt/bitnami/scripts/php/stop.sh
|
||||
/opt/bitnami/scripts/php/start.sh
|
21
rootfs/opt/bitnami/scripts/php/run.sh
Executable file
21
rootfs/opt/bitnami/scripts/php/run.sh
Executable file
@ -0,0 +1,21 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libphp.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
# Load PHP-FPM environment variables
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
info "** Starting PHP-FPM **"
|
||||
declare -a args=("--pid" "$PHP_FPM_PID_FILE" "--fpm-config" "$PHP_FPM_CONF_FILE" "-c" "$PHP_CONF_DIR" "-F")
|
||||
exec "${PHP_FPM_SBIN_DIR}/php-fpm" "${args[@]}"
|
34
rootfs/opt/bitnami/scripts/php/setup.sh
Executable file
34
rootfs/opt/bitnami/scripts/php/setup.sh
Executable file
@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libphp.sh
|
||||
. /opt/bitnami/scripts/libfs.sh
|
||||
. /opt/bitnami/scripts/libos.sh
|
||||
|
||||
# Load PHP-FPM environment variables
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
# Ensure PHP-FPM daemon user exists and required folder belongs to this user when running as 'root'
|
||||
if am_i_root; then
|
||||
ensure_user_exists "$PHP_FPM_DAEMON_USER" --group "$PHP_FPM_DAEMON_GROUP"
|
||||
ensure_dir_exists "$PHP_TMP_DIR"
|
||||
chown -R "${PHP_FPM_DAEMON_USER}:${PHP_FPM_DAEMON_GROUP}" "$PHP_TMP_DIR"
|
||||
# Enable daemon configuration
|
||||
if [[ ! -f "${PHP_CONF_DIR}/common.conf" ]]; then
|
||||
cp "${PHP_CONF_DIR}/common.conf.disabled" "${PHP_CONF_DIR}/common.conf"
|
||||
fi
|
||||
fi
|
||||
|
||||
php_initialize
|
||||
|
||||
# Fix logging issue when running as root
|
||||
! am_i_root || chmod o+w "$(readlink /dev/stdout)" "$(readlink /dev/stderr)"
|
34
rootfs/opt/bitnami/scripts/php/start.sh
Executable file
34
rootfs/opt/bitnami/scripts/php/start.sh
Executable file
@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libphp.sh
|
||||
. /opt/bitnami/scripts/libos.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
# Load PHP-FPM environment variables
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
error_code=0
|
||||
|
||||
if is_php_fpm_not_running; then
|
||||
nohup /opt/bitnami/scripts/php/run.sh >/dev/null 2>&1 &
|
||||
if ! retry_while "is_php_fpm_running"; then
|
||||
error "php-fpm did not start"
|
||||
error_code=1
|
||||
else
|
||||
info "php-fpm started"
|
||||
fi
|
||||
else
|
||||
info "php-fpm is already running"
|
||||
fi
|
||||
|
||||
exit "$error_code"
|
23
rootfs/opt/bitnami/scripts/php/status.sh
Executable file
23
rootfs/opt/bitnami/scripts/php/status.sh
Executable file
@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libphp.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
# Load PHP-FPM environment variables
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
if is_php_fpm_running; then
|
||||
info "php-fpm is already running"
|
||||
else
|
||||
info "php-fpm is not running"
|
||||
fi
|
34
rootfs/opt/bitnami/scripts/php/stop.sh
Executable file
34
rootfs/opt/bitnami/scripts/php/stop.sh
Executable file
@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries
|
||||
. /opt/bitnami/scripts/libphp.sh
|
||||
. /opt/bitnami/scripts/libos.sh
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
|
||||
# Load PHP-FPM environment variables
|
||||
. /opt/bitnami/scripts/php-env.sh
|
||||
|
||||
error_code=0
|
||||
|
||||
if is_php_fpm_running; then
|
||||
BITNAMI_QUIET=1 php_fpm_stop
|
||||
if ! retry_while "is_php_fpm_not_running"; then
|
||||
error "php-fpm could not be stopped"
|
||||
error_code=1
|
||||
else
|
||||
info "php-fpm stopped"
|
||||
fi
|
||||
else
|
||||
info "php-fpm is not running"
|
||||
fi
|
||||
|
||||
exit "$error_code"
|
33
rootfs/post-init.d/php.sh
Executable file
33
rootfs/post-init.d/php.sh
Executable file
@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
#
|
||||
# Executes custom PHP init scripts
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries with logging functions
|
||||
if [[ -f /opt/bitnami/base/functions ]]; then
|
||||
. /opt/bitnami/base/functions
|
||||
else
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
fi
|
||||
|
||||
# Loop through all input files passed via stdin
|
||||
read -r -a custom_init_scripts <<< "$@"
|
||||
failure=0
|
||||
if [[ "${#custom_init_scripts[@]}" -gt 0 ]]; then
|
||||
for custom_init_script in "${custom_init_scripts[@]}"; do
|
||||
[[ "$custom_init_script" != *".php" ]] && continue
|
||||
info "Executing ${custom_init_script} with PHP interpreter"
|
||||
php "$custom_init_script" || failure=1
|
||||
[[ "$failure" -ne 0 ]] && error "Failed to execute ${custom_init_script}"
|
||||
done
|
||||
fi
|
||||
|
||||
exit "$failure"
|
38
rootfs/post-init.d/shell.sh
Executable file
38
rootfs/post-init.d/shell.sh
Executable file
@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
#
|
||||
# Executes custom Bash init scripts
|
||||
|
||||
# shellcheck disable=SC1090,SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Load libraries with logging functions
|
||||
if [[ -f /opt/bitnami/base/functions ]]; then
|
||||
. /opt/bitnami/base/functions
|
||||
else
|
||||
. /opt/bitnami/scripts/liblog.sh
|
||||
fi
|
||||
|
||||
# Loop through all input files passed via stdin
|
||||
read -r -a custom_init_scripts <<< "$@"
|
||||
failure=0
|
||||
if [[ "${#custom_init_scripts[@]}" -gt 0 ]]; then
|
||||
for custom_init_script in "${custom_init_scripts[@]}"; do
|
||||
[[ "$custom_init_script" != *".sh" ]] && continue
|
||||
if [[ -x "$custom_init_script" ]]; then
|
||||
info "Executing ${custom_init_script}"
|
||||
"$custom_init_script" || failure="1"
|
||||
else
|
||||
info "Sourcing ${custom_init_script} as it is not executable by the current user, any error may cause initialization to fail"
|
||||
. "$custom_init_script"
|
||||
fi
|
||||
[[ "$failure" -ne 0 ]] && error "Failed to execute ${custom_init_script}"
|
||||
done
|
||||
fi
|
||||
|
||||
exit "$failure"
|
25
rootfs/post-init.sh
Executable file
25
rootfs/post-init.sh
Executable file
@ -0,0 +1,25 @@
|
||||
#!/bin/bash
|
||||
# Copyright Broadcom, Inc. All Rights Reserved.
|
||||
# SPDX-License-Identifier: APACHE-2.0
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
# set -o xtrace # Uncomment this line for debugging purposes
|
||||
|
||||
# Only execute init scripts once
|
||||
if [[ ! -f "/bitnami/dokuwiki/.user_scripts_initialized" && -d "/docker-entrypoint-init.d" ]]; then
|
||||
read -r -a init_scripts <<< "$(find "/docker-entrypoint-init.d" -type f -print0 | sort -z | xargs -0)"
|
||||
if [[ "${#init_scripts[@]}" -gt 0 ]] && [[ ! -f "/bitnami/dokuwiki/.user_scripts_initialized" ]]; then
|
||||
mkdir -p "/bitnami/dokuwiki"
|
||||
for init_script in "${init_scripts[@]}"; do
|
||||
for init_script_type_handler in /post-init.d/*.sh; do
|
||||
"$init_script_type_handler" "$init_script"
|
||||
done
|
||||
done
|
||||
fi
|
||||
|
||||
touch "/bitnami/dokuwiki/.user_scripts_initialized"
|
||||
fi
|
Reference in New Issue
Block a user