Files
CyberPanel/cyberpanel.sh
2021-01-26 22:55:01 +05:00

1726 lines
60 KiB
Bash

#!/bin/bash
#CyberPanel installer script for CentOS 7.X, CentOS 8.X, CloudLinux 7.X, Ubuntu 18.04 and Ubuntu 20.04
SUDO_TEST=$(set)
DEV="OFF"
POSTFIX_VARIABLE="ON"
POWERDNS_VARIABLE="ON"
PUREFTPD_VARIABLE="ON"
### Remote MySQL Variables
REMOTE_MYSQL='OFF'
MYSQL_HOST=''
MYSQL_DB=''
MYSQL_USER=''
MYSQL_PASSWORD=''
MYSQL_PORT=''
PROVIDER="undefined"
SERIAL_NO=""
DIR=$(pwd)
TEMP=$(curl --silent https://cyberpanel.net/version.txt)
CP_VER1=${TEMP:12:3}
CP_VER2=${TEMP:25:1}
SERVER_OS="CentOS"
VERSION="OLS"
LICENSE_KEY=""
KEY_SIZE=""
ADMIN_PASS="1234567"
CUSTOM_PASS="False"
MEMCACHED="ON"
REDIS="ON"
TOTAL_RAM=$(free -m | awk '/Mem:/ { print $2 }')
CENTOS_8="False"
UBUNTU_20="False"
WATCHDOG="OFF"
VIRT_TYPE=""
MASTER_GIT_URL="github.com/usmannasir/cyberpanel"
set_git_repos_and_branch() {
echo 'Setting up Branches,1' >/var/log/installLogs.txt
local GIT_DIR
local GIT_USER
local GIT_REPO
if [ -z ${GIT_URL+x} ]; then
GIT_URL=$MASTER_GIT_URL
else
printf "Found custom provided GIT URL...\n"
fi
if [ -z ${BRANCH_NAME+x} ]; then
BRANCH_NAME="v${TEMP:12:3}.${TEMP:25:1}"
else
printf "Found custom provided branch...\n"
fi
### To be removed when branch is merged
BRANCH_NAME="v2.0.4-dev"
###
GIT_DIR=$(dirname "$GIT_URL")
GIT_USER=$(basename "$GIT_DIR")
GIT_REPO=$(basename "$GIT_URL")
GIT_CONTENT_URL="raw.githubusercontent.com/$GIT_USER/$GIT_REPO"
printf "\n~~~~~~~~~~\n"
printf "Github URL: %s\n" "$GIT_URL"
printf "Github Content URL: %s\n" "$GIT_CONTENT_URL"
printf "Github Branch: %s\n" "$BRANCH_NAME"
printf "~~~~~~~~~~\n"
echo 'Setting up Branches,1' >/var/log/installLogs.txt
}
disable_repos() {
if [[ $SERVER_OS == "CentOS" ]]; then
sed -i 's|enabled=1|enabled=0|g' /etc/yum.repos.d/CentOS-Base.repo
sed -i 's|enabled=1|enabled=0|g' /etc/yum.repos.d/CentOS-Debuginfo.repo
sed -i 's|enabled=1|enabled=0|g' /etc/yum.repos.d/CentOS-Media.repo
sed -i 's|enabled=1|enabled=0|g' /etc/yum.repos.d/CentOS-Vault.repo
sed -i 's|enabled=1|enabled=0|g' /etc/yum.repos.d/CentOS-CR.repo
sed -i 's|enabled=1|enabled=0|g' /etc/yum.repos.d/CentOS-fasttrack.repo
sed -i 's|enabled=1|enabled=0|g' /etc/yum.repos.d/CentOS-Sources.repo
fi
}
check_return() {
#check previous command result , 0 = ok , non-0 = something wrong.
if [[ $? -eq "0" ]]; then
:
else
echo -e "\ncommand failed, exiting..."
echo 'command failed, exiting. For more information read /var/log/installLogs.txt [404]' >>/var/log/installLogs.txt
exit
fi
}
install_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
}
watchdog_setup() {
if [[ $WATCHDOG == "ON" ]]; then
wget -O /etc/cyberpanel/watchdog.sh https://$GIT_CONTENT_URL/stable/CPScripts/watchdog.sh
chmod 700 /etc/cyberpanel/watchdog.sh
ln -s /etc/cyberpanel/watchdog.sh /usr/local/bin/watchdog
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 ..."
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
fi
echo -e "\n Setting up WatchDog..."
fi
}
webadmin_passwd() {
if [[ $VERSION == "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 ''
)
TEMP=$(/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:$TEMP" >/usr/local/lsws/admin/conf/htpasswd
echo ${WEBADMIN_PASS} >/etc/cyberpanel/webadmin_passwd
chmod 600 /etc/cyberpanel/webadmin_passwd
}
openvz_change() {
if [[ $VIRT_TYPE == "OpenVZ" ]]; then
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..."
fi
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..."
fi
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..."
fi
fi
}
check_virtualization() {
echo -e "Checking virtualization type..."
if hostnamectl | grep -q "Virtualization: lxc"; then
echo -e "\nLXC detected..."
echo -e "CyberPanel does not support LXC"
echo -e "Exiting..."
echo 'CyberPanel does not support LXC.. [404]' >>/var/log/installLogs.txt
exit
fi
if hostnamectl | grep -q "Virtualization: openvz"; then
echo -e "\nOpenVZ detected..."
VIRT_TYPE="OpenVZ"
openvz_change
fi
}
license_validation() {
CURRENT_DIR=$(pwd)
if [ -f /root/cyberpanel-tmp ]; then
rm -rf /root/cyberpanel-tmp
fi
mkdir /root/cyberpanel-tmp
cd /root/cyberpanel-tmp
wget -q https://$DOWNLOAD_SERVER/litespeed/lsws-$LSWS_STABLE_VER-ent-x86_64-linux.tar.gz
tar xzvf lsws-$LSWS_STABLE_VER-ent-x86_64-linux.tar.gz >/dev/null
cd /root/cyberpanel-tmp/lsws-$LSWS_STABLE_VER/conf
if [[ $LICENSE_KEY == "TRIAL" ]]; then
wget -q http://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_VER/trial.key http://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_VER/bin
if [[ $LICENSE_KEY == "TRIAL" ]]; then
if ./lshttpd -V |& grep "ERROR"; then
echo -e "\n\nIt apeears to have some issue with license , please check above result..."
echo 'It appears to have some issue with LiteSpeed License, make sure you are using correct serial key. [404]' >>/var/log/installLogs.txt
exit
fi
LICENSE_KEY="1111-2222-3333-4444"
else
if ./lshttpd -r |& grep "ERROR"; then
./lshttpd -r
echo -e "\n\nIt apeears to have some issue with license , please check above result..."
echo 'It appears to have some issue with LiteSpeed License, make sure you are using correct serial key. [404]' >>/var/log/installLogs.txt
exit
fi
fi
echo -e "License seems valid..."
cd /root/cyberpanel-tmp
rm -rf lsws-$LSWS_STABLE_VER*
cd $CURRENT_DIR
rm -rf /root/cyberpanel-tmp
}
special_change() {
sed -i 's|cyberpanel.sh|'$DOWNLOAD_SERVER'|g' install.py
sed -i 's|mirror.cyberpanel.net|'$DOWNLOAD_SERVER'|g' install.py
sed -i 's|git clone https://github.com/usmannasir/cyberpanel|echo downloaded|g' install.py
#change to CDN first, regardless country
#sed -i 's|http://|https://|g' install.py
if [[ $PROVIDER == "Alibaba Cloud" ]]; then
if ! grep -q "100.100.2.136" /etc/resolv.conf; then
echo -e "\nnameserver 100.100.2.136" >>/etc/resolv.conf
fi
if ! grep -q "100.100.2.138" /etc/resolv.conf; then
echo -e "\nnameserver 100.100.2.138" >>/etc/resolv.conf
fi
else
if ! grep -q "1.1.1.1" /etc/resolv.conf; then
echo -e "\nnameserver 1.1.1.1" >>/etc/resolv.conf
fi
if ! grep -q "8.8.8.8" /etc/resolv.conf; then
echo -e "\nnameserver 8.8.8.8" >>/etc/resolv.conf
fi
fi
cp /etc/resolv.conf /etc/resolv.conf-tmp
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
LATEST_URL="https://update.litespeedtech.com/ws/latest.php"
#LATEST_URL="https://cyberpanel.sh/latest.php"
curl --silent -o /tmp/lsws_latest $LATEST_URL 2>/dev/null
LSWS_STABLE_LINE=$(cat /tmp/lsws_latest | grep LSWS_STABLE)
LSWS_STABLE_VER=$(expr "$LSWS_STABLE_LINE" : '.*LSWS_STABLE=\(.*\) BUILD .*')
if [[ $PROVIDER == "Alibaba Cloud" ]] && [[ $SERVER_OS == "Ubuntu" ]]; then
mkdir /root/.config
mkdir /root/.config/pip
cat <<EOF >/root/.config/pip/pip.conf
[global]
index-url = https://pypi.python.org/simple/
[install]
trusted-host=pypi.python.org
EOF
echo -e "\nSet pip repo..."
fi
#seems Alibaba cloud , other than CN , also requires change on ubuntu.
if [[ $SERVER_COUNTRY == "CN" ]]; then
#line1="$(grep -n "github.com/usmannasir/cyberpanel" install.py | head -n 1 | cut -d: -f1)"
#line2=$((line1 - 1))
#sed -i "${line2}i\ \ \ \ \ \ \ \ subprocess.call(command, shell=True)" install.py
#sed -i "${line2}i\ \ \ \ \ \ \ \ command = 'tar xzvf cyberpanel-git.tar.gz'" install.py
#sed -i "${line2}i\ \ \ \ \ \ \ \ subprocess.call(command, shell=True)" install.py
#sed -i "${line2}i\ \ \ \ \ \ \ \ command = 'wget cyberpanel.sh/cyberpanel-git.tar.gz'" install.py
sed -i 's|wget http://rpms.litespeedtech.com/debian/|wget --no-check-certificate https://rpms.litespeedtech.com/debian/|g' install.py
sed -i 's|https://repo.powerdns.com/repo-files/centos-auth-42.repo|https://'$DOWNLOAD_SERVER'/powerdns/powerdns.repo|g' installCyberPanel.py
sed -i 's|https://www.rainloop.net/repository/webmail/rainloop-community-latest.zip|https://'$DOWNLOAD_SERVER'/misc/rainloop-community-latest.zip|g' install.py
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://'$DOWNLOAD_SERVER'/litespeed/litespeed.repo|g' install.py
sed -i 's|https://copr.fedorainfracloud.org/coprs/copart/restic/repo/epel-7/copart-restic-epel-7.repo|https://'$DOWNLOAD_SERVER'/restic/restic.repo|g' install.py
sed -i 's|yum -y install http://cyberpanel.sh/gf-release-latest.gf.el7.noarch.rpm|wget -O /etc/yum.repos.d/gf.repo https://'$DOWNLOAD_SERVER'/gf-plus/gf.repo|g' install.py
sed -i 's|dovecot-2.3-latest|dovecot-2.3-latest-mirror|g' install.py
sed -i 's|git clone https://github.com/usmannasir/cyberpanel|wget https://cyberpanel.sh/cyberpanel-git.tar.gz \&\& tar xzvf cyberpanel-git.tar.gz|g' install.py
sed -i 's|http://repo.dovecot.org/ce-2.3-latest/centos/$releasever/RPMS/$basearch|https://'$DOWNLOAD_SERVER'/dovecot/|g' install.py
sed -i 's|'$DOWNLOAD_SERVER'|cyberpanel.sh|g' install.py
sed -i 's|https://www.litespeedtech.com/packages/5.0/lsws-5.4.2-ent-x86_64-linux.tar.gz|https://'$DOWNLOAD_SERVER'/litespeed/lsws-'$LSWS_STABLE_VER'-ent-x86_64-linux.tar.gz|g' installCyberPanel.py
sed -i 's|wget -O - https://get.acme.sh \| sh|git clone https://gitee.com/qtwrk/acme.sh.git ; cd acme.sh ; ./acme.sh --install ; cd - ; rm -rf acme.sh|g' install.py
sed -i 's|composer.sh|composer_cn.sh|g' install.py
sed -i 's|yum -y install http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm|wget -O /etc/yum.repos.d/lux.repo https://'$DOWNLOAD_SERVER'/lux/lux.repo|g' install.py
# global change for CN , regardless provider and system
if [[ $SERVER_OS == "CentOS" ]]; then
sed -i 's|https://www.litespeedtech.com/packages/5.0/lsws-5.3.5-ent-x86_64-linux.tar.gz|https://cyberpanel.sh/packages/5.0/lsws-5.3.5-ent-x86_64-linux.tar.gz|g' installCyberPanel.py
fi
if [[ $SERVER_OS == "Ubuntu" ]]; then
echo $'\n89.208.248.38 rpms.litespeedtech.com\n' >>/etc/hosts
echo -e "Mirror server set..."
if [[ $PROVIDER == "Tencent Cloud" ]]; then
#tencent cloud and ubuntu system
echo -e "\n Tencent Cloud detected ... bypass default repository"
cp /etc/apt/sources.list /etc/apt/sources.list-backup
#backup original sources list
cat <<'EOF' >/etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
EOF
DEBIAN_FRONTEND=noninteractive apt update -y
fi
fi
fi
}
system_tweak() {
number=$(grep -n "127.0.0.1" /etc/hosts | cut -d: -f 1)
my_hostname=$(hostname)
if [[ -n $number ]]; then
for number2 in $number; do
string=$(sed "${number2}q;d" /etc/hosts)
if [[ $string == *"$my_hostname"* ]]; then
:
else
new_string="$string $my_hostname"
sed -i "${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
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
fi
if ! grep -q "pid_max" /etc/rc.local; 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
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
TOTAL_SWAP=$(free -m | awk '/^Swap:/ { print $2 }')
SET_SWAP=$((TOTAL_RAM - TOTAL_SWAP))
SWAP_FILE=/cyberpanel.swap
if [ ! -f $SWAP_FILE ]; then
if [[ $TOTAL_SWAP -gt $TOTAL_RAM ]] || [[ $TOTAL_SWAP -eq $TOTAL_RAM ]]; then
echo "SWAP check..."
else
if [[ $SET_SWAP -gt "2049" ]]; then
SET_SWAP="2048"
else
echo "Checking SWAP..."
fi
fallocate --length ${SET_SWAP}MiB $SWAP_FILE
chmod 600 $SWAP_FILE
mkswap $SWAP_FILE
swapon $SWAP_FILE
echo "${SWAP_FILE} swap swap sw 0 0" | sudo tee -a /etc/fstab
sysctl vm.swappiness=10
echo "vm.swappiness = 10" >>/etc/sysctl.conf
echo "SWAP set..."
fi
fi
}
install_required() {
echo 'Installing necessary components..,3' >/var/log/installLogs.txt
if [[ -d /etc/yum.repos.d ]]; then
yum clean all
yum update -y
yum autoremove epel-release -y
rm -f /etc/yum.repos.d/epel.repo
rm -f /etc/yum.repos.d/epel.repo.rpmsave
yum install epel-release -y
if [[ $CENTOS_8 == "True" ]]; then
dnf install zip -y
elif [[ $CENTOS_8 == "False" ]]; then
###### Setup Required Repos
## Start with PDNS
yum install yum-plugin-priorities -y
curl -o /etc/yum.repos.d/powerdns-auth-43.repo https://repo.powerdns.com/repo-files/centos-auth-43.repo
## MariaDB
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
## Ghetoo Repo for Postfix/Dovecot
yum --nogpg install https://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpm -y
## Copr for restic
yum install yum-plugin-copr -y
yum copr enable copart/restic -y
## Lux for git 2.17 or more
yum install http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm -y
## IUS Repo for python 3
yum install https://repo.ius.io/ius-release-el7.rpm -y
fi
fi
echo -e "\nInstalling necessary components..."
if [[ $SERVER_OS == "CentOS" ]]; then
yum clean all
yum update -y
if [[ $CENTOS_8 == "False" ]]; 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
check_return
yum -y groupinstall development
check_return
fi
if [[ $CENTOS_8 == "True" ]]; then
dnf install -y 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
check_return
dnf --enablerepo=PowerTools install gpgme-devel -y
dnf --enablerepo=powertools install gpgme-devel -y
#check_return
fi
ln -s /usr/bin/pip3 /usr/bin/pip
pip install virtualenv==16.7.9
#pip install virtualenv
check_return
fi
if [[ $SERVER_OS == "Ubuntu" ]]; then
apt update -y
#DEBIAN_FRONTEND=noninteractive apt upgrade -y
DEBIAN_FRONTEND=noninteracitve apt install -y 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
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
pip install virtualenv==16.7.9
#pip install virtualenv
check_return
fi
echo 'Necessary components installed..,5' >/var/log/installLogs.txt
}
memcached_installation() {
if [[ $SERVER_OS == "CentOS" ]]; then
yum install -y lsphp74-memcached lsphp73-memcached lsphp72-memcached lsphp71-memcached lsphp70-memcached lsphp56-pecl-memcached lsphp55-pecl-memcached lsphp54-pecl-memcached
if [[ $TOTAL_RAM -eq "2048" ]] || [[ $TOTAL_RAM -gt "2048" ]]; then
yum groupinstall "Development Tools" -y
yum install autoconf automake zlib-devel openssl-devel expat-devel pcre-devel libmemcached-devel cyrus-sasl* -y
wget https://$DOWNLOAD_SERVER/litespeed/lsmcd.tar.gz
tar xzvf lsmcd.tar.gz
DIR=$(pwd)
cd $DIR/lsmcd
./fixtimestamp.sh
./configure CFLAGS=" -O3" CXXFLAGS=" -O3"
make
make install
systemctl enable lsmcd
systemctl start lsmcd
cd $DIR
else
yum install -y memcached
sed -i 's|OPTIONS=""|OPTIONS="-l 127.0.0.1 -U 0"|g' /etc/sysconfig/memcached
systemctl enable memcached
systemctl start memcached
fi
fi
if [[ $SERVER_OS == "Ubuntu" ]]; then
DEBIAN_FRONTEND=noninteractive apt install -y lsphp74-memcached
DEBIAN_FRONTEND=noninteractive apt install -y lsphp73-memcached
DEBIAN_FRONTEND=noninteractive apt install -y lsphp72-memcached
DEBIAN_FRONTEND=noninteractive apt install -y lsphp71-memcached
DEBIAN_FRONTEND=noninteractive apt install -y lsphp70-memcached
if [[ $TOTAL_RAM -eq "2048" ]] || [[ $TOTAL_RAM -gt "2048" ]]; then
DEBIAN_FRONTEND=noninteractive apt install build-essential zlib1g-dev libexpat1-dev openssl libssl-dev libsasl2-dev libpcre3-dev git -y
wget https://$DOWNLOAD/litespeed/lsmcd.tar.gz
tar xzvf lsmcd.tar.gz
DIR=$(pwd)
cd $DIR/lsmcd
./fixtimestamp.sh
./configure CFLAGS=" -O3" CXXFLAGS=" -O3"
make
make install
cd $DIR
systemctl enable lsmcd
systemctl start lsmcd
else
DEBIAN_FRONTEND=noninteractive apt install -y memcached
systemctl enable memcached
systemctl start memcached
fi
fi
if ps -aux | grep "lsmcd" | grep -v grep; then
echo -e "\n\nLiteSpeed Memcached installed and running..."
fi
if ps -aux | grep "memcached" | grep -v grep; then
echo -e "\n\nMemcached installed and running..."
fi
}
redis_installation() {
if [[ $SERVER_OS == "CentOS" ]]; then
if [[ CENTOS_8 == "True" ]]; then
yum install -y lsphp74-redis lsphp73-redis lsphp72-redis lsphp71-redis lsphp70-redis lsphp56-redis lsphp55-redis lsphp54-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 lsphp74-redis
DEBIAN_FRONTEND=noninteractive apt install -y lsphp73-redis
DEBIAN_FRONTEND=noninteractive apt install -y lsphp72-redis
DEBIAN_FRONTEND=noninteractive apt install -y lsphp71-redis
DEBIAN_FRONTEND=noninteractive apt install -y lsphp70-redis
DEBIAN_FRONTEND=noninteractive apt install -y redis
fi
if ifconfig -a | grep inet6; then
echo -e "\n IPv6 detected..."
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 == "CentOS" ]]; then
systemctl enable redis
systemctl start redis
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
fi
if ps -aux | grep "redis" | grep -v grep; then
echo -e "\n\nRedis installed and running..."
fi
}
check_provider() {
if hash dmidecode >/dev/null 2>&1; then
if [ "$(dmidecode -s bios-vendor)" = 'Google' ]; then
PROVIDER='Google Cloud Platform'
elif [ "$(dmidecode -s bios-vendor)" = 'DigitalOcean' ]; then
PROVIDER='Digital Ocean'
elif [ "$(dmidecode -s system-product-name | cut -c 1-7)" = 'Alibaba' ]; then
PROVIDER='Alibaba Cloud'
elif [ "$(dmidecode -s system-manufacturer)" = 'Microsoft Corporation' ]; then
PROVIDER='Microsoft Azure'
elif [ -d /usr/local/qcloud ]; then
PROVIDER='Tencent Cloud'
else
PROVIDER='undefined'
fi
else
PROVIDER='undefined'
fi
if [[ -f /sys/devices/virtual/dmi/id/product_uuid ]]; then
if [ "$(cat /sys/devices/virtual/dmi/id/product_uuid | cut -c 1-3)" = 'EC2' ] && [ -d /home/ubuntu ]; then
PROVIDER='Amazon Web Service'
fi
fi
}
check_OS() {
echo -e "\nChecking OS..."
OUTPUT=$(cat /etc/*release)
if echo $OUTPUT | grep -q "CentOS Linux 7"; then
echo -e "\nDetecting CentOS 7.X...\n"
SERVER_OS="CentOS"
elif echo $OUTPUT | grep -q "CloudLinux 7"; then
echo -e "\nDetecting CloudLinux 7.X...\n"
SERVER_OS="CentOS"
elif echo $OUTPUT | grep -q "CentOS Linux 8"; then
echo -e "\nDetecting CentOS 8.X...\n"
SERVER_OS="CentOS"
CENTOS_8="True"
elif echo $OUTPUT | grep -q "Ubuntu 18.04"; then
if uname -m | grep -q 64; then
echo -e "\nDetecting Ubuntu 18.04...\n"
SERVER_OS="Ubuntu"
else
echo -e "\nUbuntu 18.04 x32 detected...ths only works on x64 system."
echo 'Ubuntu 18.04 x32 detected...ths only works on x64 system. [404]' >>/var/log/installLogs.txt
exit
fi
elif echo $OUTPUT | grep -q "Ubuntu 20.04"; then
if uname -m | grep -q 64; then
echo -e "\nDetecting Ubuntu 20.04 ...\n"
SERVER_OS="Ubuntu"
UBUNTU_20="True"
else
echo -e "\nUbuntu 20 x32 detected...ths only works on x64 system."
echo 'Ubuntu 20 x32 detected...ths only works on x64 system. [404]' >>/var/log/installLogs.txt
exit
fi
else
cat /etc/*release
echo -e "\nUnable to detect your OS...\n"
echo -e "\nCyberPanel is supported on Ubuntu 18.04 x86_64, Ubuntu 20.04 x86_64, CentOS 7.x, CentOS 8.x and CloudLinux 7.x...\n"
echo 'CyberPanel is supported on Ubuntu 18.04 x86_64, Ubuntu 20.04 x86_64, CentOS 7.x, CentOS 8.x and CloudLinux 7.x... [404]' >>/var/log/installLogs.txt
exit 1
fi
}
check_root() {
echo -e "\nChecking root privileges...\n"
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
if [[ $(id -u) != 0 ]] >/dev/null; then
echo -e "\nYou must use 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"
fi
}
check_panel() {
if [ -d /usr/local/cpanel ]; then
echo -e "\ncPanel detected...exit...\n"
echo 'cPanel detected...exit... [404]' >>/var/log/installLogs.txt
exit 1
fi
if [ -d /opt/plesk ]; then
echo -e "\nPlesk detected...exit...\n"
echo 'Plesk detected...exit... [404]' >>/var/log/installLogs.txt
exit 1
fi
}
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
}
show_help() {
echo -e "\nCyberPanel Installer Script Help\n"
echo -e "\nUsage: sh <(curl cyberpanel.sh) --argument"
echo -e "\n -v or --version: choose to install CyberPanel OpenLiteSpeed or CyberPanel Enterprise, available options are \e[31mols\e[39m and \e[31mSERIAL_NUMBER\e[39m, default ols"
echo -e "\n Please be aware, this serial number must be obtained from LiteSpeed Store."
echo -e "\n 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 -a or --addons: install addons: memcached, redis, PHP extension for memcached and redis"
echo -e "\n -p or --password: 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 "\n -m: set to minimal mode which will not install PowerDNS, Pure-FTPd and Postfix"
echo -e "\n Example:"
echo -e "\n sh <(curl cyberpanel.sh) -v ols -p r or ./cyberpanel.sh --version ols --password random"
echo -e "\n This will install CyberPanel OpenLiteSpeed and randomly generate the password."
echo -e "\n sh <(curl cyberpanel.sh) -v LICENSE_KEY -a -p my_pass_word"
echo -e "\n This will install LiteSpeed Enterise , replace LICENSE_KEY to actual license key and set password to my_pass_word\n"
}
license_input() {
VERSION="ENT"
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 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"
printf "%s" "Please verify it is correct. [y/N]"
read TMP_YN
if [ -z "$TMP_YN" ]; then
echo -e "\nPlease type \e[31my\e[39m\n"
exit
fi
KEY_SIZE=${#LICENSE_KEY}
TMP=$(echo $LICENSE_KEY | cut -c5)
TMP2=$(echo $LICENSE_KEY | cut -c10)
TMP3=$(echo $LICENSE_KEY | cut -c15)
if [[ $TMP == "-" ]] && [[ $TMP2 == "-" ]] && [[ $TMP3 == "-" ]] && [[ $KEY_SIZE == "19" ]]; then
echo -e "\nLicense key set..."
elif [[ $LICENSE_KEY == "trial" ]] || [[ $LICENSE_KEY == "TRIAL" ]] || [[ $LICENSE_KEY == "Trial" ]]; then
echo -e "\nTrial license set..."
LICENSE_KEY="TRIAL"
else
echo -e "\nLicense key seems incorrect, please verify\n"
echo -e "\nIf you are copying/pasting, please make sure you didn't paste blank space...\n"
exit
fi
echo -e "\nWould you like use Redis Mass Hosting?"
echo -e "Please type Yes or No (with capital \e[31mY\e[39m, default No):"
printf "%s"
read REDIS_HOSTING
}
interactive_mode() {
echo -e " CyberPanel Installer v$CP_VER1$CP_VER2
1. Install CyberPanel.
2. Addons and Miscellaneous
3. Exit.
"
read -p " Please enter the number[1-3]: " num
echo ""
case "$num" in
1)
interactive_install
;;
2)
interactive_others
;;
3)
exit
;;
*)
echo -e " Please enter the right number [1-3]\n"
exit
;;
esac
}
interactive_others() {
if [ ! -e "/etc/cyberpanel/machineIP" ]; then
echo -e "\nYou don't have CyberPanel installed...\n"
exit
fi
echo -e " CyberPanel Addons v$CP_VER1$CP_VER2
1. Install Memcached extension and backend
2. Install Redis extension and backend
3. Return to main page.
4. Exit
"
echo && read -p "Please enter the number[1-4]: " num
case "$num" in
1)
memcached_installation
exit
;;
2)
redis_installation
exit
;;
3)
interactive_mode
;;
4)
exit
;;
*)
echo -e "${Error} please enter the right number [1-4]"
;;
esac
}
interactive_install() {
RAM=$(free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }')
DISK=$(df -h | awk '$NF=="/"{printf "%d/%dGB (%s)\n", $3,$2,$5}')
#clear
echo -e " CyberPanel Installer v$CP_VER1$CP_VER2
RAM check : $RAM
Disk check : $DISK (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 -p " Please enter the number[1-3]: " num
echo ""
case "$num" in
1)
VERSION="OLS"
;;
2)
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 TMP_YN
if [[ $(expr "x$TMP_YN" : 'x[Yy]') -gt 1 ]] || [[ $TMP_YN == "" ]]; then
echo -e "\nFull installation selected..."
POSTFIX_VARIABLE="ON"
POWERDNS_VARIABLE="ON"
PUREFTPD_VARIABLE="ON"
else
echo -e ""
printf "%s" "Install Postfix? [Y/n]: "
read TMP_YN
if [[ $TMP_YN =~ ^(no|n|N) ]]; then
POSTFIX_VARIABLE="OFF"
else
POSTFIX_VARIABLE="ON"
fi
echo -e ""
printf "%s" "Install PowerDNS? [Y/n]: "
read TMP_YN
if [[ $TMP_YN =~ ^(no|n|N) ]]; then
POWERDNS_VARIABLE="OFF"
else
POWERDNS_VARIABLE="ON"
fi
echo -e ""
printf "%s" "Install PureFTPd? [Y/n]: "
read TMP_YN
if [[ $TMP_YN =~ ^(no|n|N) ]]; then
PUREFTPD_VARIABLE="OFF"
else
PUREFTPD_VARIABLE="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 TMP_YN
if [[ $(expr "x$TMP_YN" : 'x[Yy]') -gt 1 ]]; then
echo -e "\nRemote MySQL selected..."
REMOTE_MYSQL='ON'
echo -e ""
printf "%s" "Remote MySQL Hostname: "
read MYSQL_HOST
echo -e ""
printf "%s" "Remote MySQL Database that contains meta information regarding MYSQL. (usually mysql): "
read MYSQL_DB
echo -e ""
printf "%s" "Remote MySQL Username: "
read MYSQL_USER
echo -e ""
printf "%s" "Remote MySQL Password: "
read -r -s -p "Password: " MYSQL_PASSWORD
echo -e ""
printf "%s" "Remote MySQL Port: "
read MYSQL_PORT
else
echo -e ""
printf "%s" "Local MySQL selected.."
echo -e ""
fi
###
#above comment for future use
#if [[ $DEV_ARG == "ON" ]] ; then
#echo -e "Press \e[31mEnter\e[39m to continue with stable version of CyberPanel, or"
#echo -e "\nPlease enter \e[31mbeta\e[39m and then press \e[31mEnter\e[39m to install CyberPanel with Python 3."
#echo -e "\nCentOS 8 will autoamtically proceed with Python 3 branch."
#printf "%s" ""
#read TMP_YN
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 TMP_YN
DEV="ON"
if [[ $TMP_YN == "" ]]; then
BRANCH_NAME="v${TEMP:12:3}.${TEMP:25:1}"
echo -e "\nBranch name set to $BRANCH_NAME"
else
base_number="1.9.3"
if [[ $TMP_YN == *.*.* ]]; then
#check input if it's valid format as X.Y.Z
output=$(awk -v num1="$base_number" -v num2="$TMP_YN" '
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$TMP_YN"
echo "set branch name to $BRANCH_NAME"
fi
else
echo -e "\nPlease input a valid format version number."
exit
fi
fi
#if [[ $TMP_YN == "beta" ]] ; then
# DEV="ON"
## echo -e "\nPlease specify branch name"
## printf "%s" ""
## read TMP_YN
# BRANCH_NAME="p3"
# echo -e "Branch name set to $BRANCH_NAME"
#else
# DEV="OFF"
#
# if [[ $CENTOS_8 == "True" ]] ; then
# DEV="ON"
# BRANCH_NAME="p3"
# fi
#fi
#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 TMP_YN
if [[ $TMP_YN =~ ^(d|D| ) ]] || [[ -z $TMP_YN ]]; then
ADMIN_PASS="1234567"
echo -e "\nAdmin password will be set to $ADMIN_PASS\n"
elif [[ $TMP_YN =~ ^(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_YN =~ ^(s|S) ]]; then
CUSTOM_PASS="True"
echo -e "\nPlease enter your password:"
printf "%s" ""
read -r -s -p "Password: " TMP_YN
if [ -z "$TMP_YN" ]; then
echo -e "\nPlease do not use empty string...\n"
exit
fi
if [ ${#TMP_YN} -lt 8 ]; then
echo -e "\nPassword lenth less than 8 digital, please choose a more complicated password.\n"
exit
fi
TMP_YN1=$TMP_YN
printf "%s\n" ""
read -r -s -p "Confirm Password:" TMP_YN
if [ -z "$TMP_YN" ]; then
echo -e "\nPlease do not use empty string...\n"
exit
fi
TMP_YN2=$TMP_YN
if [ $TMP_YN1 = $TMP_YN2 ]; then
ADMIN_PASS=$TMP_YN1
else
echo -e "\nRepeated password didn't match , please check...\n"
exit
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 extension and backend?"
printf "%s" "Please select [Y/n]: "
read TMP_YN
if [[ $TMP_YN =~ ^(no|n|N) ]]; then
MEMCACHED="OFF"
else
MEMCACHED="ON"
fi
echo -e "\nDo you wish to install Redis extension and backend?"
printf "%s" "Please select [Y/n]: "
read TMP_YN
if [[ $TMP_YN =~ ^(no|n|N) ]]; then
REDIS="OFF"
else
REDIS="ON"
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):"
printf "%s"
read TMP_YN
if [[ $TMP_YN == "Yes" ]] || [[ $TMP_YN == "" ]]; then
WATCHDOG="ON"
else
WATCHDOG="OFF"
fi
}
main_install() {
if [[ -e /usr/local/CyberCP ]]; then
echo -e "\n CyberPanel already installed, exiting..."
echo 'CyberPanel already installed, exiting... [404]' >>/var/log/installLogs.txt
exit
fi
special_change
if [[ $VERSION == "ENT" ]]; then
echo -e "\nValidating the license..."
echo -e "\nThis may take a minute..."
echo -e "\nplease be patient...\n\n"
license_validation
SERIAL_NO="--ent ent --serial "
fi
sed -i 's|lsws-5.4.2|lsws-'$LSWS_STABLE_VER'|g' installCyberPanel.py
sed -i 's|lsws-5.3.5|lsws-'$LSWS_STABLE_VER'|g' installCyberPanel.py
#this sed must be done after license validation
echo -e "Preparing..."
echo -e "Installation will start in 10 seconds, if you wish to stop please press CTRL + C"
sleep 10
debug="1"
if [[ $debug == "0" ]]; then
echo "/usr/local/CyberPanel/bin/python install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --postfix $POSTFIX_VARIABLE --powerdns $POWERDNS_VARIABLE --ftp $PUREFTPD_VARIABLE"
exit
fi
if [[ $debug == "1" ]]; then
if [[ $REDIS_HOSTING == "Yes" ]]; then
if [[ $REMOTE_MYSQL == "ON" ]]; then
/usr/local/CyberPanel/bin/python install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --postfix $POSTFIX_VARIABLE --powerdns $POWERDNS_VARIABLE --ftp $PUREFTPD_VARIABLE --redis enable --remotemysql $REMOTE_MYSQL --mysqlhost $MYSQL_HOST --mysqldb $MYSQL_DB --mysqluser $MYSQL_USER --mysqlpassword $MYSQL_PASSWORD --mysqlport $MYSQL_PORT
else
/usr/local/CyberPanel/bin/python install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --postfix $POSTFIX_VARIABLE --powerdns $POWERDNS_VARIABLE --ftp $PUREFTPD_VARIABLE --redis enable --remotemysql $REMOTE_MYSQL
fi
else
if [[ $REMOTE_MYSQL == "ON" ]]; then
echo "/usr/local/CyberPanel/bin/python install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --postfix $POSTFIX_VARIABLE --powerdns $POWERDNS_VARIABLE --ftp $PUREFTPD_VARIABLE --remotemysql $REMOTE_MYSQL --mysqlhost $MYSQL_HOST --mysqluser $MYSQL_USER --mysqlpassword $MYSQL_PASSWORD --mysqlport $MYSQL_PORT"
/usr/local/CyberPanel/bin/python install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --postfix $POSTFIX_VARIABLE --powerdns $POWERDNS_VARIABLE --ftp $PUREFTPD_VARIABLE --remotemysql $REMOTE_MYSQL --mysqlhost $MYSQL_HOST --mysqldb $MYSQL_DB --mysqluser $MYSQL_USER --mysqlpassword $MYSQL_PASSWORD --mysqlport $MYSQL_PORT
else
/usr/local/CyberPanel/bin/python install.py $SERVER_IP $SERIAL_NO $LICENSE_KEY --postfix $POSTFIX_VARIABLE --powerdns $POWERDNS_VARIABLE --ftp $PUREFTPD_VARIABLE --remotemysql $REMOTE_MYSQL
fi
fi
if grep "CyberPanel installation successfully completed" /var/log/installLogs.txt >/dev/null; then
echo -e "\nCyberPanel installation sucessfully completed..."
else
echo -e "Oops, something went wrong..."
echo 'Oops, something went wrong... [404]' >>/var/log/installLogs.txt
exit
fi
if [[ $MEMCACHED == "ON" ]]; then
memcached_installation
fi
if [[ $REDIS == "ON" ]]; then
redis_installation
fi
after_install
fi
}
pip_virtualenv() {
if [[ $SERVER_OS == "Ubuntu" ]]; then
DEBIAN_FRONTEND=noninteractive apt install -y locales
locale-gen "en_US.UTF-8"
update-locale LC_ALL="en_US.UTF-8"
fi
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.
if [[ $DEV == "ON" ]]; then
#install dev branch
wget https://raw.githubusercontent.com/usmannasir/cyberpanel/$BRANCH_NAME/requirments.txt -O /usr/local/requirments.txt
virtualenv -p /usr/bin/python3 /usr/local/CyberPanel
if [[ $UBUNTU_20 == "False" ]]; then
source /usr/local/CyberPanel/bin/activate
pip install -r /usr/local/requirments.txt
check_return
else
. /usr/local/CyberPanel/bin/activate
pip install -r /usr/local/requirments.txt
check_return
fi
fi
if [ -f requirements.txt ] && [ -d cyberpanel ]; then
rm -rf cyberpanel
rm -f requirements.txt
fi
git clone https://${GIT_URL}
cd cyberpanel
git checkout $BRANCH_NAME
check_return
cd -
cp -r cyberpanel /usr/local/cyberpanel
cd cyberpanel/install
curl https://cyberpanel.sh/?version
}
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 [[ $VERSION == "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
}
after_install() {
echo 'Finalization..,80' >>/var/log/installLogs.txt
if [ ! -d "/var/lib/php" ]; then
mkdir /var/lib/php
fi
if [ ! -d "/var/lib/php/session" ]; then
mkdir /var/lib/php/session
fi
chmod 1733 /var/lib/php/session
if grep "\[ERROR\] We are not able to run ./install.sh return code: 1. Fatal error, see /var/log/installLogs.txt for full details" /var/log/installLogs.txt >/dev/null; then
cd ${DIR}/cyberpanel/install/lsws-*
./install.sh
echo -e "\n\n\nIt seems LiteSpeed Enterprise has failed to install, please check your license key is valid"
echo -e "\nIf this license key has been used before, you may need to go to store to release it first."
echo 'It seems LiteSpeed Enterprise has failed to install, please check your license key is valid. If this license key has been used before, you may need to go to store to release it first. [404]' >>/var/log/installLogs.txt
exit
fi
if grep "CyberPanel installation successfully completed" /var/log/installLogs.txt >/dev/null; then
if [[ $DEV == "ON" ]]; then
if [[ $PROVIDER == "Alibaba Cloud" ]] && [[ $SERVER_OS == "Ubuntu" ]]; then
cat <<EOF >/root/.config/pip/pip.conf
[global]
index-url = https://pypi.python.org/simple/
[install]
trusted-host=pypi.python.org
EOF
fi
fi
virtualenv -p /usr/bin/python3 /usr/local/CyberCP
if [[ $UBUNTU_20 == "False" ]]; then
source /usr/local/CyberCP/bin/activate
check_return
pip install -r /usr/local/requirments.txt
check_return
else
. /usr/local/CyberCP/bin/activate
check_return
pip install -r /usr/local/requirments.txt
check_return
fi
## Some permissions on libs
chown -R cyberpanel:cyberpanel /usr/local/CyberCP/lib
chown -R cyberpanel:cyberpanel /usr/local/CyberCP/lib64
systemctl restart lscpd
for version in $(ls /usr/local/lsws | grep lsphp); do
php_ini=$(find /usr/local/lsws/$version/ -name php.ini)
version2=${version:5:2}
version2=$(awk "BEGIN { print "${version2}/10" }")
if [[ $version2 == "7" ]]; then
version2="7.0"
fi
if [[ $SERVER_OS == "CentOS" ]]; then
yum remove -y $version-mysql
yum install -y $version-mysqlnd
yum install -y $version-devel make gcc glibc-devel libmemcached-devel zlib-devel
if [[ ! -d /usr/local/lsws/$version/tmp ]]; then
mkdir /usr/local/lsws/$version/tmp
fi
/usr/local/lsws/${version}/bin/pecl channel-update pecl.php.net
/usr/local/lsws/${version}/bin/pear config-set temp_dir /usr/local/lsws/${version}/tmp
/usr/local/lsws/${version}/bin/pecl install timezonedb
echo "extension=timezonedb.so" >/usr/local/lsws/${version}/etc/php.d/20-timezone.ini
chmod 755 /usr/local/lsws/${version}/lib64/php/modules/timezonedb.so
sed -i 's|expose_php = On|expose_php = Off|g' $php_ini
sed -i 's|mail.add_x_header = On|mail.add_x_header = Off|g' $php_ini
sed -i 's|;session.save_path = "/tmp"|session.save_path = "/var/lib/php/session"|g' $php_ini
fi
if [[ $SERVER_OS == "Ubuntu" ]]; then
if [[ ! -d /usr/local/lsws/cyberpanel-tmp ]]; then
if [[ -d /etc/pure-ftpd/conf ]]; then
echo "yes" >/etc/pure-ftpd/conf/ChrootEveryone
systemctl restart pure-ftpd-mysql
fi
DEBIAN_FRONTEND=noninteractive apt install libmagickwand-dev pkg-config build-essential -y
mkdir /usr/local/lsws/cyberpanel-tmp
cd /usr/local/lsws/cyberpanel-tmp
wget -O timezonedb.tgz https://pecl.php.net/get/timezonedb
tar xzvf timezonedb.tgz
cd timezonedb-*
fi
/usr/local/lsws/${version}/bin/phpize
./configure --with-php-config=/usr/local/lsws/${version}/bin/php-config${version2}
make
make install
echo "extension=timezonedb.so" >/usr/local/lsws/${version}/etc/php/${version2}/mods-available/20-timezone.ini
make clean
fi
done
rm -rf /etc/profile.d/cyberpanel*
curl --silent -o /etc/profile.d/cyberpanel.sh https://cyberpanel.sh/?banner 2>/dev/null
chmod +x /etc/profile.d/cyberpanel.sh
RAM2=$(free -m | awk 'NR==2{printf "%s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }')
DISK2=$(df -h | awk '$NF=="/"{printf "%d/%dGB (%s)\n", $3,$2,$5}')
ELAPSED="$((SECONDS / 3600)) hrs $(((SECONDS / 60) % 60)) min $((SECONDS % 60)) sec"
MYSQLPASSWD=$(cat /etc/cyberpanel/mysqlPassword)
echo "$ADMIN_PASS" >/etc/cyberpanel/adminPass
/usr/local/CyberPanel/bin/python /usr/local/CyberCP/plogical/adminPass.py --password $ADMIN_PASS
mkdir -p /etc/opendkim
regenerate_cert
systemctl restart lscpd
systemctl restart lsws
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
if [[ $VERSION == "OLS" ]]; then
WORD="OpenLiteSpeed"
# sed -i 's|maxConnections 10000|maxConnections 100000|g' /usr/local/lsws/conf/httpd_config.conf
# OLS_LATEST=$(curl https://openlitespeed.org/packages/release)
# wget https://openlitespeed.org/packages/openlitespeed-$OLS_LATEST.tgz
# tar xzvf openlitespeed-$OLS_LATEST.tgz
# cd openlitespeed
# ./install.sh
systemctl stop lsws
systemctl start lsws
# rm -f openlitespeed-$OLS_LATEST.tgz
# rm -rf openlitespeed
# cd ..
fi
if [[ $VERSION == "ENT" ]]; then
WORD="LiteSpeed Enterprise"
if [[ $SERVER_COUNTRY != "CN" ]]; then
/usr/local/lsws/admin/misc/lsup.sh -f -v $LSWS_STABLE_VER
fi
fi
systemctl status lsws >/dev/null 2>&1
if [[ $? == "0" ]]; then
echo "LSWS service is running..."
else
systemctl stop lsws
systemctl start lsws
fi
webadmin_passwd
watchdog_setup
install_utility
if [[ ! -f /usr/sbin/ipset ]] && [[ $SERVER_OS == "Ubuntu" ]]; then
ln -s /sbin/ipset /usr/sbin/ipset
fi
if [[ ! -f /usr/local/lsws/lsphp74/lib64/php/modules/zip.so ]] && [[ $SERVER_OS == "CentOS" ]] && [[ $CENTOS_8 == "False" ]]; then
yum list installed libzip-devel
if [[ $? == "0" ]]; then
yum remove -y libzip-devel
fi
yum install -y https://$DOWNLOAD_SERVER/misc/libzip-0.11.2-6.el7.psychotic.x86_64.rpm
yum install -y https://$DOWNLOAD_SERVER/misc/libzip-devel-0.11.2-6.el7.psychotic.x86_64.rpm
/usr/local/lsws/lsphp74/bin/pecl install zip
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
fi
#fix the lsphp74-zip missing issue.
if [[ $SERVER_OS == "CentOS" ]]; then
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
fi
#fix php.ini &amp; issue
if [[ $UBUNTU_20 == "True" ]]; then
cp /usr/local/lsws/lsphp73/bin/php /usr/bin
fi
#clear
echo "###################################################################"
echo " CyberPanel Successfully Installed "
echo " "
echo " Current Disk usage : $DISK2 "
echo " "
echo " Current RAM usage : $RAM2 "
echo " "
echo " Installation time : $ELAPSED "
echo " "
echo " Visit: https://$SERVER_IP:8090 "
echo " Panel username: admin "
if [[ $CUSTOM_PASS == "True" ]]; then
echo " Panel password: ***** "
elif [[ $CUSTOM_PASS == "False" ]]; then
echo " Panel password: $ADMIN_PASS "
fi
echo " WebAdmin console username: admin "
echo " WebAdmin console password: $WEBADMIN_PASS "
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 " "
echo -e " Enjoy your accelerated Internet by "
echo -e " CyberPanel & $WORD "
echo "###################################################################"
if [[ $PROVIDER != "undefined" ]]; then
echo -e "\033[0;32m$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
if [[ $SERVER_COUNTRY == CN ]]; then
if [[ $PROVIDER == "Tencent Cloud" ]]; then
if [[ $SERVER_OS == "Ubuntu" ]]; then
rm -f /etc/apt/sources.list
mv /etc/apt/sources.list-backup /etc/apt/sources.list
echo >"nameserver 127.0.0.53
options edns0" /run/systemd/resolve/stub-resolv.conf
echo >"nameserver 127.0.0.53
options edns0" /etc/resolv.conf
apt update
#revert the previous change on tencent cloud repo.
fi
fi
if [[ $VERSION == "ENT" ]]; then
sed -i 's|https://www.litespeedtech.com/packages/5.0/lsws-5.3.5-ent-x86_64-linux.tar.gz|https://cyberpanel.sh/packages/5.0/lsws-5.3.5-ent-x86_64-linux.tar.gz|g' /usr/local/CyberCP/install/installCyberPanel.py
sed -i 's|https://www.litespeedtech.com/packages/5.0/lsws-5.3.8-ent-x86_64-linux.tar.gz|https://cyberpanel.sh/packages/5.0/lsws-5.3.8-ent-x86_64-linux.tar.gz|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i 's|https://www.litespeedtech.com/packages/5.0/lsws-5.3.8-ent-x86_64-linux.tar.gz|https://'$DOWNLOAD_SERVER'/litespeed/lsws-'$LSWS_STABLE_VER'-ent-x86_64-linux.tar.gz|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
echo -e "If you have install LiteSpeed Enterprise, please run \e[31m/usr/local/lsws/admin/misc/lsup.sh\033[39m to update it to latest."
fi
fi
sed -i 's|lsws-5.3.8|lsws-'$LSWS_STABLE_VER'|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i 's|lsws-5.4.2|lsws-'$LSWS_STABLE_VER'|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
sed -i 's|lsws-5.3.5|lsws-'$LSWS_STABLE_VER'|g' /usr/local/CyberCP/serverStatus/serverStatusUtil.py
if [[ -f /etc/pure-ftpd/pure-ftpd.conf ]]; then
sed -i 's|NoAnonymous no|NoAnonymous yes|g' /etc/pure-ftpd/pure-ftpd.conf
fi
if [[ $SILENT != "ON" ]]; then
printf "%s" "Would you like to restart your server now? [y/N]: "
read TMP_YN
if [[ $TMP_YN == "N" ]] || [[ $TMP_YN == "n" ]] || [[ -z $TMP_YN ]]; then
:
else
reboot
exit
fi
exit
fi
#replace URL for CN
else
echo "something went wrong..."
echo 'something went wrong... [404]' >>/var/log/installLogs.txt
exit
fi
}
argument_mode() {
DEV="ON"
#default to python3 branch.
KEY_SIZE=${#VERSION}
TMP=$(echo $VERSION | cut -c5)
TMP2=$(echo $VERSION | cut -c10)
TMP3=$(echo $VERSION | cut -c15)
if [[ $VERSION == "OLS" || $VERSION == "ols" ]]; then
VERSION="OLS"
echo -e "\nSet to OpenLiteSpeed..."
elif [[ $VERSION == "Trial" ]] || [[ $VERSION == "TRIAL" ]] || [[ $VERSION == "trial" ]]; then
VERSION="ENT"
LICENSE_KEY="TRIAL"
echo -e "\nLiteSpeed Enterprise trial license set..."
elif [[ $TMP == "-" ]] && [[ $TMP2 == "-" ]] && [[ $TMP3 == "-" ]] && [[ $KEY_SIZE == "19" ]]; then
LICENSE_KEY=$VERSION
VERSION="ENT"
echo -e "\nLiteSpeed Enterprise license key set..."
else
echo -e "\nCan not recognize the input value \e[31m$VERSION\e[39m "
echo -e "\nPlease verify the input value..."
echo -e "\nPlease run with \e[31m-h\e[39m or \e[31m--help\e[39m for more detail."
exit
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"
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"
echo $ADMIN_PASS
else
echo -e "\nAdmin password will be set to \e[31m$ADMIN_PASS\e[39m"
fi
}
initialize() {
if [ $# -eq 0 ]; then
echo -e "\nInitializing...\n"
else
if [[ $1 == "help" ]]; then
show_help
exit
elif [[ $1 == "dev" ]]; then
DEV="ON"
DEV_ARG="ON"
SILENT="OFF"
elif [[ $1 == "default" ]]; then
echo -e "\nThis will start default installation...\n"
SILENT="ON"
POSTFIX_VARIABLE="ON"
POWERDNS_VARIABLE="ON"
PUREFTPD_VARIABLE="ON"
VERSION="OLS"
ADMIN_PASS="1234567"
MEMCACHED="ON"
REDIS="ON"
else
while [ ! -z "${1}" ]; do
case $1 in
-v | --version)
shift
if [ "${1}" = '' ]; then
show_help
exit
else
VERSION="${1}"
SILENT="ON"
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
;;
-a | --addons)
MEMCACHED="ON"
REDIS="ON"
;;
-m | --minimal)
POSTFIX_VARIABLE="OFF"
POWERDNS_VARIABLE="OFF"
PUREFTPD_VARIABLE="OFF"
;;
-h | --help)
show_help
exit
;;
*)
echo "unknown argument..."
show_help
exit
;;
esac
shift
done
fi
fi
SERVER_IP=$(curl --silent --max-time 10 -4 https://cyberpanel.sh/?ip)
if [[ $SERVER_IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo -e "Valid IP detected..."
else
echo -e "Can not detect IP, exit..."
exit
fi
SERVER_COUNTRY="unknow"
SERVER_COUNTRY=$(curl --silent --max-time 5 https://cyberpanel.sh/?country)
if [[ ${#SERVER_COUNTRY} == "2" ]] || [[ ${#SERVER_COUNTRY} == "6" ]]; then
echo -e "\nChecking server..."
else
echo -e "\nChecking server..."
SERVER_COUNTRY="unknow"
fi
#SERVER_COUNTRY="CN"
#test string
if [[ $SERVER_COUNTRY == "CN" ]]; then
DOWNLOAD_SERVER="cyberpanel.sh"
GIT_URL="gitee.com/qtwrk/cyberpanel"
GIT_CONTENT_URL="gitee.com/qtwrk/cyberpanel/raw"
else
DOWNLOAD_SERVER="cdn.cyberpanel.sh"
fi
echo 'Initialization completed..,2' >/var/log/installLogs.txt
}
begin_install() {
set_git_repos_and_branch
initialize "$@"
check_OS
check_virtualization
check_root
check_panel
check_process
check_provider
if [[ $SILENT == "ON" ]]; then
argument_mode
else
interactive_mode
fi
SECONDS=0
install_required
openvz_change
pip_virtualenv
system_tweak
main_install
disable_repos
}
begin_install "$@"
echo 'Completed [200]' >>/var/log/installLogs.txt