1
0
mirror of https://github.com/oupala/apaxy.git synced 2025-08-18 07:11:18 +02:00

refactor: large rewrite of install script

This commit is contained in:
oupala
2019-05-09 15:58:29 +02:00
parent 05ba73c6a0
commit 3f98b279fe
2 changed files with 218 additions and 88 deletions

229
apaxy-configure.sh Executable file → Normal file
View File

@@ -1,69 +1,200 @@
#!/bin/bash
echo "Apaxy Configurator - by Jordan Bancino"
echo "Checking configuration..."
#
# apaxy configurator
# v0.2
# configure apaxy according to your local paths and configuration
# author : Jordan Bancino and Ploc
# contact : jordan [@] bancino.net
# licence : GPLv3
CONFIG="apaxy.config"
# 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'
if [ -f "$CONFIG" ]; then
. "$CONFIG"
else
echo "Apaxy configuration not found! Please restore or create the configuration file: $CONFIG"
exit 1
fi
# default config
defaultLogLevel=2
defaultLogFile="$(basename "${0}" .sh).log"
defaultApacheWebRootPath="/var/www/html"
defaultInstallWebPath=""
if [ -v INSTALL_DIRECTORY ] && [ -v WEB_ROOT ]; then
echo "- Configuring Apaxy for use in directory: $INSTALL_DIRECTORY (Web root: $WEB_ROOT)"
mkdir -p "$WEB_ROOT$INSTALL_DIRECTORY"
if [ ! -w "$WEB_ROOT$INSTALL_DIRECTORY" ] || [ ! -d "$WEB_ROOT$INSTALL_DIRECTORY" ]; then
echo "Directory does not exist or is not writable by the current user: $WEB_ROOT$INSTALL_DIRECTORY"
exit 1
# functions
###
# display help
##
displayHelp () {
cat <<EOF
$(basename "${0}") configure apaxy according to your local paths and configuration.
It can either configure apaxy according to your local paths and configuration bu it can also install the required files in your http server path.
EOF
displayUsage
cat <<EOF
Available optionnal parameters are :
-h - display help
-d - set path/to/dir/ directory where apaxy will be installed on the filesystem
-w - set path/to/dir/ directory where apaxy will be available on the httpd server
-ll - set the log level
-lf - set the log file
EOF
}
###
# display usage
##
displayUsage () {
cat <<EOF
usage - $(basename "${0}") [-h] [-d path/to/dir/] [-w path/to/dir/] [-ll logLevel] [-lf logFile]
EOF
}
###
# log a message
#
# @global $logLevel the log level
# @global $logFile the log file
# @param $1 the log level of the message
# @param $2 the log message
##
log () {
local paramLogLevel="${1}"
local paramLogMessage="${2}"
# shellcheck disable=SC2155
local logDate="$(date +%H:%M:%S)"
local logMessage="[${logDate}] ${paramLogMessage}"
if [ "${paramLogLevel}" -le "${logLevel}" ]
then
echo "${logMessage}"
fi
if [ ! -z "${logFile}" ]
then
echo "${logMessage}" >> "${logFile}"
fi
}
# getting parameters value from config file (can be overloaded by cli values)
workingDirectory=$(dirname "$0")
if [ -f "${workingDirectory}/apaxy.config" ]; then
# shellcheck source=apaxy.config
source "${workingDirectory}/apaxy.config"
else
echo "No directory specified! Please define the INSTALL_DIRECTORY and WEB_ROOT variables in $CONFIG"
log 1 "ERROR - apaxy configuration not found, please restore or create the configuration file apaxy.config"
exit 1
fi
echo "Copying files to web root..."
cp -r . "$WEB_ROOT$INSTALL_DIRECTORY"
cd "$WEB_ROOT$INSTALL_DIRECTORY"
# getting parameters value from cli (can overload config file values)
while [ "$#" -ge 1 ] ; do
case "${1}" in
-h|--help) # display help
displayHelp
exit 0
;;
-d) # set path/to/dir/ directory where apaxy will be available on the httpd server
shiftStep=2
apacheWebRootPath="${2}"
;;
-w) # set path/to/dir/ directory where apaxy will be installed on the filesystem
shiftStep=2
installWebPath="${2}"
;;
-ll) # set the log level
shiftStep=2
logLevel="${2}"
;;
-lf) # set the log file
shiftStep=2
logFile="${2}"
;;
*)
displayUsage
exit 2
;;
esac
if [ -v HTACCESS ]; then
if [ -f "$HTACCESS" ]; then
echo "- Using template: $HTACCESS to generate configuration"
if [ "$#" -ge "${shiftStep}" ]
then
shift "${shiftStep}"
else
echo "Configuration template does not exist! Please specify an existing configuration template in $CONFIG"
exit 1
log 1 "ERROR - invalid number of arguments"
exit 3
fi
done
# setting parameters value
if [ -z "${apacheWebRootPath}" ]
then
apacheWebRootPath="${defaultApacheWebRootPath}"
fi
if [ -z "${installWebPath}" ]
then
installWebPath="${defaultInstallWebPath}"
fi
if [ -n "${apacheWebRootPath}" ] && [ -z "${installWebPath}" ]
then
installDir="${apacheWebRootPath}"
else
echo "No configuration template specified. Please define the HTACCESS variable in $CONFIG"
exit 1
installDir="${apacheWebRootPath}${installWebPath}"
fi
if [ ! -v TEMPLATE_VAR_FOLDERNAME ]; then
echo "No foldername variable defined. Please define the TEMPLATE_VAR_FOLDERNAME variable in $CONFIG"
exit
if [ -z "${logLevel}" ]
then
logLevel="${defaultLogLevel}"
fi
echo "Configuring..."
echo "- Generating .htaccess..."
sed "s|$TEMPLATE_VAR_FOLDERNAME|$INSTALL_DIRECTORY/apaxy/|g" <"$HTACCESS" >"$HTACCESS_OUTPUT"
if [ -z "${logFile}" ]
then
logFile="${workingDirectory}/${defaultLogFile}"
fi
echo "- Setting variables in documents..."
# find all the HTML files and replace the variable in them.
# This will automatically take care of the error pages, headers and
# footers.
FILES=$(find -name "*.html")
# 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
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"
cp -r 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"
# 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|$TEMPLATE_VAR_FOLDERNAME|$INSTALL_DIRECTORY/apaxy/|g" "$file"
done <<< "$FILES"
sed -i "s|{FOLDERNAME}|${installWebPath}|g" "${file}"
done <<< "${files}"
if [ -v THEME_HTACCESS_IN ] && [ -v THEME_HTACCESS_OUT ]; then
echo "- Activating theme configuration..."
mv "$THEME_HTACCESS_IN" "$THEME_HTACCESS_OUT"
fi
# TODO:
# - Implement any other options we want here
echo "Done."
exit 0
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}"

