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"
 | 
			
		||||
		Reference in New Issue
	
	Block a user