149 lines
4.6 KiB
Bash
149 lines
4.6 KiB
Bash
#!/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"
|
|
}
|