Files
CyberPanel/cyberpanel.sh

1904 lines
65 KiB
Bash
Raw Normal View History

#!/bin/bash
#set -e -o pipefail
#set -x
#set -u
2021-01-20 00:37:46 +05:00
2021-04-20 19:49:51 -04:00
#CyberPanel installer script for CentOS 7.X, CentOS 8.X, CloudLinux 7.X, Ubuntu 18.04, Ubuntu 20.04 , Ubuntu 20.10 and AlmaLinux 8.X
#For whoever may edit this script, please follow :
#Please use Pre_Install_xxx() and Post_Install_xxx() if you want to something respectively before or after the panel installation
#and update below accordingly
#Please use variable/functions name as MySomething or My_Something, and please try not to use too-short abbreviation :)
#Please use On/Off, True/False, Yes/No.
#workflow:
#Set_Default_Variables() ---> set some default variable for later use
#Check_Root() ---> check for root
#Check_Server_IP() ---> check for server IP and geolocation at country level
#Check_OS() ---> check system , support on centos7/8 ubutnu18/20 and cloudlinux 7 , 8 is untested.
2021-04-20 19:49:51 -04:00
#Check_Virtualization() ---> check for virtualizaon , #LXC not supported# , some edit needed on OVZ
#Check_Panel() ---> check to make sure no other panel is installed
2021-04-20 19:49:51 -04:00
#Check_Process() ---> check no other process like Apache is running
#Check_Provider() ---> check the provider, certain provider like Alibaba or Tencent Yun may need some special change
#Check_Argument() ---> parse argument and go to Argument_Mode() or Interactive_Mode() respectively
#Pre_Install_Setup_Repository() ---> setup/install repositories for centos system.
#go to Pre_Install_Setup_CN_Repository() if server is within China.
#Pre_Install_Setup_Git_URL() ---> form up github URL , use Gitee for servers within China.
#Pre_Install_Required_Components() ---> install required softwares and git clone it
#Pre_Install_System_Tweak() ---> set up SWAP and apply some system tweak depends on providers
#Main_Installation() ---> change some code within python files for CN servers and start to install
#Post_Install_Addon_Memcached() ---> Install Memcached extension and process
#Post_Install_Addon_Redis() ---> Install Redis extension and process
#Post_Install_Required_Components() ---> install some required softwares.
#Post_Install_PHP_Session_Setup() ---> set up PHP session
#Post_Install_PHP_TimezoneDB() ---> set up PHP timezoneDB
#Post_Install_Regenerate_Cert() ---> regenerate cert for :7080 and :8090 to avoid Chrome on MacOS blocking.
#Post_Install_Regenerate_Webadmin_Console_Passwd() ---> regenerate the webadmin console password
#Post_Install_Setup_Watchdog() ---> set up watchdog script for webserver and MariaDB.
#Post_Install_Setup_Utility() ---> set up utility script for some handy features
#Post_Install_Tweak() ---> some patches/fixes on certain systems
#Post_Install_Display_Final_Info() ---> display installation successful information.
Sudo_Test=$(set)
#for SUDO check
Set_Default_Variables() {
echo -e "Fetching latest data from CyberPanel server...\n"
echo -e "This may take few seconds..."
Silent="Off"
Server_Edition="OLS"
Admin_Pass="1234567"
2021-03-17 19:19:47 +01:00
Memcached="Off"
Redis="Off"
Postfix_Switch="On"
PowerDNS_Switch="On"
PureFTPd_Switch="On"
Server_IP=""
Server_Country="Unknow"
Server_OS=""
Server_OS_Version=""
Server_Provider='Undefined'
Watchdog="On"
Redis_Hosting="No"
Temp_Value=$(curl --silent --max-time 30 -4 https://cyberpanel.net/version.txt)
Panel_Version=${Temp_Value:12:3}
Panel_Build=${Temp_Value:25:1}
Branch_Name="v${Panel_Version}.${Panel_Build}"
Base_Number="1.9.3"
Total_RAM=$(free -m | awk '/Mem:/ { print $2 }')
Remote_MySQL="Off"
Final_Flags=()
Git_User=""
Git_Content_URL=""
Git_Clone_URL=""
LSWS_Latest_URL="https://cyberpanel.sh/update.litespeedtech.com/ws/latest.php"
curl --silent --max-time 30 -4 -o /tmp/lsws_latest "$LSWS_Latest_URL" 2>/dev/null
LSWS_Stable_Line=$(grep "LSWS_STABLE" /tmp/lsws_latest)
LSWS_Stable_Version=$(expr "$LSWS_Stable_Line" : '.*LSWS_STABLE=\(.*\) BUILD .*')
#grab the LSWS latest stable version.
Enterprise_Flag=""
License_Key=""
2021-04-01 11:51:39 +05:00
Debug_Log2 "Starting installation..,1"
}
Debug_Log() {
echo -e "\n${1}=${2}\n" >> /tmp/cyberpanel_debug.log
}
2020-03-07 21:22:53 +01:00
Debug_Log2() {
2021-03-29 20:47:08 +02:00
Check_Server_IP "$@" >/dev/null 2>&1
echo -e "\n${1}" >> /var/log/installLogs.txt
2021-04-30 03:54:08 +05:00
curl --max-time 20 -d '{"ipAddress": "'"$Server_IP"'", "InstallCyberPanelStatus": "'"$1"'"}' -H "Content-Type: application/json" -X POST https://cloud.cyberpanel.net/servers/RecvData >/dev/null 2>&1
}
2020-05-12 02:22:08 +05:00
Branch_Check() {
if [[ "$1" = *.*.* ]]; then
#check input if it's valid format as X.Y.Z
Output=$(awk -v num1="$Base_Number" -v num2="${1//[[:space:]]/}" '
BEGIN {
print "num1", (num1 < num2 ? "<" : ">="), "num2"
}
')
if [[ $Output = *">="* ]]; then
echo -e "\nYou must use version number higher than 1.9.4"
exit
else
Branch_Name="v${1//[[:space:]]/}"
echo -e "\nSet branch name to $Branch_Name..."
2020-10-11 12:38:40 -04:00
fi
else
echo -e "\nPlease input a valid format version number."
exit
fi
}
2020-05-12 02:22:08 +05:00
License_Check() {
License_Key="$1"
echo -e "\nChecking LiteSpeed Enterprise license key..."
if echo "$License_Key" | grep -q "^....-....-....-....$" && [[ ${#License_Key} = "19" ]]; then
echo -e "\nLicense key set...\n"
elif [[ ${License_Key,,} = "trial" ]] ; then
echo -e "\nTrial license set..."
License_Key="Trial"
else
echo -e "\nLicense key seems incorrect, please verify"
echo -e "\nIf you are copying/pasting, please make sure you didn't paste blank space...\n"
exit
fi
2020-05-12 02:22:08 +05:00
}
2019-12-31 17:27:04 +01:00
Check_Return() {
2020-10-11 12:38:40 -04:00
#check previous command result , 0 = ok , non-0 = something wrong.
# shellcheck disable=SC2181
if [[ $? != "0" ]]; then
if [[ -n "$1" ]] ; then
echo -e "\n\n\n$1"
fi
echo -e "above command failed..."
Debug_Log2 "command failed, exiting. For more information read /var/log/installLogs.txt [404]"
if [[ "$2" = "no_exit" ]] ; then
echo -e"\nRetrying..."
2020-10-11 12:38:40 -04:00
else
exit
fi
fi
}
# check command success or not
Retry_Command() {
# shellcheck disable=SC2034
for i in {1..50};
do
2021-05-21 16:15:57 +02:00
if [[ "$i" = "50" ]] ; then
echo "command $1 failed for 50 times, exit..."
exit 2
else
$1 && break || echo -e "\n$1 has failed for $i times\nWait for 3 seconds and try again...\n"; sleep 3;
fi
done
2020-01-17 15:29:56 +01:00
}
2020-01-07 00:53:59 +01:00
Check_Root() {
echo -e "\nChecking root privileges..."
if echo "$Sudo_Test" | grep SUDO >/dev/null; then
echo -e "\nYou are using SUDO , please run as root user...\n"
echo -e "\nIf you don't have direct access to root user, please run \e[31msudo su -\e[39m command (do NOT miss the \e[31m-\e[39m at end or it will fail) and then run installation command again."
exit
fi
2020-10-11 12:38:40 -04:00
if [[ $(id -u) != 0 ]] >/dev/null; then
echo -e "\nYou must run on root user to install CyberPanel...\n"
echo -e "or run following command: (do NOT miss the quotes)"
echo -e "\e[31msudo su -c \"sh <(curl https://cyberpanel.sh || wget -O - https://cyberpanel.sh)\"\e[39m"
exit 1
else
echo -e "\nYou are runing as root...\n"
2020-10-11 12:38:40 -04:00
fi
2019-12-19 18:08:10 +05:00
}
Check_Server_IP() {
Server_IP=$(curl --silent --max-time 30 -4 https://cyberpanel.sh/?ip)
if [[ $Server_IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo -e "Valid IP detected..."
2020-10-11 12:38:40 -04:00
else
echo -e "Can not detect IP, exit..."
2021-04-03 22:04:31 +05:00
Debug_Log2 "Can not detect IP. [404]"
exit
2020-10-11 12:38:40 -04:00
fi
echo -e "\nChecking server location...\n"
2021-04-03 21:46:31 +02:00
if [[ "$Server_Country" != "CN" ]] ; then
Server_Country=$(curl --silent --max-time 10 -4 https://cyberpanel.sh/?country)
if [[ ${#Server_Country} != "2" ]] ; then
Server_Country="Unknow"
fi
fi
#to avoid repeated check_ip called by debug_log2 to break force mirror for CN servers.
2020-10-11 12:38:40 -04:00
if [[ "$Debug" = "On" ]] ; then
Debug_Log "Server_IP" "$Server_IP"
Debug_Log "Server_Country" "$Server_Country"
fi
2020-10-11 12:38:40 -04:00
if [[ "$*" = *"--mirror"* ]] ; then
Server_Country="CN"
echo -e "Force to use mirror server due to --mirror argument...\n"
fi
if [[ "$Server_Country" = *"CN"* ]] ; then
Server_Country="CN"
echo -e "Setting up to use mirror server...\n"
fi
2020-02-13 04:22:00 +01:00
}
Check_OS() {
if [[ ! -f /etc/os-release ]] ; then
echo -e "Unable to detect the operating system...\n"
exit
fi
if ! uname -m | grep -q 64 ; then
echo -e "x64 system is required...\n"
exit
fi
if grep -q -E "CentOS Linux 7|CentOS Linux 8" /etc/os-release ; then
Server_OS="CentOS"
elif grep -q "AlmaLinux-8" /etc/os-release ; then
Server_OS="AlmaLinux"
elif grep -q -E "CloudLinux 7|CloudLinux 8" /etc/os-release ; then
Server_OS="CloudLinux"
elif grep -q -E "Ubuntu 18.04|Ubuntu 20.04|Ubuntu 20.10" /etc/os-release ; then
Server_OS="Ubuntu"
else
echo -e "Unable to detect your system..."
echo -e "\nCyberPanel is supported on Ubuntu 18.04 x86_64, Ubuntu 20.04 x86_64, Ubuntu 20.10 x86_64, CentOS 7.x, CentOS 8.x, AlmaLinux 8.x and CloudLinux 7.x...\n"
Debug_Log2 "CyberPanel is supported on Ubuntu 18.04 x86_64, Ubuntu 20.04 x86_64, Ubuntu 20.10 x86_64, CentOS 7.x, CentOS 8.x, AlmaLinux 8.x and CloudLinux 7.x... [404]"
exit
fi
Server_OS_Version=$(grep VERSION_ID /etc/os-release | awk -F[=,] '{print $2}' | tr -d \" | head -c2 | tr -d . )
#to make 20.04 display as 20
echo -e "System: $Server_OS $Server_OS_Version detected...\n"
if [[ $Server_OS = "CloudLinux" ]] || [[ "$Server_OS" = "AlmaLinux" ]] ; then
Server_OS="CentOS"
#CloudLinux gives version id like 7.8 , 7.9 , so cut it to show first number only
#treat CL and Alma as CentOS
fi
if [[ "$Debug" = "On" ]] ; then
Debug_Log "Server_OS" "$Server_OS $Server_OS_Version"
fi
2020-02-13 04:22:00 +01:00
2019-12-12 14:26:54 +05:00
}
2021-04-20 19:49:51 -04:00
Check_Virtualization() {
echo -e "Checking virtualization type..."
2021-04-20 19:49:51 -04:00
#if hostnamectl | grep -q "Virtualization: lxc"; then
# echo -e "\nLXC detected..."
# echo -e "CyberPanel does not support LXC"
# echo -e "Exiting..."
# Debug_Log2 "CyberPanel does not support LXC.. [404]"
# exit
#fi
#remove per https://github.com/usmannasir/cyberpanel/issues/589
if hostnamectl | grep -q "Virtualization: openvz"; then
echo -e "OpenVZ detected...\n"
if [[ ! -d /etc/systemd/system/pure-ftpd.service.d ]]; then
mkdir /etc/systemd/system/pure-ftpd.service.d
echo "[Service]
PIDFile=/run/pure-ftpd.pid" >/etc/systemd/system/pure-ftpd.service.d/override.conf
echo -e "PureFTPd service file modified for OpenVZ..."
2020-10-11 12:38:40 -04:00
fi
2019-12-19 18:08:10 +05:00
if [[ ! -d /etc/systemd/system/lshttpd.service.d ]]; then
mkdir /etc/systemd/system/lshttpd.service.d
echo "[Service]
PIDFile=/tmp/lshttpd/lshttpd.pid" >/etc/systemd/system/lshttpd.service.d/override.conf
echo -e "LiteSPeed service file modified for OpenVZ..."
2020-10-11 12:38:40 -04:00
fi
2019-12-19 18:08:10 +05:00
if [[ ! -d /etc/systemd/system/spamassassin.service.d ]]; then
mkdir /etc/systemd/system/spamassassin.service.d
echo "[Service]
PIDFile=/run/spamassassin.pid" >/etc/systemd/system/spamassassin.service.d/override.conf
echo -e "SpamAssassin service file modified for OpenVZ..."
2020-10-11 12:38:40 -04:00
fi
fi
if [[ "$Debug" = "On" ]] ; then
Debug_Log "Server_Virtualization" "$(hostnamectl | grep "Virtualization")"
fi
}
Check_Panel() {
if [[ -d /usr/local/cpanel ]]; then
echo -e "\ncPanel detected...\n"
Debug_Log2 "cPanel detected...exit... [404]"
exit
elif [[ -d /usr/local/directadmin ]]; then
echo -e "\nDirectAdmin detected...\n"
Debug_Log2 "DirectAdmin detected...exit... [404]"
exit
elif [[ -d /etc/httpd/conf/plesk.conf.d/ ]] || [[ -d /etc/apache2/plesk.conf.d/ ]]; then
echo -e "\nPlesk detected...\n"
Debug_Log2 "Plesk detected...exit... [404]"
exit
fi
}
2020-10-11 12:38:40 -04:00
Check_Process() {
if systemctl is-active --quiet httpd; then
systemctl disable httpd
systemctl stop httpd
systemctl mask httpd
echo -e "\nhttpd process detected, disabling...\n"
fi
if systemctl is-active --quiet apache2; then
systemctl disable apache2
systemctl stop apache2
systemctl mask apache2
echo -e "\napache2 process detected, disabling...\n"
fi
if systemctl is-active --quiet named; then
systemctl stop named
systemctl disable named
systemctl mask named
echo -e "\nnamed process detected, disabling...\n"
fi
if systemctl is-active --quiet exim; then
systemctl stop exim
systemctl disable exim
systemctl mask exim
echo -e "\nexim process detected, disabling...\n"
fi
}
2020-10-11 12:38:40 -04:00
Check_Provider() {
if hash dmidecode >/dev/null 2>&1; then
if [[ "$(dmidecode -s bios-vendor)" = "Google" ]]; then
Server_Provider="Google Cloud Platform"
elif [[ "$(dmidecode -s bios-vendor)" = "DigitalOcean" ]]; then
Server_Provider="Digital Ocean"
elif [[ "$(dmidecode -s system-product-name | cut -c 1-7)" = "Alibaba" ]]; then
Server_Provider="Alibaba Cloud"
elif [[ "$(dmidecode -s system-manufacturer)" = "Microsoft Corporation" ]]; then
Server_Provider="Microsoft Azure"
elif [[ -d /usr/local/qcloud ]]; then
Server_Provider="Tencent Cloud"
2020-10-11 12:38:40 -04:00
else
Server_Provider="Undefined"
2020-10-11 12:38:40 -04:00
fi
else
Server_Provider='Undefined'
fi
2020-10-11 12:38:40 -04:00
if [[ -f /sys/devices/virtual/dmi/id/product_uuid ]]; then
if [[ "$(cut -c 1-3 /sys/devices/virtual/dmi/id/product_uuid)" = 'EC2' ]] && [[ -d /home/ubuntu ]]; then
Server_Provider='Amazon Web Service'
2020-10-11 12:38:40 -04:00
fi
fi
if [[ "$Debug" = "On" ]] ; then
Debug_Log "Server_Provider" "$Server_Provider"
fi
}
Show_Help() {
echo -e "\nCyberPanel Installer Script Help\n"
echo -e "\nUsage: sh <(curl cyberpanel.sh) --argument"
2021-03-14 04:15:58 +01:00
echo -e "\n\e[31m-v\e[39m or \e[31m--version\e[39m : choose to install CyberPanel OpenLiteSpeed or CyberPanel Enterprise, available options are \e[31mols\e[39m , \e[31mTRIAL\e[39m and \e[31mSERIAL_NUMBER\e[39m, default ols"
echo -e "Please be aware, this serial number must be obtained from LiteSpeed Store."
echo -e "And if this serial number has been used before, it must be released/migrated in Store first, otherwise it will fail to start."
echo -e "\n\e[31m-a\e[39m or \e[31m--addons\e[39m : install addons: memcached, redis, PHP extension for memcached and redis"
echo -e "\n\e[31m-p\e[39m or \e[31m--password\e[39m : set password of new installation, empty for default 1234567, [r] or [random] for randomly generated 16 digital password, any other value besides [d] and [r(andom)] will be accept as password, default use 1234567."
echo -e "e.g. \e[31m-p r\e[39m will generate a random password"
echo -e " \e[31m-p 123456789\e[39m will set password to 123456789"
echo -e "\n\e[31m-m\e[39m or \e[31m--minimal\e[39m : set to minimal mode which will not install PowerDNS, Pure-FTPd and Postfix"
echo -e "\n\e[31m-m postfix/pureftpd/powerdns\e[39m will do minimal install also with compoenent given"
echo -e "e.g. \e[31m-m postfix\e[39m will do minimal install also with Postfix"
echo -e " \e[31m-m powerdns\e[39m will do minimal install also with PowerDNS"
echo -e " \e[31m-m postfix\e[39m powerdns will do minimal install also with Postfix and PowerDNS"
echo -e "\n\e[31m-b\e[39m or \e[31m--branch\e[39m : install with given branch/version , must be higher than 1.9.4"
echo -e "e.g. \e[31m-b 2.0.2\e[39m will install 2.0.2 version"
echo -e "\n\e[31m--mirror\e[39m : this argument force to use mirror server for majority of repositories, only suggest to use for servers within China"
echo -e "\nExample:"
echo -e "\nsh <(curl cyberpanel.sh) -v ols -p r or ./cyberpanel.sh --version ols --password random"
echo -e "\nThis will install CyberPanel OpenLiteSpeed and randomly generate the password."
echo -e "\nsh <(curl cyberpanel.sh) -v LICENSE_KEY -a -p my_pass_word"
echo -e "\nThis will install LiteSpeed Enterise , replace LICENSE_KEY to actual license key and set password to my_pass_word\n"
}
2020-10-11 12:38:40 -04:00
Check_Argument() {
if [[ "$#" = "0" ]] || [[ "$#" = "1" && "$1" = "--debug" ]] || [[ "$#" = "1" && "$1" = "--mirror" ]]; then
echo -e "\nInitializing...\n"
else
if [[ $1 = "help" ]]; then
Show_Help
exit
elif [[ $1 = "default" ]]; then
echo -e "\nThis will start default installation...\n"
Silent="On"
Postfix_Switch="On"
PowerDNS_Switch="On"
PureFTPd_Switch="On"
Server_Edition="OLS"
Admin_Pass="1234567"
Memcached="On"
Redis="On"
else
while [[ -n "${1}" ]]; do
case $1 in
-v | --version)
shift
if [[ "${1}" = "" ]]; then
Show_Help
exit
elif [[ "${1^^}" = "OLS" ]] ; then
Server_Edition="OLS"
Silent="On"
echo -e "\nSet to use OpenLiteSpeed..."
2020-10-11 12:38:40 -04:00
else
Server_Edition="Enterprise"
License_Key="${1}"
Silent="On"
echo -e "\nSet to use LiteSpeed Enterprise..."
echo -e "\nSet to use license key ${1}..."
2020-10-11 12:38:40 -04:00
fi
;;
-p | --password)
shift
if [[ ${1} = "" ]]; then
Admin_Pass="1234567"
elif [[ ${1} = "r" ]] || [[ $1 = "random" ]]; then
Admin_Pass=$(
head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16
echo ''
)
elif [[ ${1} = "d" ]]; then
Admin_Pass="1234567"
else
if [[ ${#1} -lt 8 ]]; then
echo -e "\nPassword lenth less than 8 digital, please choose a more complicated password.\n"
exit
fi
Admin_Pass="${1}"
fi
echo -e "\nSet to use password ${1}..."
;;
-b | --branch)
shift
Branch_Check "${1}"
;;
-m | --minimal)
if ! echo "$@" | grep -q -i "postfix\|pureftpd\|powerdns" ; then
Postfix_Switch="Off"
PowerDNS_Switch="Off"
PureFTPd_Switch="Off"
echo -e "\nSet to use minimal installation..."
else
if [[ "${*^^}" = *"POSTFIX"* ]] ; then
Postfix_Switch="On"
echo -e "\nEnable Postfix..."
fi
if [[ "${*^^}" = *"PUREFTPD"* ]] ; then
PureFTPd_Switch="On"
echo -e "\nEnable PureFTPd..."
fi
if [[ "${*^^}" = *"POWERDNS"* ]] ; then
PowerDNS_Switch="On"
echo -e "\nEnable PowerDNS..."
fi
fi
;;
-a | --addons)
Memcached="On"
Redis="On"
echo -e "\nEnable Addons..."
;;
-h | --help)
Show_Help
exit
;;
--debug)
echo -e "\nEnable Debug log...\n"
;;
--mirror)
echo -e "\nForce to use mirror server...\n"
;;
*)
if [[ "${1^^}" = *"POSTFIX"* ]] || [[ "${1^^}" = *"PUREFTPD"* ]] || [[ "${1^^}" = *"POWERDNS"* ]] ; then
:
#this is ugly workaround , leave it for now , to-do for further improvement.
else
echo -e "\nUnknown argument...\n"
Show_Help
exit
fi
;;
esac
shift
2020-10-11 12:38:40 -04:00
done
fi
fi
if [[ "$Debug" = "On" ]] ; then
Debug_Log "Arguments" "${@}"
fi
2020-10-11 12:38:40 -04:00
Debug_Log2 "Initialization completed..,2"
}
2020-10-11 12:38:40 -04:00
Argument_Mode() {
if [[ "${Server_Edition^^}" = "OLS" ]] ; then
Server_Edition="OLS"
echo -e "\nSet to OpenLiteSpeed..."
else
License_Check "$License_Key"
fi
if [[ $Admin_Pass = "d" ]]; then
Admin_Pass="1234567"
echo -e "\nSet to default password..."
echo -e "\nAdmin password will be set to \e[31m$Admin_Pass\e[39m\n"
elif [[ $Admin_Pass = "r" ]]; then
Admin_Pass=$(
head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16
echo ''
)
echo -e "\nSet to random-generated password..."
echo -e "\nAdmin password will be set to \e[31m$Admin_Pass\e[39m"
else
echo -e "\nAdmin password will be set to \e[31m$Admin_Pass\e[39m"
fi
}
Interactive_Mode() {
echo -e " CyberPanel Installer v$Panel_Version.$Panel_Build
2020-10-11 12:38:40 -04:00
1. Install CyberPanel.
2. Addons and Miscellaneous
2020-04-13 00:58:56 +05:00
3. Exit.
"
read -r -p " Please enter the number[1-3]: " Input_Number
echo ""
case "$Input_Number" in
1)
Interactive_Mode_Set_Parameter
;;
2)
Interactive_Mode_Addon
;;
3)
exit
;;
*)
echo -e " Please enter the right number [1-3]\n"
exit
;;
esac
}
Interactive_Mode_Set_Parameter() {
echo -e " CyberPanel Installer v$Panel_Version.$Panel_Build
RAM check : $(free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }')
Disk check : $(df -h | awk '$NF=="/"{printf "%d/%dGB (%s)\n", $3,$2,$5}') (Minimal \e[31m10GB\e[39m free space)
1. Install CyberPanel with \e[31mOpenLiteSpeed\e[39m.
2. Install Cyberpanel with \e[31mLiteSpeed Enterprise\e[39m.
3. Exit.
"
read -r -p " Please enter the number[1-3]: " Input_Number
echo ""
case "$Input_Number" in
1)
Server_Edition="OLS"
;;
2)
Interactive_Mode_License_Input
;;
3)
exit
;;
*)
echo -e " Please enter the right number [1-3]\n"
exit
;;
esac
echo -e "\nInstall Full service for CyberPanel? This will include PowerDNS, Postfix and Pure-FTPd."
echo -e ""
printf "%s" "Full installation [Y/n]: "
read -r Tmp_Input
if [[ $(expr "x$Tmp_Input" : 'x[Yy]') -gt 1 ]] || [[ $Tmp_Input = "" ]]; then
echo -e "\nFull installation selected..."
Postfix_Switch="On"
PowerDNS_Switch="On"
PureFTPd_Switch="On"
else
echo -e ""
printf "%s" "Install Postfix? [Y/n]: "
read -r Tmp_Input
if [[ $Tmp_Input =~ ^(no|n|N) ]]; then
Postfix_Switch="Off"
else
Postfix_Switch="On"
fi
echo -e ""
printf "%s" "Install PowerDNS? [Y/n]: "
read -r Tmp_Input
if [[ $Tmp_Input =~ ^(no|n|N) ]]; then
PowerDNS_Switch="Off"
else
PowerDNS_Switch="On"
fi
echo -e ""
printf "%s" "Install PureFTPd? [Y/n]: "
read -r Tmp_Input
if [[ $Tmp_Input =~ ^(no|n|N) ]]; then
PureFTPd_Switch="Off"
else
PureFTPd_Switch="On"
fi
fi
### Ask if you want to set up this CyberPanel with remote MySQL
echo -e "\nDo you want to setup Remote MySQL? (This will skip installation of local MySQL)"
echo -e ""
printf "%s" "(Default = No) Remote MySQL [y/N]: "
read -r Tmp_Input
if [[ $(expr "x$Tmp_Input" : 'x[Yy]') -gt 1 ]]; then
echo -e "\nRemote MySQL selected..."
Remote_MySQL="On"
echo -e ""
printf "%s" "Remote MySQL Hostname: "
read -r MySQL_Host
2020-09-16 13:47:18 +05:00
echo -e ""
printf "%s" "Remote MySQL Database that contains meta information regarding MYSQL. (usually mysql): "
read -r MySQL_DB
2020-09-16 13:47:18 +05:00
echo -e ""
printf "%s" "Remote MySQL Username: "
read -r MySQL_User
2020-09-17 00:35:44 +05:00
echo -e ""
printf "%s" "Remote MySQL Password: "
read -r -s -p "Password: " MySQL_Password
echo -e ""
printf "%s" "Remote MySQL Port: "
read -r MySQL_Port
else
echo -e "\nLocal MySQL selected..."
fi
echo -e "\nPress \e[31mEnter\e[39m key to continue with latest version or Enter specific version such as: \e[31m1.9.4\e[39m , \e[31m2.0.1\e[39m , \e[31m2.0.2\e[39m ...etc"
printf "%s" ""
read -r Tmp_Input
if [[ $Tmp_Input = "" ]]; then
echo -e "Branch name set to $Branch_Name"
else
Branch_Check "$Tmp_Input"
fi
echo -e "\nPlease choose to use default admin password \e[31m1234567\e[39m, randomly generate one \e[31m(recommended)\e[39m or specify the admin password?"
printf "%s" "Choose [d]fault, [r]andom or [s]et password: [d/r/s] "
read -r Tmp_Input
if [[ $Tmp_Input =~ ^(d|D| ) ]] || [[ -z $Tmp_Input ]]; then
Admin_Pass="1234567"
echo -e "\nAdmin password will be set to $Admin_Pass\n"
elif [[ $Tmp_Input =~ ^(r|R) ]]; then
Admin_Pass=$(
head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16
echo ''
)
echo -e "\nAdmin password will be provided once installation is completed...\n"
elif [[ $Tmp_Input =~ ^(s|S) ]]; then
Custom_Pass="True"
echo -e "\nPlease enter your password:"
printf "%s" ""
read -r -s -p "Password: " Tmp_Input
if [[ -z "$Tmp_Input" ]]; then
echo -e "\nPlease do not use empty string...\n"
exit
fi
if [[ ${#Tmp_Input} -lt 8 ]]; then
echo -e "\nPassword lenth less than 8 digital, please choose a more complicated password.\n"
exit
fi
Tmp_Input1=$Tmp_Input
read -r -s -p "Confirm Password:" Tmp_Input
if [[ -z "$Tmp_Input" ]]; then
echo -e "\nPlease do not use empty string...\n"
exit
fi
if [[ "$Tmp_Input" = "$Tmp_Input1" ]]; then
Admin_Pass=$Tmp_Input
else
echo -e "\nRepeated password didn't match , please check...\n"
exit
2020-10-11 12:38:40 -04:00
fi
else
Admin_Pass="1234567"
echo -e "\nAdmin password will be set to $Admin_Pass\n"
fi
echo -e "\nDo you wish to install Memcached process and its PHP extension?"
printf "%s" "Please select [Y/n]: "
read -r Tmp_Input
if [[ $Tmp_Input =~ ^(no|n|N) ]]; then
Memcached="Off"
else
Memcached="On"
echo -e "\nInstall Memcached process and its PHP extension set to Yes...\n"
fi
echo -e "\nDo you wish to install Redis process and its PHP extension?"
printf "%s" "Please select [Y/n]: "
read -r Tmp_Input
if [[ $Tmp_Input =~ ^(no|n|N) ]]; then
Redis="Off"
else
Redis="On"
echo -e "\nInstall Redis process and its PHP extension set to Yes...\n"
fi
echo -e "\nWould you like to set up a WatchDog \e[31m(beta)\e[39m for Web service and Database service ?"
echo -e "The watchdog script will be automatically started up after installation and server reboot"
echo -e "If you want to kill the watchdog , run \e[31mwatchdog kill\e[39m"
echo -e "Please type Yes or no (with capital \e[31mY\e[39m, default Yes): "
read -r Tmp_Input
if [[ $Tmp_Input = "Yes" ]] || [[ $Tmp_Input = "" ]]; then
Watchdog="On"
echo -e "\nInstall Watchdog set to Yes...\n"
else
Watchdog="Off"
fi
}
2020-03-06 17:36:04 +01:00
Interactive_Mode_License_Input() {
Server_Edition="Enterprise"
echo -e "\nPlease note that your server has \e[31m$Total_RAM MB\e[39m RAM"
echo -e "If you are using \e[31mFree Start\e[39m license, It will not start due to \e[31m2GB RAM limit\e[39m.\n"
echo -e "If you do not have any license, you can also use trial license (if server has not used trial license before), type \e[31mTRIAL\e[39m\n"
printf "%s" "Please input your serial number for LiteSpeed WebServer Enterprise: "
read -r License_Key
if [[ -z "$License_Key" ]]; then
echo -e "\nPlease provide license key\n"
exit
fi
echo -e "The serial number you input is: \e[31m$License_Key\e[39m\n"
printf "%s" "Please verify it is correct. [y/N]: "
read -r Tmp_Input
if [[ -z "$Tmp_Input" ]]; then
echo -e "\nPlease type \e[31my\e[39m\n"
exit
fi
License_Check "$License_Key"
#echo -e "\nWould you like use Redis Mass Hosting?"
#echo -e "Please type Yes or No (with capital \e[31mY\e[39m, default No):"
#read -r Redis_Hosting
#if [[ "$Redis_Hosting" = "Yes" ]]; then
# echo -e "\nRedis Mass Hosting is set to Yes...\n"
#fi
# hide it for now
}
2020-04-13 11:01:15 +05:00
Pre_Install_Setup_Repository() {
if [[ $Server_OS = "CentOS" ]] ; then
rpm --import https://cyberpanel.sh/rpms.litespeedtech.com/centos/RPM-GPG-KEY-litespeed
#import the LiteSpeed GPG key
yum clean all
yum autoremove -y epel-release
rm -f /etc/yum.repos.d/epel.repo
rm -f /etc/yum.repos.d/epel.repo.rpmsave
yum install -y yum-plugin-copr
Check_Return "yum repo" "no_exit"
yum copr enable -y copart/restic
Check_Return "yum repo" "no_exit"
2021-04-09 16:54:32 +02:00
if [[ "$Server_OS_Version" = "8" ]]; then
2021-04-20 19:49:51 -04:00
rpm --import https://cyberpanel.sh/www.centos.org/keys/RPM-GPG-KEY-CentOS-Official
2021-04-09 16:54:32 +02:00
rpm --import https://cyberpanel.sh/dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8
yum install -y https://cyberpanel.sh/dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Check_Return "yum repo" "no_exit"
cat <<EOF >/etc/yum.repos.d/CentOS-PowerTools-CyberPanel.repo
[powertools-for-cyberpanel]
name=CentOS Linux \$releasever - PowerTools
mirrorlist=http://mirrorlist.centos.org/?release=\$releasever&arch=\$basearch&repo=PowerTools&infra=\$infra
baseurl=http://mirror.centos.org/\$contentdir/\$releasever/PowerTools/\$basearch/os/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
EOF
fi
if [[ "$Server_OS_Version" = "7" ]]; then
2021-04-09 16:54:32 +02:00
rpm --import https://cyberpanel.sh/dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-7
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Check_Return "yum repo" "no_exit"
2020-05-13 18:32:36 +05:00
yum install -y yum-plugin-priorities
Check_Return "yum repo" "no_exit"
curl -o /etc/yum.repos.d/powerdns-auth-43.repo https://cyberpanel.sh/repo.powerdns.com/repo-files/centos-auth-43.repo
Check_Return "yum repo" "no_exit"
cat <<EOF >/etc/yum.repos.d/MariaDB.repo
# MariaDB 10.5 CentOS repository list - created 2020-09-08 14:54 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
2020-05-13 18:32:36 +05:00
yum install --nogpg -y https://cyberpanel.sh/mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpm
Check_Return "yum repo" "no_exit"
2020-04-16 17:20:44 +05:00
rpm -ivh https://cyberpanel.sh/repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm
Check_Return "yum repo" "no_exit"
rpm -ivh https://cyberpanel.sh/repo.ius.io/ius-release-el7.rpm
Check_Return "yum repo" "no_exit"
2020-10-11 12:38:40 -04:00
fi
fi
2021-03-22 13:46:43 +05:00
Debug_Log2 "Setting up repositories...,1"
if [[ "$Server_Country" = "CN" ]] ; then
Pre_Install_Setup_CN_Repository
2021-03-22 13:46:43 +05:00
Debug_Log2 "Setting up repositories for CN server...,1"
fi
if [[ "$Server_Country" = "CN" ]] || [[ "$Server_Provider" = "Alibaba Cloud" ]] || [[ "$Server_Provider" = "Tencent Cloud" ]]; then
Setup_Pip
fi
}
Setup_Pip() {
rm -rf /root/.pip
mkdir -p /root/.pip
cat <<EOF >/root/.pip/pip.conf
[global]
index-url=https://cyberpanel.sh/pip-repo/pypi/simple/
EOF
#default to self-host pip for CN
if [[ "$Server_Provider" = "Alibaba Cloud" ]] ; then
sed -i 's|https://cyberpanel.sh/pip-repo/pypi/simple/|http://mirrors.cloud.aliyuncs.com/pypi/simple/|g' /root/.pip/pip.conf
echo "trusted-host = mirrors.cloud.aliyuncs.com" >> /root/.pip/pip.conf
fi
if [[ "$Server_Provider" = "Tencent Cloud" ]] ; then
sed -i 's|https://cyberpanel.sh/pip-repo/pypi/simple/|https://mirrors.cloud.tencent.com/pypi/simple/|g' /root/.pip/pip.conf
fi
#set Alibaba and Tencent to their private mirror
2021-03-22 13:46:43 +05:00
Debug_Log2 "Setting up PIP repo...,3"
#set up pip for Alibaba, Tencent worldwide and Chinese server
if [[ "$Debug" = "On" ]] ; then
Debug_Log "Pip Source" "$(grep "index-url" /root/.pip/pip.conf)"
fi
}
Pre_Install_Setup_CN_Repository() {
if [[ "$Server_OS" = "CentOS" ]] && [[ "$Server_OS_Version" = "7" ]]; then
sed -i 's|http://yum.mariadb.org|https://cyberpanel.sh/yum.mariadb.org|g' /etc/yum.repos.d/MariaDB.repo
sed -i 's|https://yum.mariadb.org/RPM-GPG-KEY-MariaDB|https://cyberpanel.sh/yum.mariadb.org/RPM-GPG-KEY-MariaDB|g' /etc/yum.repos.d/MariaDB.repo
# use MariaDB Mirror
sed -i 's|https://download.copr.fedorainfracloud.org|https://cyberpanel.sh/download.copr.fedorainfracloud.org|g' /etc/yum.repos.d/_copr_copart-restic.repo
sed -i 's|http://repo.iotti.biz|https://cyberpanel.sh/repo.iotti.biz|g' /etc/yum.repos.d/frank.repo
2020-05-12 02:22:08 +05:00
sed -i "s|mirrorlist=http://mirrorlist.ghettoforge.org/el/7/gf/\$basearch/mirrorlist|baseurl=https://cyberpanel.sh/mirror.ghettoforge.org/distributions/gf/el/7/gf/x86_64/|g" /etc/yum.repos.d/gf.repo
sed -i "s|mirrorlist=http://mirrorlist.ghettoforge.org/el/7/plus/\$basearch/mirrorlist|baseurl=https://cyberpanel.sh/mirror.ghettoforge.org/distributions/gf/el/7/plus/x86_64/|g" /etc/yum.repos.d/gf.repo
sed -i 's|https://repo.ius.io|https://cyberpanel.sh/repo.ius.io|g' /etc/yum.repos.d/ius.repo
sed -i 's|http://repo.iotti.biz|https://cyberpanel.sh/repo.iotti.biz|g' /etc/yum.repos.d/lux.repo
2019-12-12 14:26:54 +05:00
sed -i 's|http://repo.powerdns.com|https://cyberpanel.sh/repo.powerdns.com|g' /etc/yum.repos.d/powerdns-auth-43.repo
sed -i 's|https://repo.powerdns.com|https://cyberpanel.sh/repo.powerdns.com|g' /etc/yum.repos.d/powerdns-auth-43.repo
fi
# sed -i 's|http://mirrors.tencentyun.com/ubuntu/|https://cyberpanel.sh/us.archive.ubuntu.com/ubuntu/|g' /etc/apt/sources.list
2021-03-22 13:46:43 +05:00
Debug_Log2 "Setting up repositories for CN server...,1"
}
Download_Requirement() {
for i in {1..50} ;
do
wget -O /usr/local/requirments.txt "${Git_Content_URL}/${Branch_Name}/requirments.txt"
if grep -q "Django==" /usr/local/requirments.txt ; then
break
else
echo -e "\n Requirement list has failed to download for $i times..."
echo -e "Wait for 30 seconds and try again...\n"
sleep 30
fi
done
#special made function for Gitee.com , for whatever reason , sometimes it fails to download this file
}
Pre_Install_Required_Components() {
2020-10-11 12:38:40 -04:00
Debug_Log2 "Installing necessary components..,3"
if [[ "$Server_OS" = "CentOS" ]] ; then
yum update -y
if [[ "$Server_OS_Version" = "7" ]] ; then
yum install -y wget strace net-tools curl which bc telnet htop libevent-devel gcc libattr-devel xz-devel gpgme-devel curl-devel git socat openssl-devel MariaDB-shared mariadb-devel yum-utils python36u python36u-pip python36u-devel zip unzip bind-utils
Check_Return
yum -y groupinstall development
Check_Return
elif [[ "$Server_OS_Version" = "8" ]] ; then
dnf install -y zip wget strace net-tools curl which bc telnet htop libevent-devel gcc libattr-devel xz-devel mariadb-devel curl-devel git platform-python-devel tar socat python3 zip unzip bind-utils
Check_Return
dnf install -y gpgme-devel
Check_Return
2020-10-11 12:38:40 -04:00
fi
ln -s /usr/bin/pip3 /usr/bin/pip
else
apt update -y
DEBIAN_FRONTEND=noninteractive apt upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"
2021-04-20 19:49:51 -04:00
DEBIAN_FRONTEND=noninteracitve apt install -y dnsutils net-tools htop telnet libcurl4-gnutls-dev libgnutls28-dev libgcrypt20-dev libattr1 libattr1-dev liblzma-dev libgpgme-dev libmariadbclient-dev libcurl4-gnutls-dev libssl-dev nghttp2 libnghttp2-dev idn2 libidn2-dev libidn2-0-dev librtmp-dev libpsl-dev nettle-dev libgnutls28-dev libldap2-dev libgssapi-krb5-2 libk5crypto3 libkrb5-dev libcomerr2 libldap2-dev virtualenv git socat vim unzip zip
Check_Return
DEBIAN_FRONTEND=noninteractive apt install -y python3-pip
Check_Return
ln -s /usr/bin/pip3 /usr/bin/pip3.6
ln -s /usr/bin/pip3.6 /usr/bin/pip
2020-03-02 11:51:39 +05:00
DEBIAN_FRONTEND=noninteractive apt install -y build-essential libssl-dev libffi-dev python3-dev
Check_Return
DEBIAN_FRONTEND=noninteractive apt install -y python3-venv
Check_Return
2020-03-02 11:51:39 +05:00
DEBIAN_FRONTEND=noninteractive apt install -y locales
locale-gen "en_US.UTF-8"
update-locale LC_ALL="en_US.UTF-8"
fi
2021-03-22 13:56:18 +05:00
Debug_Log2 "Installing required virtual enviroment,3"
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
#need to set lang to address some pip module installation issue.
Retry_Command "pip install --default-timeout=3600 virtualenv==16.7.9"
2019-12-12 14:26:54 +05:00
Download_Requirement
2019-12-12 14:26:54 +05:00
virtualenv -p /usr/bin/python3 /usr/local/CyberPanel
Check_Return
if [[ "$Server_OS" = "Ubuntu" ]] && [[ "$Server_OS_Version" != "20" ]] ; then
# shellcheck disable=SC1091
source /usr/local/CyberPanel/bin/activate
else
# shellcheck disable=SC1091
. /usr/local/CyberPanel/bin/activate
fi
2021-03-22 13:56:18 +05:00
Debug_Log2 "Installing requirments..,3"
Retry_Command "pip install --default-timeout=3600 -r /usr/local/requirments.txt"
Check_Return "requirments" "no_exit"
rm -rf cyberpanel
echo -e "\nFetching files from ${Git_Clone_URL}...\n"
2021-03-22 13:56:18 +05:00
Debug_Log2 "Getting CyberPanel code..,4"
Retry_Command "git clone ${Git_Clone_URL}"
Check_Return "git clone ${Git_Clone_URL}"
echo -e "\nCyberPanel source code downloaded...\n"
cd cyberpanel || exit
git checkout "$Branch_Name"
Check_Return "git checkout"
cd - || exit
cp -r cyberpanel /usr/local/cyberpanel
cd cyberpanel/install || exit
Debug_Log2 "Necessary components installed..,5"
}
Pre_Install_System_Tweak() {
2021-03-22 14:48:42 +05:00
Debug_Log2 "Setting up sytem tweak...,20"
Line_Number=$(grep -n "127.0.0.1" /etc/hosts | cut -d: -f 1)
My_Hostname=$(hostname)
if [[ -n $Line_Number ]]; then
for Line_Number2 in $Line_Number ; do
String=$(sed "${Line_Number2}q;d" /etc/hosts)
if [[ $String != *"$My_Hostname"* ]]; then
New_String="$String $My_Hostname"
sed -i "${Line_Number2}s/.*/${New_String}/" /etc/hosts
fi
done
else
echo "127.0.0.1 $My_Hostname " >>/etc/hosts
fi
#this should address on "sudo: unable to resolve host ..." on Ubuntu , it's not issue but annoying.
if [[ "$Server_OS" = "CentOS" ]] ; then
setenforce 0 || true
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
#disable SELinux
if [[ "$Server_OS_Version" = "7" ]] ; then
:
fi
#CentOS 7 specific change
if [[ "$Server_OS_Version" = "8" ]] ; then
:
fi
#CentOS 8 specific change
elif [[ "$Server_OS" = "Ubuntu" ]] ; then
if [[ "$Server_OS_Version" = "20" ]] ; then
sed -i 's|ce-2.3-latest/ubuntu/bionic bionic main|ce-2.3-latest/ubuntu/focal focal main|g' install.py
fi
#Ubuntu 20 specific change.
if [[ "$Server_OS_Version" = "18" ]] ; then
:
fi
#Ubuntu 18 specific change.
fi
if ! grep -q "pid_max" /etc/rc.local 2>/dev/null ; then
if [[ $Server_OS = "CentOS" ]] ; then
echo "echo 1000000 > /proc/sys/kernel/pid_max
echo 1 > /sys/kernel/mm/ksm/run" >>/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
else
echo "echo 1000000 > /proc/sys/kernel/pid_max
echo 1 > /sys/kernel/mm/ksm/run" >>/etc/rc.local
chmod +x /etc/rc.local
2021-05-21 16:15:57 +02:00
fi
if grep -q "nf_conntrack_max" /etc/sysctl.conf ; then
sysctl -w net.netfilter.nf_conntrack_max=2097152 > /dev/null
sysctl -w net.nf_conntrack_max=2097152 > /dev/null
echo "net.netfilter.nf_conntrack_max=2097152" >> /etc/sysctl.conf
echo "net.nf_conntrack_max=2097152" >> /etc/sysctl.conf
fi
echo "fs.file-max = 65535" >>/etc/sysctl.conf
sysctl -p >/dev/null
echo "* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
* soft nproc 65535
* hard nproc 65535
root soft nproc 65535
root hard nproc 65535" >>/etc/security/limits.conf
fi
#sed -i 's|#DefaultLimitNOFILE=|DefaultLimitNOFILE=65535|g' /etc/systemd/system.conf
#raise the file limit for systemd process
Total_SWAP=$(free -m | awk '/^Swap:/ { print $2 }')
Set_SWAP=$((Total_RAM - Total_SWAP))
SWAP_File=/cyberpanel.swap
2020-10-11 12:38:40 -04:00
if [ ! -f $SWAP_File ]; then
if [[ $Total_SWAP -gt $Total_RAM ]] || [[ $Total_SWAP -eq $Total_RAM ]]; then
echo -e "Check SWAP...\n"
2020-10-11 12:38:40 -04:00
else
if [[ $Set_SWAP -gt "2049" ]]; then
#limit it to 2GB as max size
Set_SWAP="2048"
fi
fallocate --length ${Set_SWAP}MiB $SWAP_File
chmod 600 $SWAP_File
mkswap $SWAP_File
swapon $SWAP_File
echo -e "${SWAP_File} swap swap sw 0 0" | sudo tee -a /etc/fstab
sysctl vm.swappiness=10
echo -e "vm.swappiness = 10" >> /etc/sysctl.conf
echo -e "\nSWAP set...\n"
2020-10-11 12:38:40 -04:00
fi
fi
if [[ "$Server_Provider" = "Tencent Cloud" ]] ; then
echo "$(host mirrors.tencentyun.com | awk '{print $4}') mirrors.tencentyun.com " >> /etc/hosts
fi
if [[ "$Server_Provider" = "Alibaba Cloud" ]] ; then
echo "$(host mirrors.cloud.aliyuncs.com | awk '{print $4}') mirrors.cloud.aliyuncs.com " >> /etc/hosts
fi
#add internal repo server to host file before systemd-resolved is disabled
2020-06-26 12:32:02 +05:00
if grep -i -q "systemd-resolve" /etc/resolv.conf ; then
systemctl stop systemd-resolved >/dev/null 2>&1
systemctl disable systemd-resolved >/dev/null 2>&1
systemctl mask systemd-resolved >/dev/null 2>&1
fi
2020-06-26 12:32:02 +05:00
rm -f /etc/resolv.conf
2020-06-26 12:32:02 +05:00
if [[ "$Server_Provider" = "Tencent Cloud" ]] ; then
echo -e "nameserver 183.60.83.19" > /etc/resolv.conf
echo -e "nameserver 183.60.82.98" >> /etc/resolv.conf
elif [[ "$Server_Provider" = "Alibaba Cloud" ]] ; then
echo -e "nameserver 100.100.2.136" > /etc/resolv.conf
echo -e "nameserver 100.100.2.138" >> /etc/resolv.conf
else
echo -e "nameserver 1.1.1.1" > /etc/resolv.conf
echo -e "nameserver 8.8.8.8" >> /etc/resolv.conf
fi
2020-07-05 14:39:57 +05:00
systemctl restart systemd-networkd >/dev/null 2>&1
sleep 3
#take a break ,or installer will break
2020-06-26 12:32:02 +05:00
cp /etc/resolv.conf /etc/resolv.conf-tmp
2020-06-26 12:32:02 +05:00
Line1="$(grep -n "f.write('nameserver 8.8.8.8')" installCyberPanel.py | head -n 1 | cut -d: -f1)"
sed -i "${Line1}i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ subprocess.call\(command, shell=True)" installCyberPanel.py
sed -i "${Line1}i\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ command = 'cat /etc/resolv.conf-tmp > /etc/resolv.conf'" installCyberPanel.py
}
2020-06-26 12:32:02 +05:00
License_Validation() {
2021-03-22 13:46:43 +05:00
Debug_Log2 "Validating LiteSpeed license...,40"
Current_Dir=$(pwd)
2020-06-26 12:32:02 +05:00
if [ -f /root/cyberpanel-tmp ]; then
rm -rf /root/cyberpanel-tmp
fi
mkdir /root/cyberpanel-tmp
cd /root/cyberpanel-tmp || exit
Retry_Command "wget https://cyberpanel.sh/www.litespeedtech.com/packages/${LSWS_Stable_Version:0:1}.0/lsws-$LSWS_Stable_Version-ent-x86_64-linux.tar.gz"
tar xzvf "lsws-$LSWS_Stable_Version-ent-x86_64-linux.tar.gz" >/dev/null
cd "/root/cyberpanel-tmp/lsws-$LSWS_Stable_Version/conf" || exit
if [[ "$License_Key" = "Trial" ]]; then
Retry_Command "wget -q https://cyberpanel.sh/license.litespeedtech.com/reseller/trial.key"
sed -i "s|writeSerial = open('lsws-5.4.2/serial.no', 'w')|command = 'wget -q --output-document=./lsws-$LSWS_Stable_Version/trial.key https://cyberpanel.sh/license.litespeedtech.com/reseller/trial.key'|g" "$Current_Dir/installCyberPanel.py"
sed -i 's|writeSerial.writelines(self.serial)|subprocess.call(command, shell=True)|g' "$Current_Dir/installCyberPanel.py"
sed -i 's|writeSerial.close()||g' "$Current_Dir/installCyberPanel.py"
else
echo "$License_Key" > serial.no
fi
cd "/root/cyberpanel-tmp/lsws-$LSWS_Stable_Version/bin" || exit
if [[ "$License_Key" = "Trial" ]]; then
License_Key="1111-2222-3333-4444"
else
./lshttpd -r
fi
if ./lshttpd -V |& grep "ERROR" || ./lshttpd -V |& grep "expire in 0 days" ; then
echo -e "\n\nIt apeears to have some issue with license , please check above result..."
Debug_Log2 "It appears to have some issue with LiteSpeed License, make sure you are using correct serial key. [404]"
exit
fi
echo -e "\nLicense seems valid..."
cd "$Current_Dir" || exit
rm -rf /root/cyberpanel-tmp
#clean up the temp files
}
Pre_Install_CN_Replacement() {
if [[ "$Server_OS" = "Ubuntu" ]] ; then
sed -i 's|wget http://rpms.litespeedtech.com/debian/|wget https://cyberpanel.sh/litespeed/|g' install.py
sed -i 's|https://repo.dovecot.org/|https://cyberpanel.sh/repo.dovecot.org/|g' install.py
fi
#replace litespeed repo on ubuntu 18/20
if [[ "$Server_OS" = "CentOS" ]] ; then
sed -i 's|rpm -ivh http://rpms.litespeedtech.com/centos/litespeed-repo-1.2-1.el7.noarch.rpm|curl -o /etc/yum.repos.d/litespeed.repo https://cyberpanel.sh/litespeed/litespeed_cn.repo|g' install.py
sed -i 's|rpm -Uvh http://rpms.litespeedtech.com/centos/litespeed-repo-1.1-1.el8.noarch.rpm|curl -o /etc/yum.repos.d/litespeed.repo https://cyberpanel.sh/litespeed/litespeed_cn.repo|g' install.py
sed -i 's|https://mirror.ghettoforge.org/distributions|https://cyberpanel.sh/mirror.ghettoforge.org/distributions|g' install.py
if [[ "$Server_OS_Version" = "8" ]] ; then
sed -i 's|dnf --nogpg install -y https://mirror.ghettoforge.org/distributions/gf/el/8/gf/x86_64/gf-release-8-11.gf.el8.noarch.rpm|echo gf8|g' install.py
sed -i 's|dnf --nogpg install -y https://cyberpanel.sh/mirror.ghettoforge.org/distributions/gf/el/8/gf/x86_64/gf-release-8-11.gf.el8.noarch.rpm|echo gf8|g' install.py
2020-06-26 12:32:02 +05:00
Retry_Command "dnf --nogpg install -y https://cyberpanel.sh/mirror.ghettoforge.org/distributions/gf/el/8/gf/x86_64/gf-release-8-11.gf.el8.noarch.rpm"
sed -i "s|mirrorlist=http://mirrorlist.ghettoforge.org/el/8/gf/\$basearch/mirrorlist|baseurl=https://cyberpanel.sh/mirror.ghettoforge.org/distributions/gf/el/8/gf/x86_64/|g" /etc/yum.repos.d/gf.repo
sed -i "s|mirrorlist=http://mirrorlist.ghettoforge.org/el/8/plus/\$basearch/mirrorlist|baseurl=https://cyberpanel.sh/mirror.ghettoforge.org/distributions/gf/el/8/plus/x86_64/|g" /etc/yum.repos.d/gf.repo
#get this set up beforehand.
2020-10-11 12:38:40 -04:00
fi
2020-06-26 12:32:02 +05:00
fi
2020-06-26 12:32:02 +05:00
sed -i "s|https://www.litespeedtech.com/|https://cyberpanel.sh/www.litespeedtech.com/|g" installCyberPanel.py
sed -i 's|composer.sh|composer_cn.sh|g' install.py
sed -i 's|./composer_cn.sh|COMPOSER_ALLOW_SUPERUSER=1 ./composer_cn.sh|g' install.py
sed -i 's|http://www.litespeedtech.com|https://cyberpanel.sh/www.litespeedtech.com|g' install.py
sed -i 's|https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip|https://cyberpanel.sh/www.rainloop.net/repository/webmail/rainloop-community-latest.zip|g' install.py
sed -i "s|rep.cyberpanel.net|cyberpanel.sh/rep.cyberpanel.net|g" installCyberPanel.py
sed -i "s|rep.cyberpanel.net|cyberpanel.sh/rep.cyberpanel.net|g" install.py
2020-01-29 14:39:48 +01:00
2021-03-22 13:46:43 +05:00
Debug_Log2 "Setting up URLs for CN server...,1"
sed -i 's|wget -O - https://get.acme.sh \| sh|echo acme|g' install.py
sed -i 's|/root/.acme.sh/acme.sh --upgrade --auto-upgrade|echo acme2|g' install.py
Current_Dir=$(pwd)
Retry_Command "git clone https://gitee.com/neilpang/acme.sh.git"
cd acme.sh || exit
./acme.sh --install
cd "$Current_Dir" || exit
rm -rf acme.sh
# shellcheck disable=SC2016
sed -i 's|$PROJECT/archive/$BRANCH.tar.gz|https://cyberpanel.sh/codeload.github.com/acmesh-official/acme.sh/tar.gz/master|g' /root/.acme.sh/acme.sh
Retry_Command "/root/.acme.sh/acme.sh --upgrade --auto-upgrade"
#install acme and upgrade it beforehand, to prevent gitee fail
}
Main_Installation() {
2021-03-22 13:56:18 +05:00
Debug_Log2 "Starting main installation..,30"
if [[ -d /usr/local/CyberCP ]] ; then
echo -e "\n CyberPanel already installed, exiting..."
Debug_Log2 "CyberPanel already installed, exiting... [404]"
exit
fi
if [[ $Server_Edition = "Enterprise" ]] ; then
echo -e "\nValidating the license..."
echo -e "\nThis may take a minute..."
echo -e "\nPlease be patient...\n"
2020-03-02 10:55:29 +05:00
License_Validation
sed -i "s|lsws-5.4.2|lsws-$LSWS_Stable_Version|g" installCyberPanel.py
sed -i "s|lsws-5.3.5|lsws-$LSWS_Stable_Version|g" installCyberPanel.py
2020-10-11 12:38:40 -04:00
#this sed must be done after license validation
Enterprise_Flag="--ent ent --serial "
fi
sed -i 's|git clone https://github.com/usmannasir/cyberpanel|echo downloaded|g' install.py
sed -i 's|mirror.cyberpanel.net|cyberpanel.sh|g' install.py
if [[ $Server_Country = "CN" ]] ; then
Pre_Install_CN_Replacement
fi
echo -e "Preparing...\n"
Final_Flags=()
Final_Flags+=("$Server_IP")
Final_Flags+=(${Enterprise_Flag:+$Enterprise_Flag})
Final_Flags+=(${License_Key:+$License_Key})
Final_Flags+=(--postfix "${Postfix_Switch^^}")
Final_Flags+=(--powerdns "${PowerDNS_Switch^^}")
Final_Flags+=(--ftp "${PureFTPd_Switch^^}")
if [[ "$Redis_Hosting" = "Yes" ]] ; then
Final_Flags+=(--redis enable)
fi
if [[ "$Remote_MySQL" = "On" ]] ; then
Final_Flags+=(--remotemysql "${Remote_MySQL^^}")
Final_Flags+=(--mysqlhost "$MySQL_Host")
Final_Flags+=(--mysqldb "$MySQL_DB")
Final_Flags+=(--mysqluser "$MySQL_User")
Final_Flags+=(--mysqlpassword "$MySQL_Password")
Final_Flags+=(--mysqlport "$MySQL_Port")
else
Final_Flags+=(--remotemysql "${Remote_MySQL^^}")
fi
#form up the final agurment for install.py
if [[ "$Debug" = "On" ]] ; then
Debug_Log "Final_Flags" "${Final_Flags[@]}"
fi
/usr/local/CyberPanel/bin/python install.py "${Final_Flags[@]}"
if grep "CyberPanel installation successfully completed" /var/log/installLogs.txt >/dev/null; then
echo -e "\nCyberPanel installation sucessfully completed...\n"
2021-03-22 13:46:43 +05:00
Debug_Log2 "Main installation completed...,70"
else
echo -e "Oops, something went wrong..."
Debug_Log2 "Oops, something went wrong... [404]"
exit
fi
}
Post_Install_Addon_Mecached_LSMCD() {
if [[ $Server_OS = "CentOS" ]]; then
yum groupinstall "Development Tools" -y
yum install autoconf automake zlib-devel openssl-devel expat-devel pcre-devel libmemcached-devel cyrus-sasl* -y
wget -O lsmcd-master.zip https://cyberpanel.sh/codeload.github.com/litespeedtech/lsmcd/zip/master
unzip lsmcd-master.zip
Current_Dir=$(pwd)
cd "$Current_Dir/lsmcd-master" || exit
./fixtimestamp.sh
./configure CFLAGS=" -O3" CXXFLAGS=" -O3"
make
make install
systemctl enable lsmcd
systemctl start lsmcd
cd "$Current_Dir" || exit
else
DEBIAN_FRONTEND=noninteractive apt install build-essential zlib1g-dev libexpat1-dev openssl libssl-dev libsasl2-dev libpcre3-dev git -y
wget -O lsmcd-master.zip https://cyberpanel.sh/codeload.github.com/litespeedtech/lsmcd/zip/master
unzip lsmcd-master.zip
Current_Dir=$(pwd)
cd "$Current_Dir/lsmcd-master" || exit
./fixtimestamp.sh
./configure CFLAGS=" -O3" CXXFLAGS=" -O3"
make
make install
cd "$Current_Dir" || exit
systemctl enable lsmcd
systemctl start lsmcd
fi
}
Post_Install_Addon_Memcached() {
if [[ $Server_OS = "CentOS" ]]; then
yum install -y lsphp??-memcached lsphp??-pecl-memcached
if [[ $Total_RAM -eq "2048" ]] || [[ $Total_RAM -gt "2048" ]]; then
Post_Install_Addon_Mecached_LSMCD
else
yum install -y memcached
sed -i 's|OPTIONS=""|OPTIONS="-l 127.0.0.1 -U 0"|g' /etc/sysconfig/memcached
#turn off UDP and bind to 127.0.0.1 only
systemctl enable memcached
systemctl start memcached
fi
fi
if [[ $Server_OS = "Ubuntu" ]]; then
DEBIAN_FRONTEND=noninteractive apt install -y "lsphp*-memcached"
if [[ "$Total_RAM" -eq "2048" ]] || [[ "$Total_RAM" -gt "2048" ]]; then
Post_Install_Addon_Mecached_LSMCD
else
DEBIAN_FRONTEND=noninteractive apt install -y memcached
systemctl enable memcached
systemctl start memcached
2020-10-11 12:38:40 -04:00
fi
fi
2020-05-13 20:20:23 +05:00
if pgrep "lsmcd" ; then
echo -e "\n\nLiteSpeed Memcached installed and running..."
fi
2019-12-12 14:26:54 +05:00
if pgrep "memcached" ; then
echo -e "\n\nMemcached installed and running..."
fi
}
2019-12-31 17:27:04 +01:00
Post_Install_Addon_Redis() {
if [[ "$Server_OS" = "CentOS" ]]; then
if [[ "$Server_OS_Version" = "8" ]]; then
yum install -y lsphp??-redis redis
else
yum -y install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --disable remi
yum-config-manager --disable remi-safe
yum -y --enablerepo=remi install redis
fi
fi
if [[ $Server_OS = "Ubuntu" ]]; then
DEBIAN_FRONTEND=noninteractive apt install -y "lsphp*-redis" redis
fi
if ifconfig -a | grep inet6; then
echo -e "\nIPv6 detected...\n"
else
sed -i 's|bind 127.0.0.1 ::1|bind 127.0.0.1|g' /etc/redis/redis.conf
echo -e "\n no IPv6 detected..."
fi
if [[ $Server_OS = "Ubuntu" ]]; then
systemctl stop redis-server
rm -f /var/run/redis/redis-server.pid
systemctl enable redis-server
systemctl start redis-server
else
systemctl enable redis
systemctl start redis
fi
if pgrep "redis" ; then
echo -e "\n\nRedis installed and running..."
fi
}
2020-10-11 12:38:40 -04:00
Post_Install_PHP_Session_Setup() {
echo -e "\nSetting up PHP session storage path...\n"
wget -O /root/php_session_script.sh "${Git_Content_URL}/stable/CPScripts/setup_php_sessions.sh"
chmod +x /root/php_session_script.sh
bash /root/php_session_script.sh
rm -f /root/php_session_script.sh
2021-03-14 10:33:32 +05:00
Debug_Log2 "Setting up PHP session conf...,90"
}
2020-10-11 12:38:40 -04:00
Post_Install_PHP_TimezoneDB() {
Current_Dir="$(pwd)"
rm -f /usr/local/lsws/cyberpanel-tmp
mkdir /usr/local/lsws/cyberpanel-tmp
cd /usr/local/lsws/cyberpanel-tmp || exit
wget -O timezonedb.tgz https://cyberpanel.sh/pecl.php.net/get/timezonedb
tar xzvf timezonedb.tgz
cd timezonedb-* || exit
if [[ "$Server_OS" = "Ubuntu" ]] ; then
DEBIAN_FRONTEND=noninteractive apt install libmagickwand-dev pkg-config build-essential -y
DEBIAN_FRONTEND=noninteractive apt install -y lsphp*-dev
else
yum remove -y lsphp??-mysql
yum install -y lsphp??-mysqlnd
yum install -y lsphp??-devel make gcc glibc-devel libmemcached-devel zlib-devel
fi
for PHP_Version in /usr/local/lsws/lsphp?? ;
do
PHP_INI_Path=$(find "$PHP_Version" -name php.ini)
if [[ "$Server_OS" = "CentOS" ]]; then
if [[ ! -d "${PHP_Version}/tmp" ]]; then
mkdir "${PHP_Version}/tmp"
fi
"${PHP_Version}"/bin/pecl channel-update pecl.php.net
"${PHP_Version}"/bin/pear config-set temp_dir "${PHP_Version}/tmp"
"${PHP_Version}"/bin/phpize
./configure --with-php-config="${PHP_Version}"/bin/php-config
make
make install
echo "extension=timezonedb.so" > "${PHP_Version}/etc/php.d/20-timezone.ini"
make clean
sed -i 's|expose_php = On|expose_php = Off|g' "$PHP_INI_Path"
sed -i 's|mail.add_x_header = On|mail.add_x_header = Off|g' "$PHP_INI_Path"
2020-10-11 12:38:40 -04:00
else
"${PHP_Version}"/bin/phpize
./configure --with-php-config="${PHP_Version}"/bin/php-config
make
make install
echo "extension=timezonedb.so" > "/usr/local/lsws/${PHP_Version: 16:7}/etc/php/${PHP_Version: 21:1}.${PHP_Version: 22:1}/mods-available/20-timezone.ini"
make clean
sed -i 's|expose_php = On|expose_php = Off|g' "$PHP_INI_Path"
sed -i 's|mail.add_x_header = On|mail.add_x_header = Off|g' "$PHP_INI_Path"
2020-10-11 12:38:40 -04:00
fi
done
rm -rf /usr/local/lsws/cyberpanel-tmp
cd "$Current_Dir" || exit
2021-03-14 10:33:32 +05:00
Debug_Log2 "Installing timezoneDB...,95"
}
Post_Install_Regenerate_Webadmin_Console_Passwd() {
if [[ "$Server_Edition" = "OLS" ]]; then
PHP_Command="admin_php"
else
PHP_Command="admin_php5"
fi
Webadmin_Pass=$(
head /dev/urandom | tr -dc A-Za-z0-9 | head -c 16
echo ''
)
Encrypt_string=$(/usr/local/lsws/admin/fcgi-bin/${PHP_Command} /usr/local/lsws/admin/misc/htpasswd.php "${Webadmin_Pass}")
echo "" >/usr/local/lsws/admin/conf/htpasswd
echo "admin:$Encrypt_string" >/usr/local/lsws/admin/conf/htpasswd
echo "${Webadmin_Pass}" >/etc/cyberpanel/webadmin_passwd
chmod 600 /etc/cyberpanel/webadmin_passwd
}
Post_Install_Setup_Watchdog() {
if [[ "$Watchdog" = "On" ]]; then
wget -O /etc/cyberpanel/watchdog.sh "${Git_Content_URL}/stable/CPScripts/watchdog.sh"
chmod 700 /etc/cyberpanel/watchdog.sh
ln -s /etc/cyberpanel/watchdog.sh /usr/local/bin/watchdog
#shellcheck disable=SC2009
pid=$(ps aux | grep "watchdog lsws" | grep -v grep | awk '{print $2}')
if [[ $pid = "" ]]; then
nohup watchdog lsws >/dev/null 2>&1 &
fi
echo -e "Checking MariaDB ..."
#shellcheck disable=SC2009
pid=$(ps aux | grep "watchdog mariadb" | grep -v grep | awk '{print $2}')
if [[ $pid = "" ]]; then
nohup watchdog mariadb >/dev/null 2>&1 &
fi
if [[ "$Server_OS" = "CentOS" ]]; then
echo "nohup watchdog lsws > /dev/null 2>&1 &
nohup watchdog mariadb > /dev/null 2>&1 &" >>/etc/rc.d/rc.local
else
echo "nohup watchdog lsws > /dev/null 2>&1 &
nohup watchdog mariadb > /dev/null 2>&1 &" >>/etc/rc.local
2020-10-11 12:38:40 -04:00
fi
echo -e "\nSetting up WatchDog..."
fi
}
2020-03-07 21:22:53 +01:00
Post_Install_Setup_Utility() {
if [[ ! -f /usr/bin/cyberpanel_utility ]]; then
wget -q -O /usr/bin/cyberpanel_utility https://cyberpanel.sh/misc/cyberpanel_utility.sh
chmod 700 /usr/bin/cyberpanel_utility
fi
}
2020-03-07 21:22:53 +01:00
Post_Install_Display_Final_Info() {
RainloopAdminPass=$(grep SetPassword /usr/local/CyberCP/public/rainloop.php| sed -e 's|$oConfig->SetPassword(||g' -e "s|');||g" -e "s|'||g")
Elapsed_Time="$((Time_Count / 3600)) hrs $(((SECONDS / 60) % 60)) min $((Time_Count % 60)) sec"
echo "###################################################################"
echo " CyberPanel Successfully Installed "
echo " "
echo " Current Disk usage : $(df -h | awk '$NF=="/"{printf "%d/%dGB (%s)\n", $3,$2,$5}') "
echo " "
echo " Current RAM usage : $(free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }') "
echo " "
echo " Installation time : $Elapsed_Time "
echo " "
echo " Visit: https://$Server_IP:8090 "
echo " Panel username: admin "
if [[ "$Custom_Pass" = "True" ]]; then
echo " Panel password: ***** "
else
echo " Panel password: $Admin_Pass "
fi
echo " Visit: https://$Server_IP:7080 "
echo " WebAdmin console username: admin "
echo " WebAdmin console password: $Webadmin_Pass "
echo " "
echo " Visit: https://$Server_IP:8090/rainloop/?admin "
echo " Rainloop Admin username: admin "
echo " Rainloop Admin password: $RainloopAdminPass "
echo " "
echo -e " Run \e[31mcyberpanel help\e[39m to get FAQ info"
echo -e " Run \e[31mcyberpanel upgrade\e[39m to upgrade it to latest version."
echo -e " Run \e[31mcyberpanel utility\e[39m to access some handy tools ."
echo " "
echo " Website : https://www.cyberpanel.net "
echo " Forums : https://forums.cyberpanel.net "
echo " Wikipage: https://docs.cyberpanel.net "
echo " Docs : https://cyberpanel.net/docs/ "
echo " "
echo -e " Enjoy your accelerated Internet by "
echo -e " CyberPanel & $Word "
echo "###################################################################"
if [[ "$Server_Provider" != "Undefined" ]]; then
echo -e "\033[0;32m$Server_Provider\033[39m detected..."
echo -e "This provider has a \e[31mnetwork-level firewall\033[39m"
else
echo -e "If your provider has a \e[31mnetwork-level firewall\033[39m"
fi
echo -e "Please make sure you have opened following port for both in/out:"
echo -e "\033[0;32mTCP: 8090\033[39m for CyberPanel"
echo -e "\033[0;32mTCP: 80\033[39m, \033[0;32mTCP: 443\033[39m and \033[0;32mUDP: 443\033[39m for webserver"
echo -e "\033[0;32mTCP: 21\033[39m and \033[0;32mTCP: 40110-40210\033[39m for FTP"
echo -e "\033[0;32mTCP: 25\033[39m, \033[0;32mTCP: 587\033[39m, \033[0;32mTCP: 465\033[39m, \033[0;32mTCP: 110\033[39m, \033[0;32mTCP: 143\033[39m and \033[0;32mTCP: 993\033[39m for mail service"
echo -e "\033[0;32mTCP: 53\033[39m and \033[0;32mUDP: 53\033[39m for DNS service"
if ! timeout 3 telnet mx.zoho.com 25 | grep "Escape" >/dev/null 2>&1; then
echo -e "Your provider seems \e[31mblocked\033[39m port 25 , E-mail sending may \e[31mnot\033[39m work properly."
fi
2021-03-29 20:47:08 +02:00
Debug_Log2 "Completed [200]"
if [[ "$Silent" != "On" ]]; then
printf "%s" "Would you like to restart your server now? [y/N]: "
read -r Tmp_Input
if [[ "${Tmp_Input^^}" = *Y* ]] ; then
reboot
fi
fi
2021-03-29 20:47:08 +02:00
}
Post_Install_Regenerate_Cert() {
cat <<EOF >/root/cyberpanel/cert_conf
[req]
prompt=no
distinguished_name=cyberpanel
[cyberpanel]
commonName = www.example.com
countryName = CP
localityName = CyberPanel
organizationName = CyberPanel
organizationalUnitName = CyberPanel
stateOrProvinceName = CP
emailAddress = mail@example.com
name = CyberPanel
surname = CyberPanel
givenName = CyberPanel
initials = CP
dnQualifier = CyberPanel
[server_exts]
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
EOF
openssl req -x509 -config /root/cyberpanel/cert_conf -extensions 'server_exts' -nodes -days 820 -newkey rsa:2048 -keyout /usr/local/lscp/conf/key.pem -out /usr/local/lscp/conf/cert.pem
if [[ "$Server_Edition" = "OLS" ]]; then
Key_Path="/usr/local/lsws/admin/conf/webadmin.key"
Cert_Path="/usr/local/lsws/admin/conf/webadmin.crt"
else
Key_Path="/usr/local/lsws/admin/conf/cert/admin.key"
Cert_Path="/usr/local/lsws/admin/conf/cert/admin.crt"
fi
openssl req -x509 -config /root/cyberpanel/cert_conf -extensions 'server_exts' -nodes -days 820 -newkey rsa:2048 -keyout "$Key_Path" -out "$Cert_Path"
rm -f /root/cyberpanel/cert_conf
}
Post_Install_Required_Components() {
Debug_Log2 "Finalization..,80"
virtualenv -p /usr/bin/python3 /usr/local/CyberCP
if [[ "$Server_OS" = "Ubuntu" ]] && [[ "$Server_OS_Version" = "20" ]] ; then
# shellcheck disable=SC1091
. /usr/local/CyberCP/bin/activate
Check_Return
else
# shellcheck disable=SC1091
source /usr/local/CyberCP/bin/activate
Check_Return
fi
Retry_Command "pip install --default-timeout=3600 -r /usr/local/requirments.txt"
Check_Return "requirments.txt" "no_exit"
chown -R cyberpanel:cyberpanel /usr/local/CyberCP/lib
chown -R cyberpanel:cyberpanel /usr/local/CyberCP/lib64 || true
}
Pre_Install_Setup_Git_URL() {
if [[ $Server_Country != "CN" ]] ; then
Git_User="usmannasir"
Git_Content_URL="https://raw.githubusercontent.com/${Git_User}/cyberpanel"
Git_Clone_URL="https://github.com/${Git_User}/cyberpanel.git"
else
Git_User="qtwrk"
Git_Content_URL="https://gitee.com/${Git_User}/cyberpanel/raw"
Git_Clone_URL="https://gitee.com/${Git_User}/cyberpanel.git"
fi
if [[ "$Debug" = "On" ]] ; then
Debug_Log "Git_URL" "$Git_Content_URL"
fi
}
Post_Install_Tweak() {
if [[ -d /etc/pure-ftpd/conf ]]; then
echo "yes" >/etc/pure-ftpd/conf/ChrootEveryone
systemctl restart pure-ftpd-mysql
fi
if [[ -f /etc/pure-ftpd/pure-ftpd.conf ]]; then
sed -i 's|NoAnonymous no|NoAnonymous yes|g' /etc/pure-ftpd/pure-ftpd.conf
fi
sed -i "s|lsws-5.3.8|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i "s|lsws-5.4.2|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i "s|lsws-5.3.5|lsws-$LSWS_Stable_Version|g" /usr/local/CyberCP/serverStatus/serverStatusUtil.py
if [[ ! -f /usr/bin/cyberpanel_utility ]]; then
wget -q -O /usr/bin/cyberpanel_utility https://cyberpanel.sh/misc/cyberpanel_utility.sh
chmod 700 /usr/bin/cyberpanel_utility
fi
rm -rf /etc/profile.d/cyberpanel*
curl --silent -o /etc/profile.d/cyberpanel.sh https://cyberpanel.sh/?banner 2>/dev/null
chmod 700 /etc/profile.d/cyberpanel.sh
echo "$Admin_Pass" > /etc/cyberpanel/adminPass
/usr/local/CyberPanel/bin/python /usr/local/CyberCP/plogical/adminPass.py --password "$Admin_Pass"
mkdir -p /etc/opendkim
echo '/usr/local/CyberPanel/bin/python /usr/local/CyberCP/plogical/adminPass.py --password $@' > /usr/bin/adminPass
echo "systemctl restart lscpd" >> /usr/bin/adminPass
chmod 700 /usr/bin/adminPass
2021-03-17 14:16:54 +01:00
rm -f /usr/bin/php
ln -s /usr/local/lsws/lsphp74/bin/php /usr/bin/php
if [[ "$Server_OS" = "CentOS" ]] ; then
#all centos7/8 post change goes here
sed -i 's|error_reporting = E_ALL \&amp; ~E_DEPRECATED \&amp; ~E_STRICT|error_reporting = E_ALL \& ~E_DEPRECATED \& ~E_STRICT|g' /usr/local/lsws/{lsphp72,lsphp73}/etc/php.ini
#fix php.ini &amp; issue
sed -i 's|/usr/local/lsws/bin/lswsctrl restart|systemctl restart lsws|g' /var/spool/cron/root
if [[ "$Server_OS_Version" = "7" ]] ; then
#all centos 7 specific post change goes here
2021-05-21 16:15:57 +02:00
if ! yum list installed lsphp74-devel ; then
yum install -y lsphp74-devel
fi
if [[ ! -f /usr/local/lsws/lsphp74/lib64/php/modules/zip.so ]] ; then
if yum list installed libzip-devel >/dev/null 2>&1 ; then
yum remove -y libzip-devel
fi
yum install -y https://cyberpanel.sh/misc/libzip-0.11.2-6.el7.psychotic.x86_64.rpm
yum install -y https://cyberpanel.sh/misc/libzip-devel-0.11.2-6.el7.psychotic.x86_64.rpm
yum install lsphp74-devel
if [[ ! -d /usr/local/lsws/lsphp74/tmp ]]; then
mkdir /usr/local/lsws/lsphp74/tmp
fi
/usr/local/lsws/lsphp74/bin/pecl channel-update pecl.php.net
/usr/local/lsws/lsphp74/bin/pear config-set temp_dir /usr/local/lsws/lsphp74/tmp
if /usr/local/lsws/lsphp74/bin/pecl install zip ; then
echo "extension=zip.so" >/usr/local/lsws/lsphp74/etc/php.d/20-zip.ini
chmod 755 /usr/local/lsws/lsphp74/lib64/php/modules/zip.so
else
echo -e "\nlsphp74-zip compilation failed..."
fi
#fix compile lsphp74-zip on centos 7
fi
2020-10-11 12:38:40 -04:00
fi
if [[ "$Server_OS_Version" = "8" ]] ; then
#all centos 8 specific post change goes here
:
2020-10-11 12:38:40 -04:00
fi
elif [[ "$Server_OS" = "Ubuntu" ]] ; then
#all ubuntu18/20 post change goes here
sed -i 's|/usr/local/lsws/bin/lswsctrl restart|systemctl restart lsws|g' /var/spool/cron/crontabs/root
if [[ ! -f /usr/sbin/ipset ]] ; then
ln -s /sbin/ipset /usr/sbin/ipset
2020-10-11 12:38:40 -04:00
fi
if [[ "$Server_OS_Version" = "18" ]] ; then
#all ubuntu 18 specific post change goes here
:
fi
if [[ "$Server_OS_Version" = "20" ]] ; then
#all ubuntu 20 specific post change goes here
2021-03-17 16:40:35 +01:00
:
fi
fi
2020-11-11 13:14:32 +05:00
if [[ "$Server_Edition" = "OLS" ]]; then
Word="OpenLiteSpeed"
else
Word="LiteSpeed Enterprise"
sed -i 's|Include /usr/local/lsws/conf/rules.conf||g' /usr/local/lsws/conf/modsec.conf
fi
2020-05-11 13:43:04 +05:00
systemctl restart lscpd >/dev/null 2>&1
/usr/local/lsws/bin/lswsctrl stop >/dev/null 2>&1
systemctl stop lsws >/dev/null 2>&1
systemctl start lsws >/dev/null 2>&1
echo -e "\nFinalizing...\n"
echo -e "Cleaning up...\n"
rm -rf /root/cyberpanel
rm -f /tmp/cyberpanel_debug.log
rm -f /tmp/lsws_latest
if [[ "$Server_Country" = "CN" ]] ; then
Post_Install_CN_Replacement
fi
2020-10-11 12:38:40 -04:00
# If valid hostname is set that resolves externally we can issue an ssl. This will create the hostname as a website so we can issue the SSL and do our first login without SSL warnings or exceptions needed.
HostName=$(hostname --fqdn); [ -n "$(dig @1.1.1.1 +short "$HostName")" ] && echo "$HostName resolves to valid IP. Setting up hostname SSL" && cyberpanel createWebsite --package Default --owner admin --domainName $(hostname --fqdn) --email root@localhost --php 7.4 && cyberpanel hostNameSSL --domainName $(hostname --fqdn)
}
Post_Install_CN_Replacement() {
sed -i 's|wp core download|wp core download https://cyberpanel.sh/wordpress.org/latest.tar.gz|g' /usr/local/CyberCP/plogical/applicationInstaller.py
sed -i 's|https://raw.githubusercontent.com/|https://cyberpanel.sh/raw.githubusercontent.com/|g' /usr/local/CyberCP/plogical/applicationInstaller.py
sed -i 's|wp plugin install litespeed-cache|wp plugin install https://cyberpanel.sh/downloads.wordpress.org/plugin/litespeed-cache.zip|g' /usr/local/CyberCP/plogical/applicationInstaller.py
2021-03-14 03:57:32 +01:00
sed -i 's|https://www.litespeedtech.com/|https://cyberpanel.sh/www.litespeedtech.com/|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i 's|http://license.litespeedtech.com/|https://cyberpanel.sh/license.litespeedtech.com/|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
}
echo -e "\nInitializing...\n"
2020-01-17 15:29:56 +01:00
if [[ "$*" = *"--debug"* ]] ; then
Debug="On"
rm -f /tmp/cyberpanel_debug.log
echo -e "$(date)" > /tmp/cyberpanel_debug.log
fi
2020-02-01 15:48:29 +01:00
Set_Default_Variables
2020-01-28 18:26:00 +01:00
Check_Root
2020-01-28 18:26:00 +01:00
Check_Server_IP "$@"
2020-05-14 14:18:23 +05:00
Check_OS
2020-10-11 12:38:40 -04:00
2021-04-20 19:49:51 -04:00
Check_Virtualization
2020-10-11 12:38:40 -04:00
Check_Panel
2020-10-11 12:38:40 -04:00
Check_Process
Check_Provider
Check_Argument "$@"
if [[ $Silent = "On" ]]; then
Argument_Mode
else
Interactive_Mode
fi
Time_Count="0"
Pre_Install_Setup_Repository
Pre_Install_Setup_Git_URL
Pre_Install_Required_Components
Pre_Install_System_Tweak
Main_Installation
#Python install in here
if [[ "$Memcached" = "On" ]] ; then
Post_Install_Addon_Memcached
fi
if [[ "$Redis" = "On" ]] ; then
Post_Install_Addon_Redis
fi
2020-04-24 17:31:02 +05:00
Post_Install_Required_Components
Post_Install_PHP_Session_Setup
Post_Install_PHP_TimezoneDB
Post_Install_Regenerate_Cert
Post_Install_Regenerate_Webadmin_Console_Passwd
Post_Install_Setup_Watchdog
Post_Install_Setup_Utility
Post_Install_Tweak
2020-04-24 17:31:02 +05:00
2021-03-14 03:57:32 +01:00
Post_Install_Display_Final_Info