View File

@@ -1,45 +1,44 @@
# Apaxy Configuration - by Jordan Bancino
# (C) 2018 Jordan Bancino <jordan@bancin0.com>
#!/bin/bash
#
# Use "apaxy-configure.sh" to configure Apaxy after adjusting the needed values.
# apaxy configurator
# v0.2
# use "apaxy-configure.sh" to configure apaxy after adjusting the needed values in this file
# author : Jordan Bancino and Ploc
# contact : jordan [@] bancino.net
# licence : GPLv3
# default log level on the console (the lower the number is, the less verbose it is)
#defaultLogLevel=2
# all log messages are written to log file
#defaultLogFile="apaxy.log"
# the apache web root path where the server serves documents
#
# NOTICE: Directories can be absolute or relative, but make sure they start with either "/", "../", or "./",
# and DO NOT leave a trailing slash.
# Good: "/var/www/html" <- Starts with "/", does not have trailing slash
# Bad : "var/www/html" <- Does not start with "/", "./", or "../"
# Good: "./var/www/html" <- Starts with "./", does not have trailing slash
# Bad : "/var/www/html/" <- Has trailing slash
# default for apache is /var/www/html
#
# GENERAL CONFIGURATION
# note that path should be absolute, so make sure it starts with a "/"
# and DO NOT leave a trailing slash
#
# The directory to configure Apaxy for use in. This is relative to the web server root, and contains the "theme" folder.
# For instance: "http://website.com/share" would make this value "/share", where "/share/apaxy/theme" is the theme directory
INSTALL_DIRECTORY="/dev/apaxy-deploy"
# The web root where the server serves documents. Default for Apache is /var/www/html
WEB_ROOT="/var/www/html"
# The output .htaccess file.
# Place the file in the root of the directory in which you are applying apaxy.
HTACCESS_OUTPUT="$WEB_ROOT$INSTALL_DIRECTORY/.htaccess"
# good: "/var/www/html" <- starts with "/", does not have trailing "/"
# bad : "var/www/html/" <- does not start with "/", have a trailing "/"
#
# ADVANCED CONFIGURATION
# Normal users: Do not modify below this line.
apacheWebRootPath="/var/www/html"
# the directory where apaxy will be used (this is relative to the web server root, and contains the "theme" folder)
#
# The htaccess template to run the configuration on.
# Do not change this value for a regular installation of Apaxy.
HTACCESS="apaxy/htaccess.txt"
# The theme config for Apaxy. IN will be renamed to OUT.
# There should be no reason to change this in most cases.
THEME_HTACCESS_IN="apaxy/theme/htaccess.txt"
THEME_HTACCESS_OUT="apaxy/theme/.htaccess"
# The variable in the htaccess and footer templates.
# Do not change this value unless you use a different template with a different variable.
TEMPLATE_VAR_FOLDERNAME="/{FOLDERNAME}/"
# for instance: "http://example.org/share" would make this value "/share", where "/share/theme" is the theme directory
#
# note that path should be absolute, so make sure it starts with a "/"
# and DO NOT leave a trailing slash
#
# good: "/share" <- starts with "/", does not have trailing "/"
# bad : "share/" <- does not start with "/", has a trailing "/"
#
# by default, apaxy is configured to be installed at the root level of your web server
#
# if you want apaxy to be installed anywhere else, you can set it in the installWebPath variable
#
# installWebPath="/share"
#
installWebPath=""