bc8c3478df
Better control for custom versions.
251 lines
9.4 KiB
Bash
251 lines
9.4 KiB
Bash
#!/bin/bash
|
|
# Webinoly Installation Script.
|
|
|
|
# Check OS support
|
|
distr=`echo $(lsb_release -i | cut -d':' -f 2)`
|
|
osver=`echo $(lsb_release -c | cut -d':' -f 2)`
|
|
|
|
# Check for custom version
|
|
if [[ $2 == "-ver="* ]]; then
|
|
ver=$(echo "$2" | cut -d'=' -f 2 -s)
|
|
# Skip stadistics counters for dev and testing (custom version stats).
|
|
if [[ $(echo $ver | rev | cut -c-1) == "*" || $ver == "alpha" ]]; then
|
|
ver=${ver//'*'}
|
|
statskip="true"
|
|
fi
|
|
fi
|
|
|
|
# Supported: 22.04 Jammy and 20.04 Focal
|
|
if [[ $distr != "Ubuntu" ]] || ! [[ $osver =~ ^(bionic|focal|jammy)$ ]]; then
|
|
echo "$(tput setaf 1)"
|
|
echo "[ERROR] This OS is not supported by Webinoly and could not work properly. $(tput dim)(${distr} '${osver}')"
|
|
echo "$(tput sgr0)"
|
|
sudo rm weby
|
|
exit 1
|
|
|
|
# 18.04 Bionic can be installed before 1.17.0
|
|
elif [[ $osver == "bionic" && $1 != "upd" && -n $ver && $(echo ${ver//'*'} | sed 's/\.//g') =~ ^[0-9]+$ && $(echo ${ver//'*'} | sed 's/\.//g') -ge 1170 ]]; then
|
|
echo "$(tput setaf 1)"
|
|
echo "[ERROR] Ubuntu 18.04 is not supported on this version of Webinoly!"
|
|
echo "$(tput sgr0)"
|
|
sudo rm weby
|
|
exit 1
|
|
elif [[ $osver == "bionic" && $1 != "upd" && -n $ver && $(echo ${ver//'*'} | sed 's/\.//g') =~ ^[0-9]+$ && $(echo ${ver//'*'} | sed 's/\.//g') -lt 1170 ]]; then
|
|
echo "$(tput setaf 1)"
|
|
echo "[WARNING] You should consider a newer Ubuntu version! $(tput dim)(20.04 or 22.04 are recommended instead)"
|
|
echo "$(tput sgr0)"
|
|
|
|
# 18.04 Bionic just for updates, no new installations after 1.17.0
|
|
elif [[ $osver == "bionic" && $1 != "upd" ]]; then
|
|
echo "$(tput setaf 1)"
|
|
echo "[ERROR] Ubuntu 18.04 is not supported for new installations! $(tput dim)(20.04 or 22.04 are recommended instead)"
|
|
echo "$(tput sgr0)"
|
|
sudo rm weby
|
|
exit 1
|
|
|
|
# 22.04 Jammy is supported only after 1.16.6
|
|
elif [[ $osver == "jammy" && -n $ver && $(echo ${ver//'*'} | sed 's/\.//g') =~ ^[0-9]+$ && $(echo ${ver//'*'} | sed 's/\.//g') -lt 1166 ]]; then
|
|
#jammy - 1.16.6
|
|
#focal - 1.12.0
|
|
#bionic - 1.4.2
|
|
echo "$(tput setaf 1)"
|
|
echo "[ERROR] Ubuntu 22.04 (Jammy) is not supported by this version!"
|
|
echo "$(tput sgr0)"
|
|
sudo rm weby
|
|
exit 1
|
|
fi
|
|
|
|
# Check for sudo/root privileges
|
|
if [[ $(whoami) != "root" ]]; then
|
|
echo "$(tput setaf 1)Please run this script as root or using sudo.$(tput sgr0)"
|
|
sudo rm weby
|
|
exit 1
|
|
fi
|
|
|
|
# Prevent "compulsive" re-installation, force the use of the 'update' command.
|
|
if [[ -f /opt/webinoly/webinoly.conf && $1 != "upd" && $2 != "-ver=alpha" ]]; then
|
|
echo "$(tput setaf 2)Webinoly is already installed on your server!"
|
|
echo "$(tput setaf 6)To update use the proper command:$(tput dim) sudo webinoly -update $(tput sgr0)"
|
|
sudo rm weby
|
|
exit 0
|
|
elif [[ ! -f /opt/webinoly/webinoly.conf && $1 == "upd" ]]; then
|
|
echo "$(tput setaf 1)Webinoly cannot be updated because it's not installed or not found.$(tput sgr0)"
|
|
sudo rm weby
|
|
exit 0
|
|
fi
|
|
|
|
# Diplay menu to select type of server
|
|
if [[ $1 == "upd" ]]; then
|
|
setup=0
|
|
update="&update=true"
|
|
elif [[ $1 == "-clean" ]]; then
|
|
setup=0
|
|
elif [[ $1 == "-nginx" ]]; then
|
|
setup=1
|
|
elif [[ $1 == "-php" ]]; then
|
|
setup=2
|
|
elif [[ $1 == "-lemp" ]]; then
|
|
setup=3
|
|
elif [[ -z $1 ]]; then
|
|
setup=3
|
|
elif ! [[ $1 -ge 0 && $1 -le 3 && $1 =~ ^[0-9]+$ ]]; then
|
|
echo "$(tput setaf 6)"
|
|
echo " 1 - HTML Server"
|
|
echo " 2 - PHP Server"
|
|
echo " 3 - LEMP Server (Default)"
|
|
echo " 0 - Clean (Only app)"
|
|
echo ""
|
|
read -p "$(tput setaf 2)Select the desired option to configure your server: $(tput sgr0)" setup
|
|
echo ""
|
|
setup=${setup:-3}
|
|
[[ $setup -ge 0 && $setup -le 3 && $setup =~ ^[0-9]+$ ]] || setup=0
|
|
else
|
|
setup=$1
|
|
fi
|
|
|
|
|
|
# Download and install Webinoly
|
|
if [[ -n $ver ]]; then
|
|
# Be sure we have a valid server response for the requested version
|
|
code=$(wget --server-response --spider https://qrok.es/webinoly?version=$ver 2>&1 | awk '/^ HTTP/{print $2}')
|
|
code="${code##*$'\n'}" # Get the last code (redirections)
|
|
|
|
if [[ $code == 200 ]]; then
|
|
sudo wget --timeout=15 -t 1 -qrO $HOME/webinoly.tar https://qrok.es/webinoly?version=$ver
|
|
[[ $ver == "beta" ]] && echo "$(tput setaf 1)[WARNING] You are installing a BETA version of Webinoly and it's not recommended for production enviroments.$(tput sgr0)"
|
|
else
|
|
echo "$(tput setaf 1)[ERROR] Version not found or not available! ($code) $(tput sgr0)"
|
|
sudo rm weby
|
|
exit 1
|
|
fi
|
|
else
|
|
sudo wget --timeout=15 -t 1 --referer="https://webinoly.com/?option=${setup}${update}" -qrO $HOME/webinoly.tar https://qrok.es/wytar
|
|
fi
|
|
|
|
if [[ ! -s $HOME/webinoly.tar ]]; then
|
|
echo "$(tput setaf 1)[ERROR] Downloading Webinoly failed!$(tput sgr0)"
|
|
sudo rm weby
|
|
exit 1
|
|
else
|
|
echo "$(tput dim)Downloading... Successful!"
|
|
echo "$(tput sgr0)"
|
|
fi
|
|
|
|
sudo mkdir -p /opt/webinoly
|
|
sudo tar -xf $HOME/webinoly.tar -C /opt/webinoly
|
|
sudo mkdir -p /opt/webinoly/templates/source
|
|
sudo find /opt/webinoly -type d -exec chmod 755 {} \;
|
|
sudo find /opt/webinoly -type f -exec chmod 644 {} \;
|
|
sudo chmod -f 744 /opt/webinoly/lib/ex-*
|
|
sudo chmod 755 /opt/webinoly/usr/*
|
|
sudo mv /opt/webinoly/usr/* /usr/bin/
|
|
|
|
source /opt/webinoly/lib/general
|
|
|
|
# Check for uninstalled Webinoly conf file
|
|
if [[ -f $HOME/.webinoly-conf-restore_dont-remove ]]; then
|
|
echo "${gre}Seems like Webinoly was installed previously, we will try to recover your old configuration!${end}"
|
|
sudo tar -Pxf $HOME/.webinoly-conf-restore_dont-remove -C /
|
|
sudo rm -rf $HOME/.webinoly-conf-restore_dont-remove
|
|
sudo webinoly -verify=critical
|
|
fi
|
|
|
|
|
|
# Check if new installation
|
|
if [[ -f /opt/webinoly/webinoly.conf ]]; then
|
|
oldapp=$(conf_read app-version)
|
|
oldver=$(conf_read server-version)
|
|
newver=$svr_version
|
|
echo "${gre}${dim}Webinoly Configuration file was found, so we will use it!${end}"
|
|
else
|
|
new_install="true"
|
|
fi
|
|
|
|
|
|
# Write app version
|
|
webyversion=$app_version
|
|
conf_write app-version $webyversion
|
|
[[ $ver =~ ^(alpha|beta)$ ]] && conf_write branch $ver
|
|
|
|
|
|
# Ping to Webinoly Stats
|
|
if [[ $statskip != "true" ]]; then
|
|
opt=$setup
|
|
branch="Public"
|
|
|
|
if [[ $new_install == "true" ]]; then
|
|
type="New"
|
|
elif [[ $ver == "beta" ]]; then
|
|
type="Beta"
|
|
elif [[ -n $update && $ver =~ ^[0-9]{1}\.[0-9]{1,2}\.[0-9]{1,2}$ ]]; then
|
|
type="Downgrade"
|
|
webyversion=$(wget --timeout=10 -t 1 -qO- https://api.webinoly.com/check?text=true)
|
|
opt=$ver
|
|
elif [[ -n $setup && $ver =~ ^[0-9]{1}\.[0-9]{1,2}\.[0-9]{1,2}$ ]]; then
|
|
type="Custom"
|
|
webyversion=$(wget --timeout=10 -t 1 -qO- https://api.webinoly.com/check?text=true)
|
|
opt=$ver
|
|
elif [[ -n $update && -n $oldapp ]]; then
|
|
type="Updates"
|
|
opt=$oldapp
|
|
else
|
|
type="Error"
|
|
echo "${red}[ERROR] Installation method not recognized!${end}"
|
|
fi
|
|
|
|
wget https://api.webinoly.com/stats/?install=${branch}:${webyversion}:${type}:${opt} --referer="Webinoly-Internal-Verified-Stats" --spider --timeout=15 -t 1 -q
|
|
fi
|
|
|
|
|
|
# Update stack!
|
|
[[ -n $oldver && ${newver//.} -gt ${oldver//.} ]] && source /opt/webinoly/lib/update
|
|
[[ -f /usr/bin/duply && -f /opt/webinoly/templates/general/duply ]] && sudo cp /opt/webinoly/templates/general/duply /usr/bin/ && sudo chmod 755 /usr/bin/duply
|
|
|
|
# Stack installation
|
|
[[ $setup == 1 ]] && stack -nginx
|
|
[[ $setup == 2 ]] && stack -php=nginx
|
|
[[ $setup == 3 ]] && stack -lemp
|
|
[[ $setup != [123] ]] && sudo webinoly -verify=critical
|
|
|
|
# Message Center
|
|
if [[ -z $(conf_read stack-build-error-flag) ]]; then
|
|
if [[ $new_install == "true" && $setup == 0 ]]; then
|
|
echo "${blu}You have chosen the option '0', it means that you have to manually build your own stack."
|
|
echo "But, don't worry! With Webinoly this is an easy task, just use the stack command, i.e. 'sudo stack -lemp' ${end}"
|
|
fi
|
|
|
|
if [[ -z $update ]]; then
|
|
echo ""
|
|
echo "${blu}${bol}Don't like our defaults? Every part of Webinoly is overridable!${end}"
|
|
echo "${blu}- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "
|
|
echo "${blu}Please, read the documentation:${end}${dim} https://webinoly.com/documentation/${end}"
|
|
echo "${blu}Be sure your firewall ports are correctly set:${end}${dim} https://webinoly.com/install/${end}"
|
|
echo "${blu}Configuration file is here:${end}${dim} /opt/webinoly/webinoly.conf${end}"
|
|
echo ""
|
|
fi
|
|
|
|
[[ $setup == 0 ]] && echo "${gre}${dim}Webinoly has been successfully installed!!!${end}"
|
|
[[ $setup == 1 ]] && echo "${gre}${dim}Nginx and some other useful tools have been installed successfully! ${end}"
|
|
[[ $setup == 2 ]] && echo "${gre}${dim}Nginx, PHP and some other useful tools have been installed successfully! ${end}"
|
|
[[ $setup == 3 ]] && echo "${gre}${dim}Nginx, PHP, MySQL (MariaDB) and some other useful tools have been installed successfully! ${end}"
|
|
|
|
echo "${blu}"
|
|
echo "****************************************************************************"
|
|
echo "************************ D O N A T I O N S *************************"
|
|
echo "*** ${bol}If you like Webinoly, buy me a coffee or beer to show support.${end}${blu} ***"
|
|
echo "****************************************************************************"
|
|
echo "************* Bitcoin: ${end}${dim}1E3Ybo5UcvaAr1MoK4nBnMRFFY9aEMiku3 ${end}${blu}**********"
|
|
echo "******* GitHub Sponsors:${end}${dim} https://github.com/sponsors/QROkes ${end}${blu}**********"
|
|
echo "*************** PayPal:${end}${dim} https://www.paypal.me/qrokes ${end}${blu}****************"
|
|
echo "****************************************************************************"
|
|
echo "*** ${end}${dim}Your regular donations is what keep this project moving forward.${end}${blu} ***"
|
|
echo "****************************************************************************"
|
|
echo "${end}"
|
|
else
|
|
echo "${red}[ERROR] Sorry, unexpected error during installation and building stack process!${end}"
|
|
fi
|
|
|
|
|
|
# Remove Installation File
|
|
sudo rm weby
|
|
app_purge
|