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
283 lines
10 KiB
Bash
283 lines
10 KiB
Bash
#!/bin/bash
|
|
|
|
###############################
|
|
# @author: Bram Prieshof #
|
|
# @author: Branco van de Waal #
|
|
###############################
|
|
|
|
itype=AddMod
|
|
|
|
##-----------------##
|
|
# Fetching Vars #
|
|
##-----------------##
|
|
|
|
if [ ! -f "/etc/ICTM/selopts.list" ] || [ ! -f "/etc/ICTM/mainvar.list" ] ; then echo 'This system is not yet setup, please run the main installer first' && exit ; fi
|
|
|
|
source /etc/ICTM/selopts.list
|
|
source /etc/ICTM/mainvar.list
|
|
if [ -z $shortdist ] ; then source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/Scripts/MicroOSDetect.sh) ; fi
|
|
if [ $webserv != nginx_nonphp ]; then
|
|
if [ ! -f "/etc/ICTM/phpvar.list" ] ; then bash <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/Scripts/GeneratePhplist.sh) ; fi
|
|
source /etc/ICTM/phpvar.list
|
|
fi
|
|
if [ $webserv = apache ]; then
|
|
if [ ! -f "/etc/ICTM/apachevar.list" ] ; then bash <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/Scripts/GenerateApacheList.sh) ; fi
|
|
source /etc/ICTM/apachevar.list
|
|
fi
|
|
rm /tmp/pkg.list
|
|
source <(curl --retry 7 --retry-delay 5 -s "$repo"/raw/"$branchtype"/"$branch"/ModulesMenu.list)
|
|
|
|
#Setting Menulist to webserver
|
|
declare -n CMSL="$webserv"CMSL
|
|
declare -n options="$webserv"Options
|
|
|
|
#Filtering already installed modules
|
|
for target in "${SelectedOptions[@]}"; do
|
|
for i in "${!options[@]}"; do
|
|
if [[ ${options[i]} = $target ]]; then
|
|
unset 'options[i]'
|
|
if [ $IMODE = n ]; then
|
|
((i=i+1))
|
|
unset 'options[i]'
|
|
((i=i+1))
|
|
unset 'options[i]'
|
|
fi
|
|
fi
|
|
done
|
|
done
|
|
|
|
if [[ -z ${options[@]} ]]; then echo 'No new modules available' && exit ; fi
|
|
|
|
|
|
##---------------##
|
|
# 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 {
|
|
passdia=$(whiptail --nocancel --passwordbox "Please enter your password (Must be the same as the mysql/root password)" 11 91 --title "Config" 3>&1 1>&2 2>&3)
|
|
if [ -z $passdia ]; then PasswordQuest; fi
|
|
mysql -uroot -p"$passdia" -e "" > /dev/null 2>&1
|
|
if [ $? = 0 ]; then
|
|
password="$passdia"
|
|
unset passdia
|
|
else
|
|
whiptail --ok-button Done --msgbox " Password is incorrect!" 10 30
|
|
unset passdia
|
|
PasswordQuest
|
|
fi
|
|
}
|
|
|
|
function LegacyPasswordQuest {
|
|
echo "Enter password (Must be the same as the mysql/root password)"
|
|
read -s passdia
|
|
if [ -z $passdia ]; then LegacyPasswordQuest; fi
|
|
mysql -uroot -p"$passdia" -e "" > /dev/null 2>&1
|
|
if [ $? = 0 ]; then
|
|
echo "Password is correct"
|
|
password="$passdia"
|
|
unset passdia
|
|
else
|
|
echo "Password is incorrect!"
|
|
unset passdia
|
|
LegacyPasswordQuest
|
|
fi
|
|
}
|
|
|
|
##--------##
|
|
# Menu #
|
|
##--------##
|
|
|
|
if [ $IMODE = n ]; then
|
|
PasswordQuest
|
|
option=$(whiptail --title "Config" --checklist "Features" 11 110 5 "${options[@]}" 3>&1 1>&2 2>&3)
|
|
[[ "$?" = 1 ]] && msg " Quiting installer" 8 78 && exit;
|
|
fi
|
|
|
|
if [ $IMODE = l ]; then
|
|
echo "" >/dev/null
|
|
LegacyPasswordQuest
|
|
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
|
|
}
|
|
echo "The first selection will always return a invalid option, please enter the first option twice"
|
|
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
|
|
|
|
echo 'SelectedOptions+=('$option')' >> /etc/ICTM/selopts.list
|
|
|
|
|
|
#Cleaning options from menu
|
|
option="${option,,}" && option="${option// /}" && option="${option//:/ }" && option="${option//'"'}"
|
|
#Combining selected option with always-on options
|
|
option="$option""$aonoption"
|
|
|
|
##-----------##
|
|
# AptList #
|
|
##-----------##
|
|
|
|
|
|
msg " Generating apt list for 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
|
|
|
|
|
|
##-----------##
|
|
# Preconf #
|
|
##-----------##
|
|
|
|
msg " Running preconf for Options"
|
|
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
|
|
|
|
|
|
##-------------##
|
|
# Installer #
|
|
##-------------##
|
|
|
|
$PKGUC
|
|
sed -i 's/PHPprefix/'$phpPkgName'/g' /tmp/pkg.list
|
|
cat /tmp/pkg.list | xargs $PKGI
|
|
|
|
|
|
##---------------##
|
|
# Configuring #
|
|
##---------------##
|
|
|
|
msg " Running conf for 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
|
|
|
|
|
|
##-------##
|
|
# Done #
|
|
##-------##
|
|
|
|
msg " Added Module!"
|
|
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 |