#!/bin/bash # # apaxy configurator # v0.2 # configure apaxy according to your local paths and configuration # author : Jordan Bancino and Ploc # contact : jordan [@] bancino.net # licence : GPLv3 # enabling strict mode # -e - exit immediatly on error (disable with "+e" when an error can happens, then enable it again with "-e") # -u - undefined variables are forbidden (enable this option after getting parameters from $1 $2...) see below # -o pipefail - find error return code inside piped commands # IFS - set strong internal field separator set -eo pipefail IFS=$'\n\t' # default config defaultConfigFile="apaxy.config" defaultApacheWebRootPath="/var/www/html" defaultInstallWebPath="" defaultEnableGallery=false defaultHeaderMessage="" defaultFooterMessage="" defaultLogLevel=2 defaultLogFile="$(basename "${0}" .sh).log" workingDirectory="$(dirname "${0}")" logLevel="${defaultLogLevel}" # functions ### # display help ## displayHelp () { cat <> "${logFile}" fi } # getting parameters value from cli (can overload config file values) while [ "$#" -ge 1 ] ; do case "${1}" in -h|--help) # display help displayHelp exit 0 ;; -c) # set path/to/apaxy.config file that contains all configuration shiftStep=2 paramConfigFile="${2}" ;; -d) # set path/to/dir/ directory where apaxy will be available on the httpd server shiftStep=2 paramApacheWebRootPath="${2}" ;; -w) # set path/to/dir/ directory where apaxy will be installed on the filesystem shiftStep=2 paramInstallWebPath="${2}" ;; -g) # enable or disable gallery feature shiftStep=2 paramEnableGallery="${2}" ;; -hm) # set the default header message displayed on top of each page shiftStep=2 paramHeaderMessage="${2}" ;; -fm) # set the default footer message displayed on bottom of each page shiftStep=2 paramFooterMessage="${2}" ;; -ll) # set the log level shiftStep=2 paramLogLevel="${2}" ;; -lf) # set the log file shiftStep=2 paramLogFile="${2}" ;; *) displayUsage exit 2 ;; esac if [ "$#" -ge "${shiftStep}" ] then shift "${shiftStep}" else log 1 "ERROR - invalid number of arguments" exit 3 fi done # setting parameters value if [ -r "${paramConfigFile}" ] then # getting parameters value from config file (config file name set by cli values) configFile="${paramConfigFile}" # shellcheck source=apaxy.config source "${configFile}" elif [ -r "${workingDirectory}/${defaultConfigFile}" ] then # getting parameters value from config file (config file name is default) configFile="${workingDirectory}/${defaultConfigFile}" # shellcheck source=apaxy.config source "${configFile}" else log 1 "apaxy configuration not found, using internal config from script shell itself" configFile=null fi if [ -n "${paramApacheWebRootPath}" ] then apacheWebRootPath="${paramApacheWebRootPath}" elif [ -z "${apacheWebRootPath}" ] then apacheWebRootPath="${defaultApacheWebRootPath}" fi if [ -n "${paramInstallWebPath}" ] then installWebPath="${paramInstallWebPath}" elif [ -z "${installWebPath}" ] then installWebPath="${defaultInstallWebPath}" fi if [ -n "${paramApacheWebRootPath}" ] then apacheWebRootPath="${paramApacheWebRootPath}" elif [ -z "${apacheWebRootPath}" ] then apacheWebRootPath="${defaultApacheWebRootPath}" fi if [ -n "${paramInstallWebPath}" ] then installWebPath="${paramInstallWebPath}" elif [ -z "${installWebPath}" ] then installWebPath="${defaultInstallWebPath}" fi installDir="${apacheWebRootPath}${installWebPath}" if [ -n "${paramEnableGallery}" ] then enableGallery="${paramEnableGallery}" elif [ -z "${enableGallery}" ] then enableGallery="${defaultEnableGallery}" fi if [ -n "${paramHeaderMessage}" ] then headerMessage="${paramHeaderMessage}" elif [ -z "${headerMessage}" ] then headerMessage="${defaultHeaderMessage}" fi if [ -n "${paramFooterMessage}" ] then footerMessage="${paramFooterMessage}" elif [ -z "${footerMessage}" ] then footerMessage="${defaultFooterMessage}" fi if [ -n "${paramLogLevel}" ] then logLevel="${paramLogLevel}" elif [ -z "${logLevel}" ] then logLevel="${defaultLogLevel}" fi if [ -n "${paramLogFile}" ] then logFile="${paramLogFile}" elif [ -z "${logFile}" ] then logFile="${workingDirectory}/${defaultLogFile}" fi # enabling strict mode # -u - undefined variables are forbidden (enable this option after getting parameters from $1 $2...) set -u # checking parameters value if [ ! -d "$(dirname "${logFile}")" ] then log 1 "ERROR - $(dirname "${logFile}") does not exist" exit 4 fi # script # output current config log 3 "- current config" log 3 " configFile: ${configFile}" log 3 " apacheWebRootPath: ${apacheWebRootPath}" log 3 " installWebPath: ${installWebPath}" log 3 " installDir: ${installDir}" log 3 " enableGallery: ${enableGallery}" log 3 " headerMessage: ${headerMessage}" log 3 " footerMessage: ${footerMessage}" log 3 " logLevel: ${logLevel}" log 3 " logFile: ${logFile}" log 1 "- creating install directory ${installDir}" mkdir -p "${installDir}" if [ ! -d "${installDir}" ] || [ ! -w "${installDir}" ]; then log 1 "ERROR - install directory ${installDir} does not exist or is not writable by the current user" exit 5 fi log 1 "- copying apaxy in install directory" # we want globbing # shellcheck disable=SC2086 cp -r ${workingDirectory}/apaxy/* "${installDir}/" log 1 "- configuring apaxy in install directory" log 2 "- generating htaccess" sed "s|{FOLDERNAME}|${installWebPath}|g" < "${installDir}/htaccess.txt" > "${installDir}/.htaccess" rm "${installDir}/htaccess.txt" if [ "${enableGallery}" = "true" ] then log 1 "- enabling gallery feature" mv -f "${installDir}/theme/header-lightgallery.html" "${installDir}/theme/header.html" mv -f "${installDir}/theme/footer-lightgallery.html" "${installDir}/theme/footer.html" else log 2 "- gallery feature not enabled" fi # find all the html files and replace the variable in them # this will automatically take care of the error pages, headers and footers log 2 "- setting path in html files" files=$(find ${installDir} -name "*.html") while read -r file; do sed -i "s|{FOLDERNAME}|${installWebPath}|g" "${file}" sed -i "s|{HEADER-MESSAGE}|${headerMessage}|g" "${file}" sed -i "s|{FOOTER-MESSAGE}|${footerMessage}|g" "${file}" done <<< "${files}" log 2 "- syncing filesystem" sync log 1 "- filesystem has been synced and is now consistent" log 1 "- apaxy has been successfully configured and installed in ${installDir}"