If CMS is installed and a sub-module requires to be configured per CMS, this is handeled by new 'CMSHook-(pre)conf.sh' this has been added to Dev Docs Updated postfix sub-module to use new CMSHook Added 'itype' var for detection of install script type Now also storeing 'Allways on modules' in installer as EnabledAons
756 lines
26 KiB
Bash
756 lines
26 KiB
Bash
#!/bin/bash
|
|
|
|
###############################
|
|
# @author: Bram Prieshof #
|
|
# @author: Branco van de Waal #
|
|
###############################
|
|
|
|
itype=Main
|
|
|
|
##--------------------##
|
|
# Legacy/Main Menu #
|
|
##--------------------##
|
|
sed -i -e 's/magenta/blue/g' /etc/newt/palette
|
|
|
|
if [ "$1" != "-l" ]; then
|
|
APTMODE="debconf-apt-progress -- apt"
|
|
OUTPUT='/dev/null'
|
|
IMODE=n
|
|
fi
|
|
if [ "$1" = "-l" ]; then
|
|
APTMODE="apt"
|
|
OUTPUT='/dev/tty'
|
|
IMODE=l
|
|
fi
|
|
|
|
|
|
##---------------##
|
|
# Static-Vars #
|
|
##---------------##
|
|
|
|
#Git-repo
|
|
repo=https://git.ictmaatwerk.com/VPS-scripts/Web-V2
|
|
branch=PostfixTesting
|
|
branchtype=branch #=branch for branch and =tag for release
|
|
#Installer-config
|
|
phpver=7.4
|
|
PHPMyadmin=1 #Overwriten by cms's without php
|
|
sqlver=8.0
|
|
TestMode=0
|
|
#PackageManager-config
|
|
|
|
dist_ver=$(grep --color=never -Po "^VERSION_ID=\K.*" "/etc/os-release")
|
|
dist=$(grep --color=never -Po "^ID=\K.*" "/etc/os-release")
|
|
|
|
if [[ "${dist}" == *"ubuntu"* ]] && [[ "${dist_ver}" == *"18.04"* ]]; then
|
|
PKGM="$APTMODE"
|
|
PKGUC="$PKGM update"
|
|
PKGUP="$PKGM upgrade -y"
|
|
PKGI="${PKGM} install -y --no-install-recommends"
|
|
PKGLIST="apt"
|
|
shortdist=ubu1804
|
|
elif [[ "${dist}" == *"ubuntu"* ]] && [[ "${dist_ver}" == *"20.04"* ]]; then
|
|
PKGM="$APTMODE"
|
|
PKGUC="$PKGM update"
|
|
PKGUP="$PKGM upgrade -y"
|
|
PKGI="${PKGM} install -y --no-install-recommends"
|
|
PKGLIST="apt"
|
|
shortdist=ubu2004
|
|
elif [[ "${dist}" == *"debian"* ]] && [[ "${dist_ver}" == *"10"* ]]; then
|
|
PKGM="$APTMODE"
|
|
PKGUC="$PKGM update"
|
|
PKGUP="$PKGM upgrade -y"
|
|
PKGI="${PKGM} install -y --no-install-recommends"
|
|
PKGLIST="apt"
|
|
shortdist=deb10
|
|
elif [ "$(grep -oP '(?<=^PLATFORM_ID=).+' /etc/os-release | tr -d '"')" = "platform:el8" ]; then
|
|
PKGM="dnf"
|
|
PKGUC="$PKGM check-update --refresh"
|
|
PKGUP="$PKGM update -y"
|
|
PKGI="${PKGM} install --setopt=install_weak_deps=False --best -y"
|
|
PKGLIST="dnf"
|
|
shortdist=el8
|
|
else
|
|
echo "This os in not supported"
|
|
exit
|
|
fi
|
|
|
|
unset dist_ver dist APTMODE
|
|
|
|
|
|
##-------------##
|
|
# Test-Vars #
|
|
##-------------##
|
|
|
|
syscheckoff=0
|
|
if [ $TestMode = 1 ]; then
|
|
domain=ict-dagbesteding.nl
|
|
sitename=ict_DB_nl
|
|
email=b.prieshof@ictmaatwerk.com
|
|
password=MeiFerrieSekureTESTp@ssw0rd4213
|
|
hostname=vdh001.nxdi.nl
|
|
sslenable=0
|
|
domainwww=0
|
|
fi
|
|
|
|
|
|
##---------------------##
|
|
# Always-on modules #
|
|
##---------------------##
|
|
|
|
aonoption="/MySQL/"
|
|
aonoption="$aonoption /Unattended-Security-Updates/"
|
|
aonoption="$aonoption /Backup-Util/"
|
|
aonoption="$aonoption /AcmeSH/"
|
|
|
|
|
|
##---------------##
|
|
# Functions #
|
|
##---------------##
|
|
|
|
msg () {
|
|
if [ $IMODE = n ]; then
|
|
TERM=ansi whiptail --title "Info" --infobox "$1" 8 52
|
|
fi
|
|
if [ $IMODE = l ]; then
|
|
echo "$1"
|
|
fi
|
|
}
|
|
|
|
function PasswordQuest {
|
|
passdiaone=$(whiptail --nocancel --passwordbox "Please enter your password (Requires 8 chars, uper & lower case, special and numerical)" 11 91 --title "Config" 3>&1 1>&2 2>&3)
|
|
if [ -z $passdiaone ]; then PasswordQuest; fi
|
|
if [[ ${#passdiaone} -ge 8 && "$passdiaone" == *[[:lower:]]* && "$passdiaone" == *[[:upper:]]* && "$passdiaone" == *[0-9]* && "$passdiaone" == *['!'@#%^\&*()_+]* ]]; then
|
|
PasswordCheck
|
|
else
|
|
whiptail --ok-button Done --msgbox " Password is invalid!" 10 30
|
|
unset passdiaone
|
|
PasswordQuest
|
|
fi
|
|
}
|
|
|
|
function PasswordCheck {
|
|
#Checking password
|
|
passdiatwo=$(whiptail --nocancel --passwordbox " Please re-enter your password" 11 82 --title "Config" 3>&1 1>&2 2>&3)
|
|
if [ -z $passdiatwo ]; then
|
|
PasswordCheck
|
|
else
|
|
if [ $passdiaone != $passdiatwo ]; then
|
|
whiptail --ok-button Done --msgbox " Password does not match!" 10 30
|
|
PasswordQuest
|
|
else
|
|
password="$passdiaone"
|
|
unset passdiaone passdiatwo
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function LegacyPasswordQuest {
|
|
echo "Enter password (Requires: 8 chars, 1 capital and 1 num)"
|
|
read -s passdiaone
|
|
if [ -z $passdiaone ]; then LegacyPasswordQuest; fi
|
|
if [[ ${#passdiaone} -ge 8 && "$passdiaone" == *[[:lower:]]* && "$passdiaone" == *[[:upper:]]* && "$passdiaone" == *[0-9]* && "$passdiaone" == *['!'@#%^\&*()_+]* ]]; then
|
|
LegacyPasswordCheck
|
|
else
|
|
echo "Password is invalid!"
|
|
unset passdiaone
|
|
LegacyPasswordQuest
|
|
fi
|
|
}
|
|
|
|
function LegacyPasswordCheck {
|
|
#Checking password
|
|
echo "Please re-enter your password"
|
|
read -s passdiatwo
|
|
if [ -z $passdiatwo ]; then
|
|
LegacyPasswordCheck
|
|
else
|
|
if [ $passdiaone != $passdiatwo ]; then
|
|
echo "Password does not match!"
|
|
LegacyPasswordQuest
|
|
else
|
|
password="$passdiaone"
|
|
unset passdiaone passdiatwo
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function HostnameQuest {
|
|
if (whiptail --title "Config" --yesno " Hostname with nxdi.nl" 11 78); then
|
|
hostname=$(whiptail --nocancel --inputbox " SystemID (eg: VCH001) without ".nxdi.nl" " 11 82 --title "Config" 3>&1 1>&2 2>&3)
|
|
hostname=$hostname".nxdi.nl"
|
|
else
|
|
hostname=$(whiptail --nocancel --inputbox " Hostname" 11 78 --title "Config" 3>&1 1>&2 2>&3)
|
|
fi
|
|
}
|
|
|
|
function LegacyHostnameQuest {
|
|
while true; do
|
|
read -p "Hostname with nxdi.nl -> yes/no?" yn
|
|
case $yn in
|
|
[Nn]* )
|
|
echo 'Enter full hostname:'
|
|
read hostname
|
|
break;;
|
|
[Yy]* )
|
|
echo 'Hostname (eg: VCH001) without ".nxdi.nl":'
|
|
read hostname
|
|
hostname=$hostname".nxdi.nl"
|
|
break;;
|
|
* )echo "Choose yes or no.";;
|
|
esac
|
|
done
|
|
}
|
|
|
|
|
|
##----------------##
|
|
# System-Check #
|
|
##----------------##
|
|
|
|
if [[ "$syscheckoff" -ne 1 ]] && [[ -d /etc/ICTM ]]; then msg " This system has already been installed by Web-V2" && exit; fi
|
|
##Check for pkgs, not yet setup for Centos
|
|
# if [[ "$syscheckoff" -ne 1 ]] && [[ ! -z $(dpkg -l | cut -d " " -f 3 | grep "^mysql-server") || ! -z $(dpkg -l | cut -d " " -f 3 | grep "nginx") || ! -z $(dpkg -l | cut -d " " -f 3 | grep "apache") || ! -z $(dpkg -l | cut -d " " -f 3 | grep "php") ]] ; then msg " This system has installed packages, Web-V2 is designed for clean systems" && exit; fi
|
|
|
|
|
|
##--------------------------##
|
|
# Installer-Requirements #
|
|
##--------------------------##
|
|
|
|
msg " Starting installer" 8 78
|
|
$PKGUC > $OUTPUT 2>&1
|
|
$PKGI curl wget tar > $OUTPUT 2>&1
|
|
|
|
|
|
##--------##
|
|
# Menu #
|
|
##--------##
|
|
|
|
#Fetching Menu Entries
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/ModulesMenu.list)
|
|
|
|
if [ $IMODE = n ]; then
|
|
if [ $TestMode = 0 ]; then
|
|
domain=$(whiptail --nocancel --inputbox " Enter the domain without WWW " 11 82 --title "Config" 3>&1 1>&2 2>&3)
|
|
if (whiptail --title "Config" --yesno "Does www.${domain} exist in DNS?" 11 82 ); then
|
|
domainwww=1
|
|
else
|
|
domainwww=0
|
|
fi
|
|
if (whiptail --title "Config" --yesno "Set sitename to ${domain//./_} ?" 8 78 ); then
|
|
sitename=${domain//./_}
|
|
else
|
|
while true; do
|
|
sitename=$(whiptail --nocancel --inputbox "Enter sitename, Must NOT contain special characters, except: _" 8 66 --title "Config" 3>&1 1>&2 2>&3)
|
|
if [[ $sitename == *['!'@#\$%^\&*()+,.]* ]] || [ -z "$sitename" ]
|
|
then
|
|
whiptail --msgbox " Site can't be empty, or contain a special character except for: _" 11 76
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
fi
|
|
while true; do
|
|
HostnameQuest
|
|
if [[ "$hostname" == "$domain" ]] || [ -z "$hostname" ]
|
|
then
|
|
whiptail --msgbox " Hostname can't be empty, or be the same as the domain" 11 63
|
|
else
|
|
break
|
|
|
|
fi
|
|
done
|
|
if (whiptail --title "Config" --yesno " Enable SSL on installation?" 11 78); then
|
|
sslenable=1
|
|
else
|
|
sslenable=0
|
|
fi
|
|
PasswordQuest
|
|
email=$(whiptail --nocancel --inputbox " Enter the administrator e-mail" 11 78 --title "Config" 3>&1 1>&2 2>&3)
|
|
fi
|
|
webserv=$(whiptail --title "Select Webserver" --radiolist "WebServer" 11 74 5 "${webservers[@]}" 3>&1 1>&2 2>&3)
|
|
esws=$?
|
|
[[ "$esws" = 1 ]] && msg " Quiting installer" && exit;
|
|
fi
|
|
|
|
if [ $IMODE = l ]; then
|
|
echo "" >/dev/null
|
|
if [ $TestMode = 0 ]; then
|
|
echo "Enter the domain without WWW:"
|
|
read domain
|
|
while true; do
|
|
read -p "Does www.${domain} exist in DNS -> yes/no?" yn
|
|
case $yn in
|
|
[Yy]* ) domainwww=1
|
|
break;;
|
|
[Nn]* ) domainwww=0
|
|
break;;
|
|
* ) echo "Choose yes or no.";;
|
|
esac
|
|
done
|
|
read -p "Set sitename to ${domain//./_}? (y/n)" choice
|
|
case "$choice" in
|
|
y*|Y* ) sitename=${domain//./_};;
|
|
n*|N* ) echo "";
|
|
while true; do
|
|
echo "Please enter sitename, Must NOT contain special characters, except: _";read sitename
|
|
if [[ $sitename == *['!'@#\$%^\&*()+,.]* ]] || [ -z "$sitename" ]
|
|
then
|
|
echo "Site can't be empty, or contain a special character except for: _"
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
;;
|
|
* ) echo "invalid";;
|
|
esac
|
|
while true; do
|
|
LegacyHostnameQuest
|
|
|
|
if [[ "$hostname" == "$domain" ]] || [ -z "$hostname" ]
|
|
then
|
|
echo "Hostname can't be empty, or be the same as the domain"
|
|
else
|
|
break
|
|
|
|
fi
|
|
done
|
|
while true; do
|
|
read -p "Enable SSL on installation? -> yes/no?" yn
|
|
case $yn in
|
|
[Yy]* ) sslenable=1
|
|
break;;
|
|
[Nn]* ) sslenable=0
|
|
break;;
|
|
* ) echo "Choose yes or no.";;
|
|
esac
|
|
done
|
|
LegacyPasswordQuest
|
|
echo "Administrator E-mail:"
|
|
read email
|
|
fi
|
|
|
|
echo "Select Webserver:"
|
|
select webserv in "${webservers[@]}"; do
|
|
case $webserv in
|
|
"Quit") exit ;;
|
|
"") echo 'Invalid choice' >&2 ;;
|
|
*) break
|
|
esac
|
|
done
|
|
|
|
fi
|
|
|
|
webserv="${webserv//:}" && webserv="${webserv,,}"
|
|
|
|
#Setting Menulist to webserver
|
|
declare -n CMSL="$webserv"CMSL
|
|
declare -n options="$webserv"Options
|
|
|
|
#Generating APT-List for webserver
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CoreModules/generic/generic.pkg.list; then
|
|
curl --silent --show-error "$repo"/raw/"$branchtype"/"$branch"/CoreModules/generic/generic.pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CoreModules/generic/"$PKGLIST".pkg.list; then
|
|
curl --silent --show-error "$repo"/raw/"$branchtype"/"$branch"/CoreModules/generic/"$PKGLIST".pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
|
|
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/generic.pkg.list; then
|
|
curl --silent --show-error "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/generic.pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/"$PKGLIST".pkg.list; then
|
|
curl --silent --show-error "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/"$PKGLIST".pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
|
|
|
|
##-----------------##
|
|
# Storeing vars #
|
|
##-----------------##
|
|
|
|
mkdir -p /etc/ICTM/sites
|
|
echo "InstDate=$(date "+%d-%B-%Y")" >> /etc/ICTM/mainvar.list
|
|
|
|
for storeme in PKGM PKGI PKGUC PKGUP PKGLIST OUTPUT IMODE shortdist repo branch branchtype webserv email shortdist hostname; do
|
|
declare -p $storeme | cut -d ' ' -f 3- >> /etc/ICTM/mainvar.list
|
|
done
|
|
|
|
|
|
touch /etc/ICTM/sites/"$sitename"
|
|
|
|
##----------##
|
|
# Addons #
|
|
##----------##
|
|
##DisableOPtionMenu
|
|
if [ $IMODE = n ]; then
|
|
option=$(whiptail --nocancel --title "Additional modules" --checklist "Features" 11 74 5 "${options[@]}" 3>&1 1>&2 2>&3)
|
|
fi
|
|
if [ $IMODE = l ]; then
|
|
choice () {
|
|
local choice=$1
|
|
if [[ ${opts[choice]} ]] # toggle
|
|
then
|
|
opts[choice]=
|
|
topt=${opt//+/}
|
|
topt="${topt%"${topt##*[![:space:]]}"}"
|
|
topt=\"$topt\"
|
|
option=${option//"$topt"/}
|
|
unset topt
|
|
else
|
|
opts[choice]=+
|
|
opt="${opt%"${opt##*[![:space:]]}"}"
|
|
option+="\"$opt\" "
|
|
fi
|
|
}
|
|
PS3='Which addons should be installed?'
|
|
while :
|
|
do
|
|
echo ""
|
|
unset options2
|
|
unset OPTcounter
|
|
for E in "${options[@]}"; do
|
|
((OPTcounter++))
|
|
options2+=("${E} ${opts["$OPTcounter"]}")
|
|
done
|
|
options2+=("Done")
|
|
|
|
select opt in "${options2[@]}"
|
|
do
|
|
case $opt in
|
|
"Done") break 2;;
|
|
"") printf '%s\n' 'invalid option';;
|
|
*) choice $REPLY
|
|
break
|
|
;;
|
|
esac
|
|
done
|
|
done
|
|
option="${option%"${option##*[![:space:]]}"}"
|
|
fi
|
|
#saving selected modules
|
|
echo 'SelectedOptions=('$option')' > /etc/ICTM/selopts.list
|
|
|
|
#Cleaning options from menu
|
|
option="${option,,}" && option="${option// /}" && option="${option//:/ }" && option="${option//'"'}"
|
|
|
|
#enableing modules wanted by webserver
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/reqmodules.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/reqmodules.sh)
|
|
fi
|
|
|
|
#saving enabled Allways on modules
|
|
echo 'EnabledAons=('$aonoption')' > /etc/ICTM/selopts.list
|
|
|
|
#Combining selected option with always-on options
|
|
option="$option""$aonoption"
|
|
|
|
#Generating APT-list options
|
|
for val1 in ${option[*]}; do
|
|
modListed=$(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/extModules.list|grep "$val1")
|
|
#Checking
|
|
if test -z "$modListed"
|
|
then
|
|
#Fetching from local repo
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/generic.pkg.list; then
|
|
curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/generic.pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/"$webserv"-generic.pkg.list; then
|
|
curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/"$webserv"-generic.pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/"$PKGLIST".pkg.list; then
|
|
curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/"$PKGLIST".pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/"$webserv"-"$PKGLIST".pkg.list; then
|
|
curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/"$webserv"-"$PKGLIST".pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
else
|
|
#Fetching from remote repo
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$modListed"generic.pkg.list; then
|
|
curl --retry 7 --retry-delay 5 -s "$modListed"generic.pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$modListed""$webserv"-generic.pkg.list; then
|
|
curl "$modListed""$webserv"-generic.pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$modListed""$PKGLIST".pkg.list; then
|
|
curl --retry 7 --retry-delay 5 -s "$modListed""$PKGLIST".pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$modListed""$webserv"-"$PKGLIST".pkg.list; then
|
|
curl "$modListed""$webserv""$PKGLIST".pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
fi
|
|
done
|
|
|
|
##-------##
|
|
# CMS #
|
|
##-------##
|
|
|
|
if [ $IMODE = n ]; then
|
|
function CMSM {
|
|
CMS=$(whiptail --nocancel --title "What CMS should be installed?" --radiolist "Features" 11 118 5 "${CMSL[@]}" 3>&1 1>&2 2>&3)
|
|
if [ -z $CMS ]; then CMSM; fi
|
|
}
|
|
CMSM
|
|
fi
|
|
|
|
if [ $IMODE = l ]; then
|
|
echo "What CMS should be installed?"
|
|
#CMSPromt
|
|
select CMS in "${CMSL[@]}"; do
|
|
case CMS in
|
|
"") echo 'Invalid choice' >&2 ;;
|
|
*) break
|
|
esac
|
|
done
|
|
fi
|
|
|
|
CMS="${CMS//:}" && CMS="${CMS,,}"
|
|
|
|
#Generating APT-List CMS
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/generic.pkg.list; then
|
|
curl -s "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/generic.pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/"$webserv"-generic.pkg.list; then
|
|
curl -s "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/"$webserv"-generic.pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/"$PKGLIST".pkg.list; then
|
|
curl -s "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/"$PKGLIST".pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/"$webserv"-"$PKGLIST".pkg.list; then
|
|
curl -s "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/"$webserv"-"$PKGLIST".pkg.list >>/tmp/pkg.list
|
|
printf " " >>/tmp/pkg.list
|
|
fi
|
|
|
|
|
|
##-------------------##
|
|
# Pre-configuring #
|
|
##-------------------##
|
|
|
|
msg " Pre-configuring"
|
|
|
|
#Generic Pre-Conf
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CoreModules/generic/preconf.sh)
|
|
|
|
#Generic WebServer
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/preconf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/preconf.sh)
|
|
fi
|
|
|
|
#Preconfiguring for Modules
|
|
for val1 in ${option[*]}; do
|
|
msg "Pre-configuring $val1"
|
|
modListed=$(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/extModules.list|grep "$val1")
|
|
#Checking
|
|
if test -z "$modListed"
|
|
then
|
|
#Fetching from local repo
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/preconf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/preconf.sh)
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/"$webserv"-preconf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/"$webserv"-preconf.sh)
|
|
fi
|
|
else
|
|
#Fetching from remote repo
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$modListed"preconf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$modListed"preconf.sh)
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$modListed""$webserv"-preconf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$modListed""$webserv"-preconf.sh)
|
|
fi
|
|
fi
|
|
done
|
|
|
|
#Preconfiguring CMS
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/preconf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/preconf.sh)
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/"$webserv"-preconf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/"$webserv"-preconf.sh)
|
|
fi
|
|
|
|
#Preconfiguring module For CMS
|
|
for val1 in ${option[*]}; do
|
|
modListed=$(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/extModules.list|grep "$val1")
|
|
#Checking
|
|
if test -z "$modListed"
|
|
then
|
|
#Fetching from local repo
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/CMSHook-preconf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/CMSHook-preconf.sh)
|
|
fi
|
|
else
|
|
#Fetching from remote repo
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$modListed"CMSHook-preconf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$modListed"CMSHook-preconf.sh)
|
|
fi
|
|
fi
|
|
done
|
|
|
|
#Saving updated vars
|
|
for storeme in phpver sqlver PHPMyadmin; do
|
|
declare -p $storeme | cut -d ' ' -f 3- >> /etc/ICTM/mainvar.list
|
|
done
|
|
|
|
##-------------##
|
|
# Installer #
|
|
##-------------##
|
|
|
|
$PKGM update -y
|
|
sed -i 's/PHPprefix/'$phpPkgName'/g' /tmp/pkg.list
|
|
cat /tmp/pkg.list | xargs $PKGI
|
|
|
|
|
|
##---------------##
|
|
# Configuring #
|
|
##---------------##
|
|
msg " Configuring"
|
|
|
|
#Configuring Generic
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CoreModules/generic/conf.sh)
|
|
|
|
#Configuring WebServer
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/conf.sh)
|
|
fi
|
|
|
|
#Configuring Options
|
|
for val1 in ${option[*]}; do
|
|
msg "Configuring $val1"
|
|
modListed=$(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/extModules.list|grep "$val1")
|
|
#Checking
|
|
if test -z "$modListed"
|
|
then
|
|
#Fetching from local repo
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/conf.sh)
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/"$webserv"-conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/"$webserv"-conf.sh)
|
|
fi
|
|
else
|
|
#Fetching from remote repo
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$modListed"conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$modListed"conf.sh)
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$modListed""$webserv"-conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$modListed""$webserv"-conf.sh)
|
|
fi
|
|
fi
|
|
done
|
|
|
|
|
|
if [ $sslenable = 1 ]; then
|
|
msg " Setting up SSL" 8 78
|
|
if [ $webserv = nginx_nonphp ]; then
|
|
certwebserv=nginx
|
|
else
|
|
certwebserv=$webserv
|
|
fi
|
|
if [ $domainwww = 1 ]; then
|
|
/opt/acmesh/acme.sh --config-home '/etc/acmesh/data' --issue --"$certwebserv" --ocsp --keylength 'ec-384' -d "$domain" -d "www.$domain" > $OUTPUT 2>&1
|
|
certsatus=$?
|
|
elif [ $domainwww = 0 ]; then
|
|
/opt/acmesh/acme.sh --config-home '/etc/acmesh/data' --issue --"$certwebserv" --ocsp --keylength 'ec-384' -d "$domain" > $OUTPUT 2>&1
|
|
certsatus=$?
|
|
fi
|
|
if test $certsatus -eq 0
|
|
then
|
|
site_ext="ssl"
|
|
else
|
|
site_ext="nossl"
|
|
rm -rf /etc/acmesh/certs/$domain*
|
|
fi
|
|
unset certsatus
|
|
/opt/acmesh/acme.sh --config-home '/etc/acmesh/data' --issue --"$certwebserv" --ocsp --keylength 'ec-384' -d "$hostname" > $OUTPUT 2>&1
|
|
certsatusBackend=$?
|
|
|
|
if test $certsatusBackend -eq 0
|
|
then
|
|
siteBackend_ext="ssl"
|
|
else
|
|
siteBackend_ext="nossl"
|
|
rm -rf /etc/acmesh/certs/$hostname*
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/ssl-handler.sh; then
|
|
sslfr=1 source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CoreModules/"$webserv"/ssl-handler.sh)
|
|
fi
|
|
elif [ $sslenable = 0 ]; then
|
|
site_ext=nossl
|
|
siteBackend_ext=nossl
|
|
fi
|
|
|
|
if [ $site_ext = nossl ]; then
|
|
curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/Scripts/EnableSSL.sh -o ~/activateSSL-$domain.sh
|
|
sed -i -e 's/DOMAINname/'$domain'/' -e 's/CONFname/'$sitename'/' -e 's/DomainWWW/'$domainwww'/' -e 's/Email/'$email'/' -e 's/WebServer/'$webserv'/' ~/activateSSL-$domain.sh
|
|
fi
|
|
|
|
if [ $siteBackend_ext = nossl ]; then
|
|
if [ -z $disbackendcms ]; then
|
|
curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/Scripts/EnableSSL.sh -o ~/activateSSL-Backend.sh
|
|
sed -i -e 's/DOMAINname/'$hostname'/' -e 's/CONFname/'Backend'/' -e 's/DomainWWW/'0'/' -e 's/Email/'$email'/' -e 's/WebServer/'$webserv'/' ~/activateSSL-Backend.sh
|
|
fi
|
|
fi
|
|
|
|
msg " Configuring CMS"
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/conf.sh)
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/"$webserv"-conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CMS/"$CMS"/"$webserv"-conf.sh)
|
|
fi
|
|
|
|
if [ -z $disbackendcms ]; then
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CMS/Backend/conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CMS/Backend/conf.sh)
|
|
fi
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/CMS/Backend/"$webserv"-conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/CMS/Backend/"$webserv"-conf.sh)
|
|
fi
|
|
fi
|
|
|
|
#Configuring Module for CMS
|
|
|
|
for val1 in ${option[*]}; do
|
|
modListed=$(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/extModules.list|grep "$val1")
|
|
#Checking
|
|
if test -z "$modListed"
|
|
then
|
|
#Fetching from local repo
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/CMSHook-conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/SubModules/"$val1"/CMSHook-conf.sh)
|
|
fi
|
|
else
|
|
#Fetching from remote repo
|
|
if curl --retry 2 --retry-delay 1 --output /dev/null --silent --head --fail "$modListed"CMSHook-conf.sh; then
|
|
source <(curl --retry 7 --retry-delay 5 -s "$modListed"CMSHook-conf.sh)
|
|
fi
|
|
fi
|
|
done
|
|
|
|
##------------##
|
|
# Services #
|
|
##------------##
|
|
|
|
systemctl reload sshd fail2ban
|
|
|
|
|
|
##-------##
|
|
# Done #
|
|
##-------##
|
|
|
|
msg " Done installing!"
|
|
if stat --printf='' /etc/update-motd.d/51* 2>/dev/null; then for f in /etc/update-motd.d/51*; do bash $f; done; fi |