apache2/handle_domain_on_webserver.sh

2535 lines
82 KiB
Bash
Executable File

#!/usr/bin/env bash
# -------------
# - TODO:
# - - Support postgres databases
# - - Deleting maildomain on mailserver
# -------------
working_dir="$(dirname $(realpath $0))"
conf_file="${working_dir}/conf/handle_domain_on_webserver.conf"
log_dir="${working_dir}/log"
tmp_log_file="$(mktemp)"
backup_date="$(date +%Y-%m-%d-%H%M)"
delete_mode=false
only_show=false
only_check=false
print_warnings=false
# -------------
# - Variable settings
# -------------
# -------------
# --- Some functions
# -------------
clean_up() {
# Perform program exit housekeeping
rm -f $tmp_log_file
exit $1
}
# - Check if a given array (parameter 2) contains a given string (parameter 1)
# -
containsElement () {
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
return 1
}
stringContain() {
[ -z "${2##*$1*}" ] && [ -z "$1" -o -n "$2" ]
}
# - Remove leading/trailling whitespaces
# -
trim() {
local var="$*"
var="${var#"${var%%[![:space:]]*}"}" # remove leading whitespace characters
var="${var%"${var##*[![:space:]]}"}" # remove trailing whitespace characters
echo -n "$var"
}
echononl(){
echo X\\c > /tmp/shprompt$$
if [ `wc -c /tmp/shprompt$$ | awk '{print $1}'` -eq 1 ]; then
echo -e -n "$*\\c" 1>&2
else
echo -e -n "$*" 1>&2
fi
rm /tmp/shprompt$$
}
fatal(){
echo ""
if [[ -n "$*" ]] ; then
echo -e " [ \033[31m\033[1mFatal\033[m ]: $*"
echo ""
fi
echo -e " \033[31m\033[1mScript will be interrupted.\033[m\033[m"
echo ""
clean_up 1
}
error(){
echo ""
echo -e " [ \033[31m\033[1mFehler\033[m ]: $*"
echo ""
}
warn (){
echo ""
echo -e " [ \033[33m\033[1mWarning\033[m ]: $*"
echo ""
}
info (){
echo ""
echo -e " [ \033[32m\033[1mInfo\033[m ]: $*"
echo ""
}
echo_done() {
echo -e "\033[80G[ \033[32mdone\033[m ]"
}
echo_ok() {
echo -e "\033[80G[ \033[32mok\033[m ]"
}
echo_warning() {
echo -e "\033[80G[ \033[33m\033[1mwarn\033[m ]"
}
echo_failed(){
echo -e "\033[80G[ \033[1;31mfailed\033[m ]"
}
echo_skipped() {
echo -e "\033[80G[ \033[37mskipped\033[m ]"
}
trap clean_up SIGHUP SIGINT SIGTERM
# -------------
# - Some checks
# -------------
if [[ "$(basename $0)" = "show_domain_on_webserver.sh" ]] ; then
only_show=true
elif [[ "$(basename $0)" = "check_domain_on_webserver.sh" ]] ; then
only_check=true
print_warnings=true
elif [[ "$(basename $0)" = "delete_domain_related_configurations.sh" ]] ; then
delete_mode=true
print_warnings=true
else
fatal "Run one of the related scripts \033[1mshow_domain_on_webserver.sh\033[m,\n \033[1mcheck_domain_on_webserver.sh\\033[m or \033[1mdelete_domain_related_configurations.sh\033[m."
fi
# - Is 'systemd' supported on this system
# -
if [ "X`which systemd`" = "X" ]; then
systemd_exists=false
else
systemd_exists=true
fi
[[ -n "$*" ]] && _domains="$*"
# -
# - grep -i -d skip -h -E "^\s*include\s+.*\.conf" $_apache_vhost_base_dir | awk '{print$2}'
# -
# - Try to find apache vhost configuration directory
# -
if [[ -d "/usr/local/apache2/conf/vhosts" ]]; then
if [[ -d "/usr/local/apache2/conf/vhosts/0" ]]; then
_apache_vhost_dir="/usr/local/apache2/conf/vhosts/0"
else
_apache_vhost_dir="/usr/local/apache2/conf/vhosts"
fi
elif [[ -d "/etc/apache2/sites-enabled" ]]; then
_apache_vhost_dir="/etc/apache2/sites-enabled"
fi
# - Try to find apache websites base directory
# -
if [[ -d "/var/www/html/projekte" ]]; then
_apache_web_base_dir="/var/www/html/projekte"
elif [[ -d "/var/www/html" ]]; then
_apache_web_base_dir="/var/www/html"
elif [[ -d "/var/www" ]]; then
_apache_web_base_dir="/var/www"
fi
clear
echo ""
echo -e "\033[32mRunning script \033[1m"$(basename $0)"\033[m .."
echo ""
# -------------
# - Load Settings from configuration file handle_domain_on_webserver.conf
# -------------
if $delete_mode ; then
echononl " Loading configuration settings from $(basename ${conf_file}).."
if [[ -f "$conf_file" ]]; then
source "$conf_file" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
fatal "$(cat $tmp_log_file)"
fi
else
echo_failed
fatal "Configuration file \033[1m$conf_file\033[m not found!"
fi
[[ -n "$DNS_MASTER_SERVER" ]] || fatal "Master Nameserver ist not set (Parameter DNS_MASTER_SERVER)!"
include_slave_dns=true
[[ -n "$DNS_SLAVE_SERVER" ]] || include_slave_dns=false
[[ -n "$DNS_SSH_USER" ]] || DNS_SSH_USER="manage-bind"
[[ -n "$DNS_SSH_PORT" ]] || DNS_SSH_PORT="22"
[[ -n "$DNS_SSH_KEY" ]] || DNS_SSH_KEY="/root/.ssh/id_rsa-dns1"
[[ -n "$SCRIPT_get_domain_by_hostname" ]] || SCRIPT_get_domain_by_hostname="/root/bin/bind/bind_get_domain_by_hostname.sh"
[[ -n "$SCRIPT_remove_master_domain" ]] || SCRIPT_remove_master_domain="/root/bin/bind/bind_remove_domain_on_master.sh"
[[ -n "$SCRIPT_remove_slave_domain" ]] || SCRIPT_remove_slave_domain="/root/bin/bind/bind_remove_domain_on_slave.sh"
[[ -n "$MYSQL_CREDENTIAL_ARGS" ]] || MYSQL_CREDENTIAL_ARGS="-u root -S /run/mysqld/mysqld.sock"
fi
# -------------
# - Some prior checks
# -------------
if $delete_mode ; then
ssh -q -p $DNS_SSH_PORT \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
-i $DNS_SSH_KEY \
-l $DNS_SSH_USER \
$DNS_MASTER_SERVER "ls" > /dev/null 2>&1
if [[ $? -gt 0 ]] ;then
fatal "Nameserver \"$DNS_MASTER_SERVER\" is not reachable vis ssh!"
fi
ssh -q -p $DNS_SSH_PORT \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
-i $DNS_SSH_KEY \
-l $DNS_SSH_USER \
$DNS_MASTER_SERVER "sudo $SCRIPT_get_domain_by_hostname check" > /dev/null 2>&1
if [[ $? -gt 0 ]] ;then
fatal "Failed to access \033[1m$SCRIPT_get_domain_by_hostname\033[m on Nameserver \"$DNS_MASTER_SERVER\"!"
fi
ssh -q -p $DNS_SSH_PORT \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
-i $DNS_SSH_KEY \
-l $DNS_SSH_USER \
$DNS_MASTER_SERVER "sudo $SCRIPT_remove_master_domain check" > /dev/null 2>&1
if [[ $? -gt 0 ]] ;then
fatal "Failed to access \033[1m$SCRIPT_remove_master_domain\033[m on Nameserver \"$DNS_MASTER_SERVER\"!"
fi
if $include_slave_dns ; then
ssh -q -p $DNS_SSH_PORT \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
-i $DNS_SSH_KEY \
-l $DNS_SSH_USER \
$DNS_SLAVE_SERVER "ls" > /dev/null 2>&1
if [[ $? -gt 0 ]] ;then
fatal "Nameserver \"$DNS_SLAVE_SERVER\" is not reachable vis ssh!"
fi
ssh -q -p $DNS_SSH_PORT \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
-i $DNS_SSH_KEY \
-l $DNS_SSH_USER \
$DNS_SLAVE_SERVER "sudo $SCRIPT_remove_slave_domain check" > /dev/null 2>&1
if [[ $? -gt 0 ]] ;then
fatal "Failed to access \033[1m$SCRIPT_remove_slave_domain\033[m on Nameserver \"$DNS_SLAVE_SERVER\"!"
fi
fi
fi
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert domain(s), you wish to delete database, webspace and webserver configurations for.."
echo ""
echo " Multi domains are supported - give a blank separated list"
echo ""
echo ""
domains=
if [ -z "$_domains" ]; then
echononl "Domain: "
read domains
while [ "X$domains" = "X" ] ; do
echo -e "\n\t\033[33m\033[1mEingabe erforderlich.\033[m\n"
echononl "Domain: "
read domains
done
else
echononl "Domain [${_domains}]: "
read domains
if [[ "X$domains" = "X" ]]; then
domains=$_domains
fi
fi
declare -a domain_req_for_del_arr
declare -a domain_marked_for_del_arr
for _domain in $domains ; do
domain_req_for_del_arr+=("$_domain")
done
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert Apache VHost directory.."
echo ""
echo ""
apache_vhost_dir=
if [ -z "$_apache_vhost_dir" ]; then
echononl "Apache VHost directory: "
read apache_vhost_dir
while [[ "X$apache_vhost_dir" = "X" ]] ; do
echo -e "\n\t\033[33m\033[1mEingabe erforderlich.\033[m\n"
echononl "Apache VHost directory: "
read apache_vhost_dir
done
else
echononl "Apache VHost directory [${_apache_vhost_dir}]: "
read apache_vhost_dir
if [[ "X$apache_vhost_dir" = "X" ]] ; then
apache_vhost_dir="$_apache_vhost_dir"
fi
fi
index_subdir_apache_vhost_dir="$(expr ${#apache_vhost_dir} + 1)"
if [[ "$(basename $apache_vhost_dir)" = 'sites-enabled' ]]; then
apache_vhost_base_dir="$(dirname $apache_vhost_dir)/sites-available"
elif [[ "$(basename $apache_vhost_dir)" =~ vhost ]]; then
apache_vhost_base_dir="$apache_vhost_dir"
elif [[ "$(basename $(dirname $apache_vhost_dir))" =~ vhost ]]; then
apache_vhost_base_dir="$(dirname $apache_vhost_dir)"
fi
declare -i _num=1
while IFS='' read -r -d '' fq_name ; do
dirname="$(basename "$fq_name")"
[[ "$dirname" = "DELETED" ]] && continue
[[ "$dirname" = "BAK" ]] && continue
[[ "$dirname" = "MAINTENANCE" ]] && continue
[[ "$dirname" =~ ^Moved ]] && continue
if [[ $_num -eq 1 ]]; then
_apache_additional_vhost_dirs="$(basename "$dirname")"
else
_apache_additional_vhost_dirs="$_apache_additional_vhost_dirs $(basename "$dirname")"
fi
((_num++))
done < <(find $apache_vhost_dir -mindepth 1 -maxdepth 1 -type d -print0)
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "If there are additional apache vhost directories, enter them here .."
echo ""
echo -e "\033[33m\033[1mNotice\033[m:"
echo -e " only first level subdiirectories of \033[1m$apache_vhost_dir\033[m"
echo -e " are posible values."
echo ""
echo "Blank seperated list of directories"
echo ""
echo -e "Type:"
echo -e " \033[33m\033[1mNone\033[m\033[15Gfor no further vhost directoties"
echo -e " \033[33m\033[1m<RETURN>\033[m\033[15Gto accept the default inside the square brackets"
echo ""
apache_additional_vhost_dirs=
if [ -z "$_apache_additional_vhost_dirs" ]; then
echononl "Additional Apache VHost directory [None]: "
read apache_additional_vhost_dirs
if [[ -z "trim($apache_additional_vhost_dirs)" ]] ; then
apache_additional_vhost_dirs="None"
elif [[ "${apache_additional_vhost_dirs,,}" = 'none' ]] ; then
apache_additional_vhost_dirs="None"
fi
else
echononl "Additional Apache VHost directories [${_apache_additional_vhost_dirs}]: "
read apache_additional_vhost_dirs
if [[ "${apache_additional_vhost_dirs,,}" = 'none' ]] ; then
apache_additional_vhost_dirs="None"
elif [[ -z "$(trim $apache_additional_vhost_dirs)" ]] ; then
apache_additional_vhost_dirs="$_apache_additional_vhost_dirs"
fi
fi
if [[ -n "$apache_additional_vhost_dirs" ]] && [[ "$apache_additional_vhost_dirs" != "None" ]]; then
declare -a apache_additional_vhost_dir_arr=()
for _dir in $apache_additional_vhost_dirs ; do
if [[ -d "${apache_vhost_dir}/$_dir" ]] ; then
apache_additional_vhost_dir_arr+=("$_dir")
else
warn "$_dir is not a subdirectory of ${apache_vhost_dir}.\n\n \033[33m\033[1mIgnoring directory $_dir\033[m.."
fi
done
fi
echo ""
echo "apache_additional_vhost_dirs: $apache_additional_vhost_dirs"
echo ""
echo ""
echo ""
echo -e "\033[32m--\033[m"
echo ""
echo "Insert Base Directory Apache Websites"
echo ""
echo ""
apache_web_base_dir=
if [ -z "$_apache_web_base_dir" ]; then
echononl "Base Directory Apache Websites: "
read apache_web_base_dir
while [[ "X$apache_web_base_dir" = "X" ]] ; do
echo -e "\n\t\033[33m\033[1mEingabe erforderlich.\033[m\n"
echononl "Base Directory Apache Websites: "
read apache_web_base_dir
done
else
echononl "Base Directory Apache Websites [${_apache_web_base_dir}]: "
read apache_web_base_dir
if [[ "X$apache_web_base_dir" = "X" ]] ; then
apache_web_base_dir="$_apache_web_base_dir"
fi
fi
echo ""
echo ""
echo -e "\033[32m\033[1m====================\033[m"
echo ""
echo -n " Domain(s)..............................: "
declare -i counter=1
for _domain in "${domain_req_for_del_arr[@]}" ; do
if [[ $counter -eq 1 ]] ; then
echo -e "\033[1m$_domain\033[m"
else
echo -e " \033[1m$_domain\033[m"
fi
counter=$((counter+1))
done
unset counter
echo ""
echo -e " Apache Vhosts Directory................: \033[1m$apache_vhost_dir\033[m"
if [[ ${#apache_additional_vhost_dir_arr[@]} -gt 0 ]] ; then
declare -i counter=1
echo -en " Additional VHost Directories...........:\033[1m"
for _dir in ${apache_additional_vhost_dir_arr[@]} ; do
if [[ $counter -eq 1 ]] ; then
echo -e " \033[1m$_dir\033[m"
else
echo -e " \033[1m$_dir\033[m"
fi
counter=$((counter+1))
done
echo ""
fi
echo -e " Base Directory Apache Websites.........: \033[1m$apache_web_base_dir\033[m"
if $delete_mode ; then
echo ""
echo -e " Master Nameserver supporting websites..: \033[1m$DNS_MASTER_SERVER\033[m"
echo -e " Slave Nameserver supporting websites...: \033[1m$DNS_SLAVE_SERVER\033[m"
echo ""
echo -e " SSH User to access Nameserver..........: \033[1m$DNS_SSH_USER\033[m"
echo -e " SSH Port to access Nameserver..........: \033[1m$DNS_SSH_PORT\033[m"
echo -e " SSH Key to access Nameserver...........: \033[1m$DNS_SSH_KEY\033[m"
echo ""
echo -e " Remote Script to get zone..............: \033[1m$SCRIPT_get_domain_by_hostname\033[m"
echo -e " Remote Script to remove master zone....: \033[1m$SCRIPT_remove_master_domain\033[m"
echo -e " Remote Script to remove slave zone.....: \033[1m$SCRIPT_remove_slave_domain\033[m"
fi
echo ""
echo ""
#warn "To continue with te above Setting type uppercase 'YES'."
echo -e -n "\033[1mContinue with above settings? [y/n]:\033[m "
read OK
while [[ "X${OK}X" = "XX" ]] ; do
echo ""
echo -e -n "\033[1mContinue with above settings? [y/n]:\033[m "
read OK
done
if [[ "${OK,,}" != 'yes' ]] && [[ "${OK,,}" != 'y' ]]; then
fatal "Abort by user request."
fi
if $delete_mode ; then
# - Create Log directory for permanent log files
# -
echo ""
echononl " Create Log directory '$log_dir' for permanent log files"
if [[ ! -d "$log_dir" ]]; then
mkdir "$log_dir" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
fatal $(cat $tmp_log_file)
fi
else
echo_skipped
fi
main_log=${log_dir}/main-${backup_date}.log
> $main_log
echo "# ==========" >> $main_log
echo "# - Start Script $(basename $0) with following Parameters" >> $main_log
echo "# ==========" >> $main_log
echo "" >> $main_log
declare -i counter=1
for _domain in "${domain_req_for_del_arr[@]}" ; do
if [[ $counter -eq 1 ]] ; then
echo -e "# - Domain(s)................................: $_domain" >> $main_log
else
echo -e "# - $_domain" >> $main_log
fi
counter=$((counter+1))
done
unset counter
echo "# -" >> $main_log
echo "# - Apache Vhosts Directory..................: $apache_vhost_dir" >> $main_log
echo "# - Base directory apache websites...........: $apache_web_base_dir" >> $main_log
echo "# -" >> $main_log
echo ""
echo "# - Master Nameserver supporting websites....: $DNS_MASTER_SERVER" >> $main_log
echo "# - Slave Nameserver supporting websites.....: $DNS_SLAVE_SERVER" >> $main_log
echo "# -" >> $main_log
echo "# - SSH User to access Nameserver............: $DNS_SSH_USER" >> $main_log
echo "# - SSH Port to access Nameserver............: $DNS_SSH_PORT" >> $main_log
echo "# - SSH Key to access Nameserver.............: $DNS_SSH_KEY" >> $main_log
echo "# -" >> $main_log
echo "# - Remote Script to get zone................: $SCRIPT_get_domain_by_hostname" >> $main_log
echo "# - Remote Script to remove master zone......: $SCRIPT_remove_master_domain" >> $main_log
echo "# - Remote Script to remove slave zone.......: $SCRIPT_remove_slave_domain" >> $main_log
#echo "" >> $main_log
#echo "apache_vhost_dir=\"$apache_vhost_dir\"" >> $main_log
#echo "DNS_MASTER_SERVER=\"$DNS_MASTER_SERVER\"" >> $main_log
#echo "DNS_SLAVE_SERVER=\"$DNS_SLAVE_SERVER\"" >> $main_log
#echo "DNS_SSH_USER=\"$DNS_SSH_USER\"" >> $main_log
#echo "DNS_SSH_PORT=\"$DNS_SSH_PORT\"" >> $main_log
#echo "DNS_SSH_KEY=\"$DNS_SSH_KEY\"" >> $main_log
#echo "SCRIPT_get_domain_by_hostname=\"$SCRIPT_get_domain_by_hostname\"" >> $main_log
#echo "SCRIPT_remove_master_domain=\"$SCRIPT_remove_master_domain\"" >> $main_log
fi
# -----
# - Gathering global settings
# -----
# - Check if mod_php is installed.
# -
mod_php_installed=false
if $(httpd -M | grep -q -E "php[5-9]?_module" 2>/dev/null) ; then
mod_php_installed=true
if $(apachectl status | grep -q "PHP/" 2>/dev/null) ; then
MOD_PHP_VERSION="$(trim $(apachectl status | grep "PHP/" | cut -d '/' -f2))"
else
MOD_PHP_VERSION=" UNKNOWN"
warn "'mod_php' ist running, but i cannot dermin the PHP Version.\n 'apachectl status' does not work on this server."
fi
fi
# - Associative Array(s)
# -
declare -A vhost_file_domain_arr
# - Non associative Array(s)
# -
declare -a vhost_file_req_for_del_arr
declare -a vhost_file_marked_for_del_arr
declare -a no_vhost_config_found
declare -a dehydrated_name_marked_for_del_arr
declare -a dehydrated_name_req_for_del_arr
dehydrated_domains_file="/var/lib/dehydrated/domains.txt"
declare -a docroot_req_for_del_arr
declare -a docroot_marked_for_del_arr
declare -a database_req_for_del_arr
declare -a database_marked_for_del_arr
declare -a A_record_marked_for_del_arr
declare -a AAAA_record_marked_for_del_arr
declare -a hostname_in_use_arr
declare -a msg_exclude_vhost_file_from_del_arr
declare -a msg_exclude_doc_root_from_del_arr
declare -a msg_exclude_domain_from_del_arr
declare -a msg_exclude_db_from_del_arr
for domain in "${domain_req_for_del_arr[@]}" ; do
echo ""
echo -e "\033[32mGoing to inspect domain \033[1m${domain}\033[m:"
# - Empty domain concerning arrays
# -
hostname_arr=()
vhost_file_arr=()
symlink_file_arr=()
activ_file_arr=()
inactiv_file_arr=()
documentroot_arr=()
database_arr=()
site_cms_arr=()
msg_missing_database_arr=()
msg_hostname_in_use_arr=()
php_version_arr=()
php_version_active_arr=()
# -----
# - Get Vhost configuration for current domain
# -----
_vhost_files="$(grep -l -d skip -E "^\s*(ServerName|ServerAlias)\s+.*${domain}" $apache_vhost_dir/* 2> /dev/null)"
if [[ ${#apache_additional_vhost_dirs[@]} -gt 0 ]] ; then
for _dir in ${apache_additional_vhost_dirs[@]} ; do
if [[ -z "$_vhost_files" ]]; then
_vhost_files="$(grep -l -d skip -E "^\s*(ServerName|ServerAlias)\s+.*${domain}" \
${apache_vhost_dir}/${_dir}/* 2> /dev/null)"
else
_vhost_files="$_vhost_files $(grep -l -d skip -E "^\s*(ServerName|ServerAlias)\s+.*${domain}" \
${apache_vhost_dir}/${_dir}/* 2> /dev/null)"
fi
done
fi
if [[ -z "$_vhost_files" ]]; then
error "No VHost Configuration found for domain \033[37m\033[1m${domain}\033[m."
# - Delete current domain from array 'domain_req_for_del_arr'
# -
no_vhost_config_found+=("${domain}")
continue
fi
echo ""
for _vhost_file in $_vhost_files ; do
#_basename_vhost_file="$(basename $_vhost_file)"
_basename_vhost_file="${_vhost_file:$index_subdir_apache_vhost_dir}"
containsElement "$_basename_vhost_file" "${vhost_file_arr[@]}" && continue
vhost_file_arr+=("$_basename_vhost_file")
if [[ -z "${vhost_file_domain_arr["$domain"]}" ]] ; then
vhost_file_domain_arr["$domain"]="$_basename_vhost_file"
else
vhost_file_domain_arr["$domain"]="${vhost_file_domain_arr["$domain"]}:$_basename_vhost_file"
fi
if ! containsElement "$_basename_vhost_file" "${vhost_file_req_for_del_arr[@]}" ; then
vhost_file_req_for_del_arr+=("$_basename_vhost_file")
fi
if [[ "${_vhost_file##*.}" = "conf" ]]; then
if [[ -L "$_vhost_file" ]] ; then
symlink_file_arr+=("$_basename_vhost_file")
_vhost_file="$(realpath $_vhost_file)"
activ_file_arr+=("$(basename $(realpath $_vhost_file))")
# - If this file was (wrongly) written befor into array 'inactiv_file_arr' (see below)
# - we will delete it from array here.
# -
if containsElement "$_basename_vhost_file" "${inactiv_file_arr[@]}" ; then
new_array=()
for value in "${inactiv_file_arr[@]}" ; do
[[ $value != "$_basename_vhost_file" ]] && new_array+=($value)
done
inactiv_file_arr=("${new_array[@]}")
unset new_array
fi
else
activ_file_arr+=("$_basename_vhost_file")
fi
else
# - If an activ configuration file will be added here. We
# - correct it some loops later (see above)
# -
inactiv_file_arr+=("$_basename_vhost_file")
fi
# -----
# - Get hostnames of current vhost configuration file
# -----
# - Get Server Name
# -
_server_names=$(grep -i -E "^\s*ServerName" $_vhost_file | sed -e "s/ServerName//" | sed "s/^\s*//" | sed "s/\s*$//" | sort -u)
if [[ -n "$_server_names" ]] ; then
for _server_name in $_server_names ; do
if [[ ${#hostname_arr[@]} -eq 0 ]] ; then
hostname_arr+=("$_server_name")
else
containsElement "$_server_name" "${hostname_arr[@]}" && continue
hostname_arr+=("$_server_name")
fi
done
fi
# - Get Server Aliase
# -
_server_aliases=$(grep -i -E "^\s*ServerAlias" $_vhost_file | sed -e "s/ServerAlias//" | sed "s/^\s*//" | sed "s/\s*$//" | sort -u)
if [[ -n "$_server_aliases" ]] ; then
for _server_alias in $_server_aliases ; do
if [[ ${#hostname_arr[@]} -eq 0 ]] ; then
hostname_arr+=("$_server_alias")
else
containsElement "$_server_alias" "${hostname_arr[@]}" && continue
hostname_arr+=("$_server_alias")
fi
done
fi
# - Are there any hostnames NOT concerning to domains, which are requested
# - to delete?
# -
__msg=""
for hostname in ${hostname_arr[@]} ; do
_matched_domain=false
for _other_domain in ${domain_req_for_del_arr[@]} ; do
if [[ "$hostname" =~ ${_other_domain}$ ]] ; then
_matched_domain=true
break
fi
done
if ! $_matched_domain ; then
_tld="${hostname##*.}"
_tmp_str="${hostname%.*}"
_maindomain="${_tmp_str##*.}"
if ! containsElement "$_basename_vhost_file:${hostname}:${_maindomain}.${_tld}" "${hostname_in_use_arr[@]}" ; then
__msg="The Vhost configuration file \033[37m\033[1m$_basename_vhost_file\033[m contains
also hostname \033[33m${hostname}\033[m. But the concerning domain \033[33m${_maindomain}.${_tld}\033[m
is not requested for deletion."
msg_hostname_in_use_arr[${#msg_hostname_in_use_arr[@]}]="$__msg"
hostname_in_use_arr+=("$_basename_vhost_file:${hostname}:${_maindomain}.${_tld}")
fi
fi
done
# -----
# - Get documetroot of current VHost configuration file
# ----
_documentroot=$(grep -E "^\s*DocumentRoot" $_vhost_file 2> /dev/null | awk '{print$2}' | sed 's/"//g' | sed 's/\/$//' | sort -u)
if ! containsElement "$_documentroot" "${documentroot_arr[@]}" ; then
documentroot_arr+=("$_documentroot")
if ! containsElement "$_documentroot" "${docroot_req_for_del_arr[@]}" ; then
docroot_req_for_del_arr+=("$_documentroot")
fi
fi
done # for _vhost_file in $_vhost_files
# ---
# - Get databases amd type of CMS
# ---
for _doc_root in "${documentroot_arr[@]}" ; do
site_cms="Unknown"
file_to_check="$(dirname $_doc_root)/db.inc.php"
file_to_check_mediawiki="${_doc_root}/LocalSettings.php"
file_to_check_wordpress="${_doc_root}/wp-config.php"
file_to_check_drupal="${_doc_root}/sites/default/settings.php"
file_to_check_typo3="${_doc_root}/typo3conf/LocalConfiguration.php"
file_to_check_redaxo="${_doc_root}/redaxo/include/master.inc.php"
_found=false
if [[ -r "$file_to_check_mediawiki" ]] && [[ ! -d "$file_to_check_mediawiki" ]] ; then
db_search_string='\$wgDBname'
#db_search_string='\$wgEnableUserEmail'
_found=false
if grep -i -q "$db_search_string" $file_to_check_mediawiki > /dev/null 2>&1 ; then
database="$(grep -i "$db_search_string" $file_to_check_mediawiki 2> /dev/null \
| awk -F '=' '{print$2}' \
| awk -F ';' '{print$1}'\
| tail -1)"
# - Remove leading whitespace characters
database="${database#"${database%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
database="${database%"${database##*[![:space:]]}"}"
# - Remove leading single quote
database="${database#"${database%%[!\']*}"}"
# - Remove trailing single quote
database="${database%"${database##*[!\']}"}"
# - Remove leading double quote
database="${database#"${database%%[!\"]*}"}"
# - Remove trailing double quote
database="${database%"${database##*[!\"]}"}"
_found=true
fi
if [[ -f "${_doc_root}/includes/DefaultSettings.php" ]]; then
version_search_string='\$wgVersion\s+='
cms_version="$(grep -i -E "^\s*$version_search_string" "${_doc_root}/includes/DefaultSettings.php" 2> /dev/null \
| awk -F '=' '{print$2}' \
| awk -F ';' '{print$1}'\
| tail -1)"
# - Remove leading whitespace characters
cms_version="${cms_version#"${cms_version%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
cms_version="${cms_version%"${cms_version##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
cms_version="${cms_version%"${cms_version##*[!;]}"}"
# - Remove trailing whitespace characters
cms_version="${cms_version#"${cms_version%%[!\']*}"}"
# - Remove trailing inverted comma characters
cms_version="${cms_version%"${cms_version##*[!\']}"}"
fi
site_cms="MediaWiki $cms_version"
elif [[ -r "$file_to_check_wordpress" ]] && [[ ! -d "$file_to_check_wordpress" ]] ; then
db_search_string="define\('DB_NAME'"
_found=false
if grep -i -q -E "^\s*$db_search_string" $file_to_check_wordpress > /dev/null 2>&1 ; then
database="$(grep -i -E "^\s*$db_search_string" $file_to_check_wordpress 2> /dev/null \
| awk -F ',' '{print$2}' \
| awk -F ')' '{print$1}' \
| tail -1 )"
# - Remove leading whitespace characters
database="${database#"${database%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
database="${database%"${database##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
database="${database%"${database##*[!;]}"}"
# - Remove trailing whitespace characters
database="${database#"${database%%[!\']*}"}"
# - Remove trailing inverted comma characters
database="${database%"${database##*[!\']}"}"
_found=true
fi
if [[ -f "${_doc_root}/wp-includes/version.php" ]]; then
version_search_string='\$wp_version\s+='
cms_version="$(grep -i -E "^\s*$version_search_string" ${_doc_root}/wp-includes/version.php 2> /dev/null \
| awk -F '=' '{print$2}' \
| tail -1 )"
# - Remove leading whitespace characters
cms_version="${cms_version#"${cms_version%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
cms_version="${cms_version%"${cms_version##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
cms_version="${cms_version%"${cms_version##*[!;]}"}"
# - Remove trailing whitespace characters
cms_version="${cms_version#"${cms_version%%[!\']*}"}"
# - Remove trailing inverted comma characters
cms_version="${cms_version%"${cms_version##*[!\']}"}"
fi
site_cms="WordPress $cms_version"
elif [[ -r "$file_to_check_drupal" ]] && [[ ! -d "$file_to_check_drupal" ]] ; then
db_search_string="'database'\s+=>"
_found=false
if grep -i -q -E "^\s*$db_search_string" $file_to_check_drupal > /dev/null 2>&1 ; then
database="$(grep -i -E "^\s*$db_search_string" $file_to_check_drupal 2> /dev/null \
| awk -F '=>' '{print$2}' \
| awk -F ',' '{print$1}' \
| tail -1 )"
# - Remove leading whitespace characters
database="${database#"${database%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
database="${database%"${database##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
database="${database%"${database##*[!;]}"}"
# - Remove trailing whitespace characters
database="${database#"${database%%[!\']*}"}"
# - Remove trailing inverted comma characters
database="${database%"${database##*[!\']}"}"
_found=true
fi
if [[ -f "${_doc_root}/includes/bootstrap.inc" ]] ; then
version_search_string="define\('VERSION'"
cms_version="$(grep -i -E "^\s*$version_search_string" ${_doc_root}/includes/bootstrap.inc 2> /dev/null \
| awk -F ',' '{print$2}' \
| awk -F ')' '{print$1}' \
| tail -1 )"
# - Remove leading whitespace characters
cms_version="${cms_version#"${cms_version%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
cms_version="${cms_version%"${cms_version##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
cms_version="${cms_version%"${cms_version##*[!;]}"}"
# - Remove trailing whitespace characters
cms_version="${cms_version#"${cms_version%%[!\']*}"}"
# - Remove trailing inverted comma characters
cms_version="${cms_version%"${cms_version##*[!\']}"}"
fi
site_cms="Drupal $cms_version"
elif [[ -r "$file_to_check_typo3" ]] && [[ ! -d "$file_to_check_typo3" ]] ; then
db_search_string="'database'\s+=>"
_found=false
if grep -i -q -E "^\s*$db_search_string" $file_to_check_typo3 > /dev/null 2>&1 ; then
database="$(grep -i -E "^\s*$db_search_string" $file_to_check_typo3 2> /dev/null \
| awk -F '=>' '{print$2}' \
| awk -F ',' '{print$1}' \
| tail -1 )"
# - Remove leading whitespace characters
database="${database#"${database%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
database="${database%"${database##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
database="${database%"${database##*[!;]}"}"
# - Remove trailing whitespace characters
database="${database#"${database%%[!\']*}"}"
# - Remove trailing inverted comma characters
database="${database%"${database##*[!\']}"}"
_found=true
fi
if [[ -f "${_doc_root}/typo3_src/ChangeLog" ]] ; then
version_search_string='\[RELEASE\]\s+Release\s+of\s+TYPO3'
cms_version="$(grep -i -m 1 -E "$version_search_string" ${_doc_root}/typo3_src/ChangeLog 2> /dev/null \
| grep -o -E "\s+[0-9]+.[0-9]+.[0-9]+\s+")"
# - Remove leading whitespace characters
cms_version="${cms_version#"${cms_version%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
cms_version="${cms_version%"${cms_version##*[![:space:]]}"}"
fi
site_cms="Typo3 $cms_version"
elif [[ -r "$file_to_check_redaxo" ]] && [[ ! -d "$file_to_check_redaxo" ]] ; then
db_search_string="\\\$REX\['DB'\]\['1'\]\['NAME'\]\s+="
_found=false
if grep -i -q -E "^\s*$db_search_string" $file_to_check_redaxo > /dev/null 2>&1 ; then
database="$(grep -i -E "^\s*$db_search_string" $file_to_check_redaxo 2> /dev/null \
| awk -F '=' '{print$2}' \
| tail -1 )"
# - Remove leading whitespace characters
database="${database#"${database%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
database="${database%"${database##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
database="${database%"${database##*[!;]}"}"
# - Remove trailing whitespace characters
database="${database#"${database%%[!\']*}"}"
# - Remove trailing inverted comma characters
database="${database%"${database##*[!\']}"}"
_found=true
fi
main_version_search_string="\\\$REX\['VERSION'\]\s+="
if grep -i -q -E "^\s*$main_version_search_string" $file_to_check_redaxo > /dev/null 2>&1 ; then
main_version="$(grep -i -E "^\s*$main_version_search_string" $file_to_check_redaxo 2> /dev/null \
| awk -F '=' '{print$2}' \
| tail -1 )"
# - Remove leading whitespace characters
main_version="${main_version#"${main_version%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
main_version="${main_version%"${main_version##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
main_version="${main_version%"${main_version##*[!;]}"}"
# - Remove trailing whitespace characters
main_version="${main_version#"${main_version%%[!\']*}"}"
# - Remove trailing inverted comma characters
main_version="${main_version%"${main_version##*[!\']}"}"
# - Remove leading single quote
main_version="${main_version#"${main_version%%[!\']*}"}"
# - Remove trailing single quote
main_version="${main_version%"${main_version##*[!\']}"}"
# - Remove leading double quote
main_version="${main_version#"${main_version%%[!\"]*}"}"
# - Remove trailing double quote
main_version="${main_version%"${main_version##*[!\"]}"}"
sub_version_search_string="\\\$REX\['SUBVERSION'\]\s+="
if grep -i -q -E "^\s*$sub_version_search_string" $file_to_check_redaxo > /dev/null 2>&1 ; then
sub_version="$(grep -i -E "^\s*$sub_version_search_string" $file_to_check_redaxo 2> /dev/null \
| awk -F '=' '{print$2}' \
| tail -1 )"
# - Remove leading whitespace characters
sub_version="${sub_version#"${sub_version%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
sub_version="${sub_version%"${sub_version##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
sub_version="${sub_version%"${sub_version##*[!;]}"}"
# - Remove trailing whitespace characters
sub_version="${sub_version#"${sub_version%%[!\']*}"}"
# - Remove trailing inverted comma characters
sub_version="${sub_version%"${sub_version##*[!\']}"}"
# - Remove leading single quote
sub_version="${sub_version#"${sub_version%%[!\']*}"}"
# - Remove trailing single quote
sub_version="${sub_version%"${sub_version##*[!\']}"}"
# - Remove leading double quote
sub_version="${sub_version#"${sub_version%%[!\"]*}"}"
# - Remove trailing double quote
sub_version="${sub_version%"${sub_version##*[!\"]}"}"
minor_version_search_string="\\\$REX\['MINORVERSION'\]\s+="
if grep -i -q -E "^\s*$minor_version_search_string" $file_to_check_redaxo > /dev/null 2>&1 ; then
minor_version="$(grep -i -E "^\s*$minor_version_search_string" $file_to_check_redaxo 2> /dev/null \
| awk -F '=' '{print$2}' \
| tail -1 )"
# - Remove leading whitespace characters
minor_version="${minor_version#"${minor_version%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
minor_version="${minor_version%"${minor_version##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
minor_version="${minor_version%"${minor_version##*[!;]}"}"
# - Remove trailing whitespace characters
minor_version="${minor_version#"${minor_version%%[!\']*}"}"
# - Remove trailing inverted comma characters
minor_version="${minor_version%"${minor_version##*[!\']}"}"
# - Remove leading single quote
minor_version="${minor_version#"${minor_version%%[!\']*}"}"
# - Remove trailing single quote
minor_version="${minor_version%"${minor_version##*[!\']}"}"
# - Remove leading double quote
minor_version="${minor_version#"${minor_version%%[!\"]*}"}"
# - Remove trailing double quote
minor_version="${minor_version%"${minor_version##*[!\"]}"}"
else
minor_version="?"
fi
else
sub_version="?"
minor_version="?"
fi
cms_version="${main_version}.${sub_version}.$minor_version"
fi
site_cms="REDAXO $cms_version"
elif [[ -r "$file_to_check" ]] && [[ ! -d "$file_to_check" ]]; then
db_search_strings=('\$db_name' '\$mysql_db')
_found=false
for _string in ${db_search_strings[@]} ; do
if grep -i -q -E "^\s*$_string" $file_to_check > /dev/null 2>&1 ; then
database="$(grep -i -E "^\s*$_string" $file_to_check 2> /dev/null | awk -F '=' '{print$2}' | tail -1 )"
# - Remove leading whitespace characters
database="${database#"${database%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
database="${database%"${database##*[![:space:]]}"}"
# - Rmove trailing semicolon characters
database="${database%"${database##*[!;]}"}"
# - Remove trailing whitespace characters
database="${database#"${database%%[!\']*}"}"
# - Remove trailing inverted comma characters
database="${database%"${database##*[!\']}"}"
_found=true
break
fi
done
if ! $_found ; then
file_to_check="${_doc_root}/includes/config.inc.php"
if [[ -f "$file_to_check" ]]; then
if grep -i -q -E "^\s*define\('DB_DATABASE'" $file_to_check > /dev/null 2>&1 ; then
database="$(grep -i -m 1 -E "^\s*define\('DB_DATABASE'" $file_to_check 2> /dev/null \
| awk -F ',' '{print$2}' \
| awk -F ')' '{print$1}' \
| tail -1 )"
# - Remove leading whitespace characters
database="${database#"${database%%[![:space:]]*}"}"
# - Remove trailing whitespace characters
database="${database%"${database##*[![:space:]]}"}"
# - Remove leading single quote
database="${database#"${database%%[!\']*}"}"
# - Remove trailing single quote
database="${database%"${database##*[!\']}"}"
# - Remove leading double quote
database="${database#"${database%%[!\"]*}"}"
# - Remove trailing double quote
database="${database%"${database##*[!\"]}"}"
_found=true
fi
fi
fi
site_cms="Kontext"
fi
if $_found ; then
database_arr+=("${database}:${_doc_root}")
#if ! containsElement "$database" "${database_req_for_del_arr[@]}" ; then
# database_req_for_del_arr+=("${database}")
#fi
if ! containsElement "${database}:${_doc_root}" "${database_req_for_del_arr[@]}" ; then
database_req_for_del_arr+=("${database}:${_doc_root}")
fi
#site_cms="Kontext"
else
__msg="No database found for documentroot directory ${_doc_root}"
msg_missing_database_arr+=("$__msg")
fi
if [[ -n "$site_cms" ]] ; then
if ! containsElement "${site_cms}:${_doc_root}" "${site_cms_arr[@]}" ; then
site_cms_arr+=("${site_cms}:${_doc_root}")
fi
fi
done
# -----
# - Get PHP version of current vhost configuration file
# -----
for _file in ${vhost_file_arr[@]} ; do
_php_engine=""
_php_version=""
CUR_IFS=$IFS
IFS=''
if grep -q -E "^\s*(ProxyPassMatch|SetHandler).*php-[5-9]\.[0-9]+-" $apache_vhost_dir/$_file 2> /dev/null ; then
_php_engine="PHP FPM/FastCGI"
if grep -q -E "^\s*(SetHandler).*php-[5-9]\.[0-9]+-" $apache_vhost_dir/$_file 2> /dev/null ; then
_php_fpm_socket="$(grep -E "^\s*(SetHandler).*php-[5-9]\.[0-9]+-" $apache_vhost_dir/$_file 2> /dev/null \
| head -1 | cut -d ':' -f3 | cut -d'|' -f1)"
else
_php_fpm_socket=
fi
if [[ -S "$_php_fpm_socket" ]] ; then
_php_version="$(exec /usr/local/php-$(echo "$_php_fpm_socket" | grep -o -E "[5-9]\.[0-9]")/bin/php-cgi -v \
| head -1 | awk '{print$2}')"
else
_php_version=" UNKNOWN"
fi
elif grep -d skip -q -E "^\s*FCGIWrapper\s+.*\.php" $apache_vhost_dir/$_file 2> /dev/null ; then
_php_engine="PHP CGI/FastCGI"
_fcgid_file="$(grep -E "^\s*FCGIWrapper\s+.*\.php" $apache_vhost_dir/$_file 2> /dev/null \
| head -1 | awk '{print$2}')"
if [[ -f "$_fcgid_file" ]] ; then
_php_version="$($(grep "exec" $_fcgid_file | awk '{print$2}') -v | head -1 | awk '{print$2}')"
[[ -z "$_php_version" ]] && _php_version="unknown Version"
else
_php_version=" UNKNOWN"
fi
elif $mod_php_installed ; then
#_php_engine="Apache 2.0 Handler"
_php_engine="Apache Handler"
_php_version="$MOD_PHP_VERSION"
else
_php_engine="No PHP assigned"
fi
if ! containsElement "$_file:${_php_engine}:$_php_version" "${php_version_arr[@]}" ; then
php_version_arr+=("$_file:${_php_engine}:$_php_version")
fi
if containsElement "$_file" "${activ_file_arr[@]}" ; then
php_version_active_arr+=("$_file:${_php_engine}:$_php_version")
fi
IFS=$CUR_IFS
done
# -----
# - Summary current domain
# -----
#echo -e " \033[32mSummary domain \033[1m${domain}\033[m:\n"
echo " VHost files:"
for _file in ${vhost_file_arr[@]} ; do
echo -n " $_file"
if containsElement "$_file" "${symlink_file_arr[@]}" ; then
echo " (Symlink)"
elif containsElement "$_file" "${activ_file_arr[@]}" ; then
echo " (active)"
else
echo " (inactive)"
fi
done
echo ""
CUR_IFS=$IFS
IFS=''
echo " PHP Versions (active):"
for _val in ${php_version_active_arr[@]} ; do
IFS=':' read -a _val_arr <<< "$_val"
echo -e " ${_val_arr[0]}:\033[55G\033[33m${_val_arr[1]} ${_val_arr[2]}\033[m"
done
echo ""
echo " PHP Versions (all):"
for _val in ${php_version_arr[@]} ; do
IFS=':' read -a _val_arr <<< "$_val"
echo -e " ${_val_arr[0]}:\033[55G${_val_arr[1]} ${_val_arr[2]}"
done
echo ""
IFS=$CUR_IFS
echo " Hostnames: "
for _hostname in ${hostname_arr[@]} ; do
echo " $_hostname"
done
echo ""
echo " DocumentRoot directories: "
for _doc_root in ${documentroot_arr[@]} ; do
echo " $_doc_root"
done
echo ""
echo " Database(s):"
for _val in "${database_arr[@]}" ; do
IFS=':' read -a _val_arr <<< "$_val"
echo " ${_val_arr[0]} - ${_val_arr[1]}"
done
echo ""
echo " Type of CMS:"
for _val in "${site_cms_arr[@]}" ; do
IFS=':' read -a _val_arr <<< "$_val"
echo " ${_val_arr[0]} - ${_val_arr[1]}"
done
echo ""
if $print_warnings ; then
# -----
# - Warnings current documentroot
# -----
CUR_IFS=$IFS
IFS=''
msg=""
declare -i _counter=1
if [[ ${#msg_hostname_in_use_arr[@]} -gt 0 ]] ; then
for _msg in ${msg_hostname_in_use_arr[@]} ; do
if [[ $_counter -eq 1 ]]; then
msg="$_msg"
else
msg="$msg\n\n $_msg"
fi
_counter=$((_counter+1))
done
warn "$msg"
fi
IFS=$CUR_IFS
# -----
# - Warnings current database(s)
# -----
CUR_IFS=$IFS
IFS=''
msg=""
declare -i _counter=1
if [[ ${#msg_missing_database_arr[@]} -gt 0 ]] ; then
for _msg in ${msg_missing_database_arr[@]} ; do
if [[ $_counter -eq 1 ]]; then
msg="$_msg"
else
msg="$msg\n\n $_msg"
fi
_counter=$((_counter+1))
done
warn "$msg"
fi
IFS=$CUR_IFS
fi # if $print_warnings
done
if $only_check || $only_show ; then
rm -f $tmp_log_file
echo ""
clean_up
fi
echo ""
echo -e "\033[32m------\033[m"
echo -e "Summary VHost Configuration files"
echo -e "\033[32m------\033[m"
# ==========
# - Vhost configuration files
# ==========
for _vhost_file in ${vhost_file_req_for_del_arr[@]}; do
_found=false
for _val in ${hostname_in_use_arr[@]} ; do
IFS=':' read -a _val_arr <<< "${_val}"
if [[ "${_val_arr[0]}" = "$_vhost_file" ]] ; then
_found=true
__msg="The VHost configuration file \033[37m\033[1m${_vhost_file}\033[m is also
used at least by domain \033[33m${_val_arr[1]}\033[m.
But that domain isn't marked for deletion."
msg_exclude_vhost_file_from_del_arr[${#msg_exclude_vhost_file_from_del_arr[@]}]="$__msg"
break
fi
done
if ! $_found ; then
vhost_file_marked_for_del_arr+=("$_vhost_file")
_dehydrated_name="$(grep ServerName $(realpath ${apache_vhost_dir})/$_vhost_file | awk '{print$2}' | sort -u)"
if [[ -n "$_dehydrated_name" ]] \
&& grep -q -E "^\s*$_dehydrated_name" $dehydrated_domains_file 2> /dev/null ; then
if ! containsElement "$_dehydrated_name" "${dehydrated_name_req_for_del_arr[@]}" ; then
dehydrated_name_req_for_del_arr+=("$_dehydrated_name")
fi
fi
fi
done
# - VHost configuration files requested for deletion
# -
echo ""
echo " VHost configuration files requested for deletion"
if [[ ${#vhost_file_req_for_del_arr[@]} -gt 0 ]]; then
for _vhost_file in ${vhost_file_req_for_del_arr[@]} ; do
echo " $_vhost_file"
done
else
echo -e " *** \033[33mNo VHost configuration files are requested for deletion\033[m ***"
fi
# - VHost configurtion files marked for deletion
# -
echo ""
echo " VHost configuration files marked for deletion"
if [[ ${#vhost_file_marked_for_del_arr[@]} -gt 0 ]]; then
for _vhost_file in ${vhost_file_marked_for_del_arr[@]} ; do
echo " $_vhost_file"
done
else
echo -e " *** \033[33mNo VHost configuration files are marked for deletion\033[m ***"
fi
# - Entier in dehydrated domains file marked for deletion"
# -
echo ""
echo " Entries in dehydrated's domain.txt file requested for deletion"
if [[ ${#dehydrated_name_req_for_del_arr[@]} -gt 0 ]]; then
for _domain_entry in ${dehydrated_name_req_for_del_arr[@]} ; do
echo " $_domain_entry"
done
else
echo -e " *** \033[33mNo domain entry in dehydrated's domain file is requested for deletion\033[m ***"
fi
# -----
# - Warn about VHost configurtion files not be marked for deletion.
# -----
CUR_IFS=$IFS
IFS=''
msg=""
declare -i _counter=1
if [[ ${#msg_exclude_vhost_file_from_del_arr[@]} -gt 0 ]] ; then
for _msg in ${msg_exclude_vhost_file_from_del_arr[@]} ; do
if [[ $_counter -eq 1 ]]; then
msg="$_msg"
else
msg="$msg\n\n $_msg"
fi
_counter=$((_counter+1))
done
warn "$msg"
fi
IFS=$CUR_IFS
echo ""
echo -e "\033[32m------\033[m"
echo -e "Summary DocumentRoot directories - This may take some time"
echo -e "\033[32m------\033[m"
# ==========
# - DocumentRoot directories
# ==========
# - Check for DocumetRoot directories that are in use by VHost configuration files NOT
# - marked for deletion. If found, do also NOT mark that DocumentRoot directory for
# - deletion.
# -
declare -a _all_vhost_files_arr
declare -a _all_document_root_dirs_arr
while IFS='' read -r -d '' filename ; do
if ! containsElement "$(realpath $filename)" "${_all_vhost_files_arr[@]}" ; then
_all_vhost_files_arr+=("$(realpath $filename)")
fi
done < <(find $apache_vhost_dir -mindepth 1 -maxdepth 1 -type f -print0)
for _dir in ${apache_additional_vhost_dirs[@]} ; do
while IFS='' read -r -d '' filename ; do
if ! containsElement "$(realpath $filename)" "${_all_vhost_files_arr[@]}" ; then
_all_vhost_files_arr+=("$(realpath $filename)")
fi
done < <(find ${apache_vhost_dir}/$_dir -mindepth 1 -maxdepth 1 -type f -print0)
done
for _vhost_file in ${_all_vhost_files_arr[@]} ; do
_doc_root="$(grep -E "\s*DocumentRoot\s+" $_vhost_file 2> /dev/null \
| awk '{print$2}' | sed 's/"//g' | sed 's/\/$//' | sort -u )"
if [[ -n "${_doc_root}" ]]; then
_all_document_root_dirs_arr+=("$(realpath ${_doc_root}):${_vhost_file}")
fi
done
for _doc_root in ${docroot_req_for_del_arr[@]} ; do
_not_in_use_by_others=true
_realpath_doc_root="$(realpath $_doc_root)"
for _val in ${_all_document_root_dirs_arr[@]} ; do
IFS=':' read -a _val_arr <<< "$_val"
if [[ "${_val_arr[0]}" = "$_realpath_doc_root" ]] ; then
__tmp_vhost_file=${_val_arr[1]}
__realpath_apache_vhost_dir="$(realpath "$apache_vhost_dir")"
__index_subdir_realpath_apache_vhost_dir="$(expr ${#__realpath_apache_vhost_dir} + 1)"
__vhost_file="${__tmp_vhost_file:$__index_subdir_realpath_apache_vhost_dir}"
if ! containsElement "$__vhost_file" "${vhost_file_marked_for_del_arr[@]}" ; then
_not_in_use_by_others=false
__msg="The DocumentRoot directory \033[1m${_doc_root}\033[m is also used
by vhost configuration file
\033[1m$__vhost_file\033[m
But this file isn't marked for deletion.
So also the DocumentRoot will not marked for deletion."
msg_exclude_doc_root_from_del_arr[${#msg_exclude_doc_root_from_del_arr[@]}]="$__msg"
break
fi
fi
done
if $_not_in_use_by_others ; then
if ! containsElement "$_doc_root" "${docroot_marked_for_del_arr[@]}" ; then
docroot_marked_for_del_arr+=("${_doc_root}")
fi
fi
done
# - DocumentRoot directories requested for deletion
# -
echo ""
echo " DocumentRoot directories requested for deletion"
if [[ ${#docroot_req_for_del_arr[@]} -gt 0 ]]; then
for _doc_root in ${docroot_req_for_del_arr[@]} ; do
echo " $_doc_root"
done
else
echo -e " *** \033[33mNo DocumentRoot directories are requested for deletion\033[m ***"
fi
# - DocumentRoot directories marked for deletion
# -
echo ""
echo " DocumentRoot directories marked for deletion"
if [[ ${#docroot_marked_for_del_arr[@]} -gt 0 ]]; then
for _doc_root in ${docroot_marked_for_del_arr[@]} ; do
echo " $_doc_root"
done
else
echo -e " *** \033[33mNo DocumentRoot directories are marked for deletion\033[m ***"
fi
# -----
# - Warn about DocumentRoot directories that connot be deleted it is referenced
# - by vhost configuration files NOT marked for deletion.
# -----
CUR_IFS=$IFS
IFS=''
msg=""
declare -i _counter=1
if [[ ${#msg_exclude_doc_root_from_del_arr[@]} -gt 0 ]] ; then
for _msg in ${msg_exclude_doc_root_from_del_arr[@]} ; do
if [[ $_counter -eq 1 ]]; then
msg="$_msg"
else
msg="$msg\n\n $_msg"
fi
_counter=$((_counter+1))
done
warn "$msg"
fi
IFS=$CUR_IFS
echo ""
echo -e "\033[32m\033[1m------\033[m"
echo -e "Summary Databases"
echo -e "\033[32m\033[1m------\033[m"
# ==========
# - Databses
# ==========
# - Check if database can savely be marked for deletion. That is, if documentroot
# - is alaos marked for deletion.
# -
if [[ ${#database_req_for_del_arr[@]} -gt 0 ]]; then
_tmp_arr=()
for _val in "${database_req_for_del_arr[@]}" ; do
IFS=':' read -a _val_arr <<< "${_val}"
if containsElement "${_val_arr[1]}" "${docroot_marked_for_del_arr[@]}" ; then
if ! containsElement "${_val_arr[0]}" "${_tmp_arr[@]}" ; then
#if ! containsElement "${_val_arr[0]}:${_val_arr[1]}" "${database_marked_for_del_arr[@]}" ; then
database_marked_for_del_arr+=("${_val_arr[0]}:${_val_arr[1]}")
_tmp_arr+=("${_val_arr[0]}")
fi
else
__msg="Database \033[1m${_val_arr[0]}\033[m is in use by DocumentRoot directory
\033[1m${_val_arr[1]}\033[m,
but this directory is NOT marked for deletion.
So also the database is not marked for deletion"
msg_exclude_db_from_del_arr[${#msg_exclude_db_from_del_arr[@]}]="$__msg"
fi
done
fi
# - Databases(s) requested for deletion
# -
echo ""
echo " Databases(s) requested for deletion"
_printed_arr=()
if [[ ${#database_req_for_del_arr[@]} -gt 0 ]]; then
for _val in "${database_req_for_del_arr[@]}" ; do
IFS=':' read -a _val_arr <<< "${_val}"
if ! containsElement "${_val_arr[0]}" "${_printed_arr[@]}" ; then
echo " ${_val_arr[0]}"
fi
_printed_arr+=("${_val_arr[0]}")
done
else
echo -e " *** \033[33mNo Database is requested for deletion\033[m ***"
fi
# - Databases marked for deletion
# -
echo ""
echo " Database(s) marked for deletion"
if [[ ${#database_marked_for_del_arr[@]} -gt 0 ]]; then
for _val in "${database_marked_for_del_arr[@]}" ; do
IFS=':' read -a _val_arr <<< "${_val}"
echo " ${_val_arr[0]}"
done
else
echo -e " *** \033[33mNo Database is marked for deletion\033[m ***"
fi
# -----
# - Warn about Databases, which will not be marked for deletion.
# -----
CUR_IFS=$IFS
IFS=''
msg=""
declare -i _counter=1
if [[ ${#msg_exclude_db_from_del_arr[@]} -gt 0 ]] ; then
for _msg in ${msg_exclude_db_from_del_arr[@]} ; do
if [[ $_counter -eq 1 ]]; then
msg="$_msg"
else
msg="$msg\n\n $_msg"
fi
_counter=$((_counter+1))
done
warn "$msg"
fi
IFS=$CUR_IFS
echo ""
echo -e "\033[32m\033[1m------\033[m"
echo -e "Summary Domains - This may take some time, perhaps some minutes.."
echo -e "\033[32m\033[1m------\033[m"
# ==========
# - Domains
# ==========
# - Check if domain can savely be marked for deletion. That is, if no remaining
# - VHost configuration files contains hostname concerning that domain
# -
for domain in "${domain_req_for_del_arr[@]}" ; do
if containsElement "$domain" "${no_vhost_config_found[@]}" ; then
__msg="No VHost configuration present for domain \033[37m\033[1m${domain}\033[m. The domain is not
marked for deletion."
msg_exclude_domain_from_del_arr[${#msg_exclude_domain_from_del_arr[@]}]="$__msg"
continue
fi
_not_found=false
IFS=':' read -a _val_arr <<< "${vhost_file_domain_arr["$domain"]}"
for _vhost_file in "${_val_arr[@]}" ; do
if ! containsElement "$_vhost_file" "${vhost_file_marked_for_del_arr[@]}" ; then
_not_found=true
fi
done
if $_not_found ; then
__msg="At least VHost configuration File \033[33m${_vhost_file}\033[m for
domain \033[37m\033[1m${domain}\033[m is excluded from deletion. So also the domain
itself will not marked for deletion."
msg_exclude_domain_from_del_arr[${#msg_exclude_domain_from_del_arr[@]}]="$__msg"
else
sleep 1
zone="$(ssh -q -p $DNS_SSH_PORT \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
-i $DNS_SSH_KEY \
-l $DNS_SSH_USER \
$DNS_MASTER_SERVER "sudo $SCRIPT_get_domain_by_hostname $domain" 2> /dev/null)"
if [[ $? -gt 0 ]] ;then
if [[ $? -eq 10 ]] ; then
error "\033[1m$domain\033[m is not a valid hostname/domain"
elif [[ $? -eq 11 ]]; then
error "\033[1m$domain\033[m is not supported by \033[1m$domain\033[m."
elif [[ $? -eq 12 ]] ; then
error "\033[1m$domain\033[m is supported but \033[1m$domain\033[m is not the master."
else
error "Unknow error on accessing \033[1m$SCRIPT_get_domain_by_hostname\033[m on Nameserver \"$DNS_MASTER_SERVER\"!"
fi
fi
if [[ "$zone" = "$domain" ]]; then
domain_marked_for_del_arr+=("$domain")
else
_a_record="$(dig +short \@$DNS_MASTER_SERVER $domain A)"
_aaaa_record="$(dig +short \@$DNS_MASTER_SERVER $domain AAAA)"
if [[ -n "$_a_record" ]] || [[ -n "$_aaaa_record" ]] ; then
__msg="\033[37m\033[1m$domain\033[m itself is not a zone, but has an 'A' or 'AAAA' record on
Nameserver \033[37m\033[1m$DNS_MASTER_SERVER\033[m. $domain is not marked for deletion."
if [[ -n "$_a_record" ]]; then
A_record_marked_for_del_arr+=("$domain")
fi
if [[ -n "$_aaaa_record" ]]; then
AAAA_record_marked_for_del_arr+=("$domain")
fi
else
_a_record="$(dig +short $domain A)"
_aaaa_record="$(dig +short $domain AAAA)"
if [[ -n "$_a_record" ]] || [[ -n "$_aaaa_record" ]] ; then
__msg="\033[37m\033[1m$domain\033[m itself is not a zone, also no 'A' or 'AAAA' record was found
on Nameserver \033[37m\033[1m$DNS_MASTER_SERVER\033[m, but exist on an other another Nameserver.
$domain is not marked for deletion."
else
__msg="\033[37m\033[1m$domain\033[m itself is not a zone, also no 'A' or 'AAAA' record was found
on Nameserver \033[37m\033[1m$DNS_MASTER_SERVER\033[m. $domain is not marked for deletion."
fi
fi
msg_exclude_domain_from_del_arr[${#msg_exclude_domain_from_del_arr[@]}]="$__msg"
fi
fi
done
# - Domain(s) files requested for deletion
# -
echo ""
echo " Domain(s) requested for deletion"
if [[ ${#domain_req_for_del_arr[@]} -gt 0 ]]; then
for _domain in "${domain_req_for_del_arr[@]}" ; do
echo " $_domain"
done
else
echo -e " *** \033[33mNo Domain is requested for deletion\033[m ***"
fi
# - Domain(s) marked for deletion
# -
echo ""
echo " Domain(s) marked for deletion"
if [[ ${#domain_marked_for_del_arr[@]} -gt 0 ]]; then
for _domain in "${domain_marked_for_del_arr[@]}" ; do
echo " $_domain"
done
else
echo -e " *** \033[33mNo Domain is marked for deletion\033[m ***"
fi
# -----
# - Warn about Domains, which will not be marked for deletion.
# -----
CUR_IFS=$IFS
IFS=''
msg=""
declare -i _counter=1
if [[ ${#msg_exclude_domain_from_del_arr[@]} -gt 0 ]] ; then
for _msg in ${msg_exclude_domain_from_del_arr[@]} ; do
if [[ $_counter -eq 1 ]]; then
msg="$_msg"
else
msg="$msg\n\n $_msg"
fi
_counter=$((_counter+1))
done
warn "$msg"
fi
IFS=$CUR_IFS
echo ""
echo -e "\033[1m====================\033[m"
info "For each 'Summary' kategory, you will be requested to confirm deletions.
Type uppercase 'YES' to continue."
echo -e "\033[1m====================\033[m"
echo ""
echo -e -n "\033[1mContinue:\033[m "
read OK
echo ""
if [[ "$OK" != "YES" ]] ; then
fatal "Abort by user request - Answer as not 'YES'"
fi
apache_needs_restart=false
delete_vhost_file=false
if [[ ${#vhost_file_marked_for_del_arr[@]} -gt 0 ]]; then
echo ""
echo -e "\033[32m------\033[m"
echo -e "Remove VHost Configuration from Webservice"
echo -e "\033[32m------\033[m"
for _vhost_file in ${vhost_file_marked_for_del_arr[@]} ; do
echo " $_vhost_file"
done
apache_needs_restart=true
OK=""
echo ""
echo "Type 'y' to continue 'n' or any other key to skip removal of VHost configurations"
echo
echo -e -n "\033[1mContinue removing VHost Configurations [y/n]:\033[m "
read OK
while [[ "X${OK}X" = "XX" ]] ; do
echo ""
echo -e -n "\033[1mContinue removing VHost Configurations [y/n]:\033[m "
read OK
done
if [[ "${OK,,}" = 'yes' ]] || [[ "${OK,,}" = 'y' ]]; then
echo ""
echo "" >> $main_log
echo "" >> $main_log
echo "# ======" >> $main_log
echo "# - Remove VHost Configuration from Webservice" >> $main_log
echo "# -">> $main_log
for _vhost_file in ${vhost_file_marked_for_del_arr[@]} ; do
echo "# - $_vhost_file" >> $main_log
done
echo "# ======" >> $main_log
echononl " Backup existing VHost Configuration directory"
if [[ -d "$apache_vhost_base_dir" ]]; then
echo "" >> $main_log
echo "# - Backup existing VHost Configuration directory" >> $main_log
echo "# -" >> $main_log
echo "cp -a \"$apache_vhost_base_dir" "${apache_vhost_base_dir}.$backup_date\"" >> $main_log
cp -a "$apache_vhost_base_dir" "${apache_vhost_base_dir}.$backup_date" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
fi
else
echo_skipped
fi
# - Respect apache2 from debian package system
# -
if [[ "$(basename $apache_vhost_base_dir)" = "sites-available" ]]; then
_delete_dir="${apache_vhost_base_dir}/DELETED"
else
_delete_dir="${apache_vhost_dir}/DELETED"
fi
echononl " Create sub-directory 'DELETED'"
if [[ ! -d "$_delete_dir" ]] ; then
echo "" >> $main_log
echo "# - Create sub-directory 'DELETED'" >> $main_log
echo "# -" >> $main_log
echo "mkdir \"$_delete_dir\"" >> $main_log
mkdir "$_delete_dir" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
else
echo_skipped
fi
echo ""
for _vhost_file in ${vhost_file_marked_for_del_arr[@]} ; do
# - Respect apache2 from debian package system
# -
_vhost_file_to_move="${apache_vhost_dir}/$_vhost_file"
if [[ "$(basename $apache_vhost_dir)" = "sites-enabled" ]]; then
_vhost_file_to_move="$(realpath ${apache_vhost_dir}/$_vhost_file)"
echo "" >> $main_log
echo "# - Delete Symlink '${apache_vhost_dir}/$_vhost_file'" >> $main_log
echo "# -" >> $main_log
echo "rm \"${apache_vhost_dir}/$_vhost_file\"" >> $main_log
echononl " Delete Symlink '${apache_vhost_dir}/$_vhost_file'"
rm "${apache_vhost_dir}/$_vhost_file" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
fi
echo "" >> $main_log
echo "# - Removing VHost configuration '$(basename $_vhost_file_to_move)'" >> $main_log
echo "# -" >> $main_log
echo "mv \"$_vhost_file_to_move\" \"$_delete_dir\"" >> $main_log
echononl " Removing VHost configuration \033[1m$(basename $_vhost_file_to_move)\033[m"
_dehydrated_name="$(grep ServerName $_vhost_file_to_move | awk '{print$2}' | sort -u)"
mv "$_vhost_file_to_move" "$_delete_dir" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
if containsElement "$_dehydrated_name" "${dehydrated_name_req_for_del_arr[@]}" ; then
if ! containsElement "$_dehydrated_name" "${dehydrated_name_marked_for_del_arr[@]}" ; then
dehydrated_name_marked_for_del_arr+=("$_dehydrated_name")
fi
fi
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
done # for _vhost_file in ${vhost_file_marked_for_del_arr[@]}
echo ""
fi
else
echo ""
echo -e "\033[32m------\033[m"
echo -e "*** \033[33mNo VHost configuration files are marked for deletion\033[m ***"
echo -e "\033[32m------\033[m"
fi
if [[ ${#dehydrated_name_marked_for_del_arr[@]} -gt 0 ]]; then
echo ""
echo -e "\033[32m------\033[m"
echo -e "Remove Entries from dehydrated's domains.txt file?"
echo -e "\033[32m------\033[m"
for _dehydrated_enty in ${dehydrated_name_marked_for_del_arr[@]} ; do
echo " $_dehydrated_enty"
done
OK=""
echo ""
echo "Type 'y' to continue 'n' or any other key to skip removal for domain entries"
echo
echo -e -n "\033[1mContinue removing concerning entries from dehydrated's domains.txt file [y/n]:\033[m "
read OK
while [[ "X${OK}X" = "XX" ]] ; do
echo ""
echo -e -n "\033[1mContinue removing concerning entries from dehydrated's domains.txt file [y/n]:\033[m "
read OK
done
if [[ "${OK,,}" = 'yes' ]] || [[ "${OK,,}" = 'y' ]]; then
echononl " Backup existing domains.txt file"
if [[ -d "$apache_vhost_base_dir" ]]; then
echo "" >> $main_log
echo "# - Backup existing domains.txt file" >> $main_log
echo "# -" >> $main_log
echo "cp -a \"$dehydrated_domains_file" "${dehydrated_domains_file}.$backup_date\"" >> $main_log
cp -a "$dehydrated_domains_file" "${dehydrated_domains_file}.$backup_date" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
fi
else
echo_skipped
fi
for _dehydrated_enty in ${dehydrated_name_marked_for_del_arr[@]} ; do
echo "# - Removing '$_dehydrated_enty' from dehydrated's domains.txt file." >> $main_log
echo "# -" >> $main_log
echo "sed -i \"/$_dehydrated_enty/d\" $dehydrated_domains_file" >> $main_log
echononl " Removing \033[1m$_dehydrated_enty\033[m from dehydrated's domains.txt file."
sed -i "/$_dehydrated_enty/d" $dehydrated_domains_file > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
done
fi
else
echo ""
echo -e "\033[32m------\033[m"
echo -e "*** \033[33mNo domain entry in dehydrated's domain file is marked for deletion\033[m ***"
echo -e "\033[32m------\033[m"
fi
if [[ ${#docroot_marked_for_del_arr[@]} -gt 0 ]]; then
echo ""
echo -e "\033[32m------\033[m"
echo -e "Remove DocumentRoot directories"
echo -e "\033[32m------\033[m"
for _doc_root in ${docroot_marked_for_del_arr[@]} ; do
echo " $_doc_root"
done
OK=""
echo ""
echo "Type 'y' to continue 'n' or any other key to skip removal of DocumentRoot directories"
echo
echo -e -n "\033[1mContinue removing DocumentRoot directories [y/n]:\033[m "
read OK
while [[ "X${OK}X" = "XX" ]] ; do
echo ""
echo -e -n "\033[1mContinue removing DocumentRoot directories [y/n]:\033[m "
read OK
done
if [[ "${OK,,}" = 'yes' ]] || [[ "${OK,,}" = 'y' ]]; then
echo ""
echo "" >> $main_log
echo "" >> $main_log
echo "# ======" >> $main_log
echo "# - Remove DocumentRoot directories" >> $main_log
echo "# -">> $main_log
for _doc_root in ${docroot_marked_for_del_arr[@]} ; do
echo "# - $_doc_root" >> $main_log
done
echo "# ======" >> $main_log
_delete_dir="${apache_web_base_dir}/DELETED"
echononl " Create sub-directory 'DELETED'"
if [[ ! -d "$_delete_dir" ]] ; then
echo "" >> $main_log
echo "# - Create sub-directory 'DELETED'" >> $main_log
echo "# -" >> $main_log
echo "mkdir \"$_delete_dir\"" >> $main_log
mkdir "$_delete_dir" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
else
echo_skipped
fi
for _doc_root in ${docroot_marked_for_del_arr[@]} ; do
_dir_to_remove="$(dirname $_doc_root)"
if [[ -e "${_delete_dir}/$(basename $_dir_to_remove)" ]] ; then
echo "" >> $main_log
echo "# - Backup existing file '${_delete_dir}/$(basename $_dir_to_remove)'" >> $main_log
echo "# -" >> $main_log
echo "mv \"${_delete_dir}/$(basename $_dir_to_remove)\" \"${_delete_dir}/$(basename $_dir_to_remove).$backup_date\"" >> $main_log
echononl " Backup existing file '${_delete_dir}/$(basename $_dir_to_remove)'"
mv "${_delete_dir}/$(basename $_dir_to_remove)" "${_delete_dir}/$(basename $_dir_to_remove).$backup_date" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
fi
echo "" >> $main_log
echo "# - Removing DocumentRoot directory '$(basename $_dir_to_remove)'" >> $main_log
echo "# -" >> $main_log
echo "mv \"$_dir_to_remove\" \"$_delete_dir\"" >> $main_log
echononl " Removing DocumentRoot directory \033[1m$(basename $_dir_to_remove)\033[m"
mv "$_dir_to_remove" "$_delete_dir" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
done
fi
else
echo ""
echo -e "\033[32m------\033[m"
echo -e "*** \033[33mNo DocumentRoot directories are marked for deletion\033[m ***"
echo -e "\033[32m------\033[m"
fi
if [[ ${#database_marked_for_del_arr[@]} -gt 0 ]]; then
echo ""
echo -e "\033[32m------\033[m"
echo -e "Remove (MySQL) Databases"
echo -e "\033[32m------\033[m"
for _val in "${database_marked_for_del_arr[@]}" ; do
IFS=':' read -a _val_arr <<< "${_val}"
echo " ${_val_arr[0]}"
done
OK=""
echo ""
echo "Type 'y' to continue 'n' or any other key to skip removal of Databases"
echo
echo -e -n "\033[1mContinue removing Databases [y/n]:\033[m "
read OK
while [[ "X${OK}X" = "XX" ]] ; do
echo ""
echo -e -n "\033[1mContinue removing Databases [y/n]:\033[m "
read OK
done
if [[ "${OK,,}" = 'yes' ]] || [[ "${OK,,}" = 'y' ]]; then
echo ""
echo "" >> $main_log
echo "" >> $main_log
echo "# ======" >> $main_log
echo "# - Remove (MySQL) Databases" >> $main_log
echo "# -">> $main_log
for _val in "${database_marked_for_del_arr[@]}" ; do
IFS=':' read -a _val_arr <<< "${_val}"
echo "# - ${_val_arr[0]}" >> $main_log
done
echo "# ======" >> $main_log
_backup_dir="${apache_web_base_dir}/DELETED/$(basename $(dirname ${_val_arr[1]}))"
echononl " Create Backup directory '$_backup_dir'.."
if [[ ! -d "$_backup_dir" ]]; then
echo "" >> $main_log
echo "# - Create '$_backup_dir'" >> $main_log
echo "# -" >> $main_log
echo "mkdir \"$_backup_dir\"" >> $main_log
mkdir "$_backup_dir" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
else
echo_skipped
fi
for _val in "${database_marked_for_del_arr[@]}" ; do
IFS=':' read -a _val_arr <<< "${_val}"
echo "" >> $main_log
echo "# - Backup Backup Database '${_val_arr[0]}'" >> $main_log
echo "# -" >> $main_log
echo "mysqldump $MYSQL_CREDENTIAL_ARGS --opt ${_val_arr[0]} | gzip > \"${_backup_dir}/${_val_arr[0]}-${backup_date}.sql.gz\"" >> $main_log
echononl " Backup Database '${_val_arr[0]}'.."
mysqldump $MYSQL_CREDENTIAL_ARGS --opt ${_val_arr[0]} 2> $tmp_log_file | gzip > "${_backup_dir}/${_val_arr[0]}-${backup_date}.sql.gz" 2>> $tmp_log_file
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
echo "" >> $main_log
echo "# - Remove Database '${_val_arr[0]}'" >> $main_log
echo "# -" >> $main_log
echo "mysql $MYSQL_CREDENTIAL_ARGS -N -s -A -e \"DROP DATABASE ${_val_arr[0]}\"" >> $main_log
echononl " Remove Database '${_val_arr[0]}'"
mysql $MYSQL_CREDENTIAL_ARGS -N -s -A -e "DROP DATABASE ${_val_arr[0]}" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
echo "" >> $main_log
echo "# - Cleanup table mysql.db from Database '${_val_arr[0]}'" >> $main_log
echo "# -" >> $main_log
echo "mysql $MYSQL_CREDENTIAL_ARGS -N -s -A -e \"USE mysql; DELETE FROM db WHERE Db = ' ${_val_arr[0]}'\"" >> $main_log
echononl " Cleanup table mysql.db from Database '${_val_arr[0]}'"
mysql $MYSQL_CREDENTIAL_ARGS -N -s -A -e "USE mysql; DELETE FROM db WHERE Db = '${_val_arr[0]}'" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
# - Try to remove concerning User from table mysql.user
# -
# - do it only if the user meets the following facts
# - - user's name is the same as the database name
# - - user does not appear in table mysql.db
# -
echononl " Drop User '${_val_arr[0]}' from table 'mysql.user'"
_count_user_tbl_db=$(mysql $MYSQL_CREDENTIAL_ARGS -N -s -A -e "USE mysql; SELECT count(User) from db WHERE User = '${_val_arr[0]}'" )
if [[ $? -eq 0 ]] && [[ $_count_user_tbl_db -eq 0 ]]; then
echo "" >> $main_log
echo "# - Drop User '${_val_arr[0]}' from table 'mysql.user'" >> $main_log
echo "# -" >> $main_log
echo "mysql $MYSQL_CREDENTIAL_ARGS -N -s -A -e \"USE mysql; DELETE FROM user WHERE User = '${_val_arr[0]}'\"" >> $main_log
mysql $MYSQL_CREDENTIAL_ARGS -N -s -A -e "USE mysql; DELETE FROM user WHERE User = '${_val_arr[0]}'" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
else
echo_skipped
fi # if [[ $? -eq 0 ]] && [[ $_count_user_tbl_user -eq 1 ]]; then
echo "" >> $main_log
echo "# - FLUSH PRIVILEGES" >> $main_log
echo "# -" >> $main_log
echo "mysql $MYSQL_CREDENTIAL_ARGS -N -s -A -e \"FLUSH PRIVILEGES\"" >> $main_log
echononl " FLUSH PRIVILEGES"
mysql $MYSQL_CREDENTIAL_ARGS -N -s -A -e "FLUSH PRIVILEGES" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
done
fi
else
echo ""
echo -e "\033[32m------\033[m"
echo -e "*** \033[33mNo Database is marked for deletion\033[m ***"
echo -e "\033[32m------\033[m"
fi
if [[ ${#domain_marked_for_del_arr[@]} -gt 0 ]]; then
echo ""
echo -e "\033[32m------\033[m"
echo -e "Remove Domain - this may take some time"
echo -e "\033[32m------\033[m"
for _domain in "${domain_marked_for_del_arr[@]}" ; do
echo " $_domain"
done
OK=""
echo ""
echo "Type 'y' to continue 'n' or any other key to skip removal of Domains"
echo
echo -e -n "\033[1mContinue removing Domains [y/n]:\033[m "
read OK
while [[ "X${OK}X" = "XX" ]] ; do
echo ""
echo -e -n "\033[1mContinue removing Domains [y/n]:\033[m "
read OK
done
if [[ "${OK,,}" = 'yes' ]] || [[ "${OK,,}" = 'y' ]]; then
echo ""
echo "" >> $main_log
echo "" >> $main_log
echo "# ======" >> $main_log
echo "# - Remove Domains" >> $main_log
echo "# -">> $main_log
for _domain in "${domain_marked_for_del_arr[@]}" ; do
echo "# - $_domain" >> $main_log
done
echo "# ======" >> $main_log
for _domain in "${domain_marked_for_del_arr[@]}" ; do
echo "" >> $main_log
echo "# - Remove Zone '$_domain' from Nameserver $DNS_MASTER_SERVER (master)" >> $main_log
echo "# -" >> $main_log
cat <<EOF >> $main_log
ssh -q -p $DNS_SSH_PORT \\
-o BatchMode=yes \\
-o StrictHostKeyChecking=no \\
-i $DNS_SSH_KEY \\
-l $DNS_SSH_USER \\
$DNS_MASTER_SERVER "sudo $SCRIPT_remove_master_domain -d $_domain"
EOF
echononl " Remove Zone '$_domain' from '$DNS_MASTER_SERVER' (master)"
ssh -q -p $DNS_SSH_PORT \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
-i $DNS_SSH_KEY \
-l $DNS_SSH_USER \
$DNS_MASTER_SERVER "sudo $SCRIPT_remove_master_domain -d $_domain" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
if $include_slave_dns ; then
echo "" >> $main_log
echo "# - Remove Zone '$_domain' from Nameserver $DNS_SLAVE_SERVER (slave)" >> $main_log
echo "# -" >> $main_log
cat <<EOF >> $main_log
ssh -q -p $DNS_SSH_PORT \\
-o BatchMode=yes \\
-o StrictHostKeyChecking=no \\
-i $DNS_SSH_KEY \\
-l $DNS_SSH_USER \\
$DNS_SLAVE_SERVER "sudo $SCRIPT_remove_slave_domain -d $_domain"
EOF
echononl " Remove Zone '$_domain' from '$DNS_SLAVE_SERVER' (slave)"
ssh -q -p $DNS_SSH_PORT \
-o BatchMode=yes \
-o StrictHostKeyChecking=no \
-i $DNS_SSH_KEY \
-l $DNS_SSH_USER \
$DNS_SLAVE_SERVER "sudo $SCRIPT_remove_slave_domain -d $_domain" > $tmp_log_file 2>&1
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
fi # if $include_slave_dns
done # for _domain in "${domain_marked_for_del_arr[@]}"
fi
else
echo ""
echo -e "\033[32m------\033[m"
echo -e "*** \033[33mNo Domain is marked for deletion\033[m ***"
echo -e "\033[32m------\033[m"
fi
#if [[ ${#A_record_marked_for_del_arr[@]} -gt 0 ]] || [[ ${#AAAA_record_marked_for_del_arr[@]} -gt 0 ]] ; then
# echo ""
# echo -e "\033[32m------\033[m"
# echo -e "Remove Records from zone file"
# echo -e "\033[32m------\033[m"
#
# for _record in "${A_record_marked_for_del_arr[@]}" ; do
# echo " A Record for $_domain"
# done
# for _record in "${AAAA_record_marked_for_del_arr[@]}" ; do
# echo " AAAA Record for $_domain"
# done
#
# OK=""
# echo ""
# echo "Type 'y' to continue 'n' or any other key to skip removal of Domains"
# echo
# echo -e -n "\033[1mContinue removing records from zone file [y/n]:\033[m "
# read OK
# while [[ "X${OK}X" = "XX" ]] ; do
# echo ""
# echo -e -n "\033[1mContinue removing Domains [y/n]:\033[m "
# read OK
# done
#
# if [[ "${OK,,}" = 'yes' ]] || [[ "${OK,,}" = 'y' ]]; then
# echo ""
# for _record in "${A_record_marked_for_del_arr[@]}" ; do
# echo -e " Removing A Record for \033[1m$_domain\033[m"
# done
# for _record in "${AAAA_record_marked_for_del_arr[@]}" ; do
# echo -e " Removing AAAA Record for \033[1m$_domain\033[m"
# done
#
# fi
#
##else
## echo ""
## echo -e "*** \033[33mNo Domain is marked for deletion\033[m ***"
#fi
if $apache_needs_restart ; then
echo ""
echo -e "\033[32m------\033[m"
echo -e "Restart Apache Webservice"
echo -e "\033[32m------\033[m"
OK=""
echo ""
echo "Type 'y' to continue 'n' or any other key to skip removal of Domains"
echo
echo -e -n "\033[1mRestart Apache Webservice [y/n]:\033[m "
read OK
while [[ "X${OK}X" = "XX" ]] ; do
echo ""
echo -e -n "\033[1mRestart Apache Webservice [y/n]:\033[m "
read OK
done
if [[ "${OK,,}" = 'yes' ]] || [[ "${OK,,}" = 'y' ]]; then
echo "" >> $main_log
echo "# - Graceful Restart Apache Webservice" >> $main_log
echo "# -" >> $main_log
echo "apachectl graceful" >> $main_log
echo ""
echononl " Graceful restart Apache Webservice.."
apachectl graceful
if [[ $? -eq 0 ]]; then
echo_ok
else
echo_failed
error "$(cat $tmp_log_file)"
echo "Error: $(cat $tmp_log_file)" >> $main_log
fi
fi # if [[ "${OK,,}" = 'yes' ]] || [[ "${OK,,}" = 'y' ]]; then
fi # if $apache_needs_restart
echo ""
clean_up