#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
LANG=en_US.UTF-8
is64bit=`getconf LONG_BIT`
if [ -f "/usr/bin/apt-get" ];then
isDebian=`cat /etc/issue|grep Debian`
if [ "$isDebian" != "" ];then
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh
exit;
else
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
exit;
fi
fi
if [ "$is64bit" != '64' ];then
echo "====================================="
echo "抱歉, 6.0不支持32位系统, 请使用64位系统或安装宝塔5.9!";
exit 0;
fi
py26=$(python -V 2>&1|grep '2.6.')
if [ "$py26" != "" ];then
echo "====================================="
echo "抱歉, 6.0不支持Centos6.x,请安装Centos7或安装宝塔5.9";
exit 0;
fi
CN='http://125.88.182.172:5880'
Install_Check(){
while [ "$yes" != 'yes' ] && [ "$yes" != 'n' ]
do
echo -e "----------------------------------------------------"
echo -e "已有Web环境,安装宝塔可能影响现有站点"
echo -e "Web service is alreday installed,Can't install panel"
echo -e "----------------------------------------------------"
read -p "输入yes强制安装/Enter yes to force installation (yes/n): " yes;
done
if [ "$yes" == 'n' ];then
exit;
fi
}
Web_Service_Check(){
if [ -f "/etc/init.d/nginx" ]; then
nginxV=$(cat /etc/init.d/nginx|grep /www/server/nginx)
if [ "${nginxV}"="" ];then
Install_Check
fi
fi
if [ -f"/etc/init.d/httpd" ];then
httpdV=$(cat /etc/init.d/httpd|grep /www/server/apache)
if [ "${httpdV}"="" ];then
Install_Check
fi
fi
if [ -f"/etc/init.d/mysqld" ];then
mysqlV=$(cat /etc/init.d/mysqld|grep /www/server/mysql)
if [ "${mysqlV}"="" ];then
Install_Check
fi
fi
}
Web_Service_Check
echo "
+----------------------------------------------------------------------
| Bt-WebPanel 6.0 FOR CentOS
+----------------------------------------------------------------------
| Copyright © 2015-2099 BT-SOFT(http://www.bt.cn) All rights reserved.
+----------------------------------------------------------------------
| The WebPanel URL will be http://SERVER_IP:8888 when installed.
+----------------------------------------------------------------------
"
get_node_url(){
nodes=(http://183.235.223.101:3389 http://119.188.210.21:5880 http://125.88.182.172:5880 http://103.224.251.67 http://45.32.116.160 http://download.bt.cn);
i=1;
if [ ! -f /bin/curl ];then
if [ -f /usr/local/curl/bin/curl ];then
ln -sf /usr/local/curl/bin/curl /bin/curl
else
yum install curl -y
fi
fi
for node in ${nodes[@]};
do
start=`date +%s.%N`
result=`curl -sS --connect-timeout 3 -m 60 $node/check.txt`
if [ $result = 'True' ];then
end=`date +%s.%N`
start_s=`echo $start | cut -d '.' -f 1`
start_ns=`echo $start | cut -d '.' -f 2`
end_s=`echo $end | cut -d '.' -f 1`
end_ns=`echo $end | cut -d '.' -f 2`
time_micro=$(( (10#$end_s-10#$start_s)*1000000 + (10#$end_ns/1000 - 10#$start_ns/1000) ))
time_ms=$(($time_micro/1000))
values[$i]=$time_ms;
urls[$time_ms]=$node
i=$(($i+1))
fi
done
j=5000
for n in ${values[@]};
do
if [ $j -gt $n ];then
j=$n
fi
done
if [ $j = 5000 ];then
NODE_URL='http://download.bt.cn';
else
NODE_URL=${urls[$j]}
fi
}
echo '---------------------------------------------';
echo "Selected download node...";
get_node_url
download_Url=$NODE_URL
echo "Download node: $download_Url";
echo '---------------------------------------------';
setup_path=/www
port='8888'
if [ -f $setup_path/server/panel/data/port.pl ];then
port=`cat $setup_path/server/panel/data/port.pl`
fi
while [ "$go" != 'y' ] && [ "$go" != 'n' ]
do
read -p "Do you want to install Bt-Panel to the $setup_path directory now?(y/n): " go;
done
if [ "$go" == 'n' ];then
exit;
fi
path=/etc/yum.conf
isExc=`cat $path|grep httpd`
if [ "$isExc" = "" ];then
echo"exclude=httpd nginx php mysql mairadb python-psutil python2-psutil">>$path
fi
#自动挂载Swap
autoSwap()
{
swap=`free |grep Swap|awk '{print $2}'`
if [ $swap -gt 1 ];then
echo"Swap total sizse: $swap";
return;
fi
if [ ! -d /www ];then
mkdir /www
fi
swapFile='/www/swap'
dd if=/dev/zero of=$swapFile bs=1M count=1025
mkswap -f $swapFile
swapon $swapFile
echo"$swapFile swap swap defaults 0 0">> /etc/fstab
swap=`free |grep Swap|awk '{print $2}'`
if [ $swap -gt 1 ];then
echo"Swap total sizse: $swap";
return;
fi
sed -i "/\/www\/swap/d" /etc/fstab
rm -f $swapFile
}
autoSwap
#判断kernel-headers组件是否安装
rpm -qa | grep kernel-headers > kernel-headers.pl
kernelStatus=`cat kernel-headers.pl`
#判断华为云
huaweiLogin=`cat /etc/motd |grep 4000-955-988`
huaweiSys=`cat /etc/redhat-release | grep ' 7.'`
if [ "$kernelStatus" = "" ]; then
if [ "$huaweiLogin" != "" ] && [ "$huaweiSys" != "" ]; then
wget $download_Url/src/kernel-headers-3.10.0-514.el7.x86_64.rpm
rpm -ivh kernel-headers-3.10.0-514.el7.x86_64.rpm
rm -f kernel-headers-3.10.0-514.el7.x86_64.rpm
else
yum install kernel-headers -y
fi
fi
rm -f kernel-headers.pl
yum install ntp -y
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#尝试同步时间(从bt.cn)
echo 'Synchronizing system time...'
v1=$(curl -sS --connect-timeout 10 -m 3 http://www.bt.cn/api/index/get_time)
if [ "$v1" != "" ];then
date -s "$(date -d @$v1 +"%Y-%m-%d %H:%M:%S")"
fi
#尝试同步国际时间(从ntp服务器)
ntpdate 0.asia.pool.ntp.org
startTime=`date +%s`
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
for pace in python-devel python-imaging zip unzip openssl openssl-devel gcc libxml2 libxml2-devel libxslt* zlib zlib-devel libjpeg-devel libpng-devel libwebp libwebp-devel freetype freetype-devel lsof pcre pcre-devel vixie-cron crontabs icu libicu-devel c-ares;
do
yum -y install ${pace};
done
if [ -f "/usr/bin/dnf" ]; then
dnf install -y redhat-rpm-config
fi
yum install python-devel -y
py26=$(python -V 2>&1|grep '2.6.')
if [ "$py26" != "" ];then
if [ ! -f /etc/yum.repos.d/epel.repo ];then
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
fi
if [ !-f /usr/bin/python3 ];then
yum install python34 python34-devel -y
if [ ! -f /usr/bin/python3 ];then
echo "python3.4 install error!"
exit 0;
fi
isSed=$(cat /usr/bin/yum|grep /usr/bin/python2.6)
if [ "$isSed" == "" ];then
sed -i "s#/usr/bin/python#/usr/bin/python2.6#" /usr/bin/yum
fi
#rm -f /usr/bin/python2
mv -f /usr/bin/python /usr/bin/python2_backup
ln -sf /usr/bin/python3 /usr/bin/python
fi
if [ ! -f /usr/bin/pip3 ];then
wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
mv -f /usr/bin/pip /usr/bin/pip_backup
ln -sf /usr/bin/pip3.4 /usr/bin/pip
fi
fi
tmp=`python -V 2>&1|awk '{print $2}'`
pVersion=${tmp:0:3}
Install_setuptools()
{
if [ ! -f "/usr/bin/easy_install" ];then
wget -O setuptools-33.1.1.zip $download_Url/install/src/setuptools-33.1.1.zip -T 10
unzip setuptools-33.1.1.zip
rm -f setuptools-33.1.1.zip
cd setuptools-33.1.1
python setup.py install
cd ..
rm -rf setuptools-33.1.1
fi
if [ ! -f "/usr/bin/easy_install" ];then
echo '=================================================';
echo -e "\033[31msetuptools installation failed. \033[0m";
exit;
fi
}
Install_pip()
{
ispip=`pip -V |grep from`
if [ "$ispip" == "" ];then
if [ ! -f "/usr/bin/easy_install" ];then
Install_setuptools
fi
wget -O pip-9.0.1.tar.gz $download_Url/install/src/pip-9.0.1.tar.gz -T 10
tar xvf pip-9.0.1.tar.gz
rm -f pip-9.0.1.tar.gz
cd pip-9.0.1
python setup.py install
cd ..
rm -rf pip-9.0.1
fi
ispip=`pip -V |grep from`
if [ "$ispip" = "" ];then
echo '=================================================';
echo -e "\033[31m Python-pip installation failed. \033[0m";
exit;
fi
pip install -U pip
}
Install_Pillow()
{
isSetup=`python -m PIL 2>&1|grep package`
if [ "$isSetup" = "" ];then
isFedora = `cat /etc/redhat-release |grep Fedora`
if [ "$isFedora" != "" ];then
pip install Pillow
return;
fi
wget -O Pillow-3.2.0.zip $download_Url/install/src/Pillow-3.2.0.zip -T 10
unzip Pillow-3.2.0.zip
rm -f Pillow-3.2.0.zip
cd Pillow-3.2.0
python setup.py install
cd ..
rm -rf Pillow-3.2.0
fi
isSetup=`python -m PIL 2>&1|grep package`
if [ "$isSetup" = "" ];then
echo '=================================================';
echo -e "\033[31mPillow installation failed. \033[0m";
exit;
fi
}
Install_psutil()
{
isSetup=`python -m psutil 2>&1|grep package`
if [ "$isSetup" = "" ];then
wget -O psutil-5.2.2.tar.gz $download_Url/install/src/psutil-5.2.2.tar.gz -T 10
tar xvf psutil-5.2.2.tar.gz
rm -f psutil-5.2.2.tar.gz
cd psutil-5.2.2
python setup.py install
cd ..
rm -rf psutil-5.2.2
fi
isSetup=`python -m psutil 2>&1|grep package`
if [ "$isSetup" = "" ];then
echo '=================================================';
echo -e "\033[31mpsutil installation failed. \033[0m";
exit;
fi
}
Install_mysqldb()
{
isSetup=`python -m MySQLdb 2>&1|grep package`
if [ "$isSetup" = "" ];then
wget -O MySQL-python-1.2.5.zip $download_Url/install/src/MySQL-python-1.2.5.zip -T 10
unzip MySQL-python-1.2.5.zip
rm -f MySQL-python-1.2.5.zip
cd MySQL-python-1.2.5
python setup.py install
cd ..
rm -rf MySQL-python-1.2.5
fi
}
Install_chardet()
{
isSetup=`python -m chardet 2>&1|grep package`
if [ "$isSetup" = "" ];then
wget -O chardet-2.3.0.tar.gz $download_Url/install/src/chardet-2.3.0.tar.gz -T 10
tar xvf chardet-2.3.0.tar.gz
rm -f chardet-2.3.0.tar.gz
cd chardet-2.3.0
python setup.py install
cd ..
rm -rf chardet-2.3.0
fi
isSetup=`python -m chardet 2>&1|grep package`
if [ "$isSetup" = "" ];then
echo '=================================================';
echo -e "\033[31mchardet installation failed. \033[0m";
exit;
fi
}
Install_webpy()
{
isSetup=`python -m web 2>&1|grep package`
if [ "$isSetup" = "" ];then
wget -O web.py-0.38.tar.gz $download_Url/install/src/web.py-0.38.tar.gz -T 10
tar xvf web.py-0.38.tar.gz
rm -f web.py-0.38.tar.gz
cd web.py-0.38
python setup.py install
cd ..
rm -rf web.py-0.38
fi
isSetup=`python -m web 2>&1|grep package`
if [ "$isSetup" = "" ];then
echo '=================================================';
echo -e "\033[31mweb.py installation failed. \033[0m";
exit;
fi
}
Install_setuptools
Install_pip
curl -Ss --connect-timeout 3 -m 60 http://download.bt.cn/install/pip_select.sh|bash
isPsutil=`python -m psutil 2>&1|grep package`
if [ "$isPsutil" != "" ];then
psutil_version=`python -c 'import psutil;print psutil.__version__;' |grep '5.'`
if [ "$psutil_version" = '' ];then
pip uninstall psutil -y
fi
fi
yum install libffi-devel -y
pip install --upgrade setuptools
pip install -U pip
pip install six --upgrade --ignore-installed six
pip install itsdangerous==0.24
pip install paramiko==2.0.2
pip install python-socketio -I
pip install flask-socketio
pip install Werkzeug==0.15.1
pip install Pillow==5.4.1
pip install requests -I --user
pip install cffi==1.12.3 -I
pip install cryptography
pip install gunicorn==19
for p_name in psutil chardet virtualenv Flask Flask-Session Flask-SocketIO flask-sqlalchemy Pillow gunicorn gevent-websocket cryptography pyopenssl;
do
pip install ${p_name}
done
is_gevent=$(pip list|grep gevent)
if [ "$is_gevent" = "" ];then
if [ -f /usr/bin/yum ];then
yum install python-gevent -y
else
apt install python-gevent -y
fi
fi
pip install psutil chardet virtualenv Flask Flask-Session Flask-SocketIO flask-sqlalchemy Pillow gunicorn gevent-websocket paramiko requests cryptography pyopenssl
Install_Pillow
Install_psutil
pip install gunicorn
if [ -f /www/server/mysql/bin/mysql ]; then
pip install mysql-python
Install_mysqldb
fi
Install_chardet
mkdir -p $setup_path/server/panel/logs
mkdir -p $setup_path/server/panel/vhost/apache
mkdir -p $setup_path/server/panel/vhost/nginx
mkdir -p $setup_path/server/panel/vhost/rewrite
if [ -f '/etc/init.d/bt' ];then
/etc/init.d/bt stop
fi
mkdir -p /www/server
mkdir -p /www/wwwroot
mkdir -p /www/wwwlogs
mkdir -p /www/backup/database
mkdir -p /www/backup/site
chmod 755 /www/wwwroot
if [ ! -f "/usr/bin/unzip" ];then
#rm -f /etc/yum.repos.d/epel.repo
yum install unzip -y
fi
wget -O panel.zip $download_Url/install/src/panel6.zip -T 10
wget -O /etc/init.d/bt $download_Url/install/src/bt6.init -T 10
if [ -f "$setup_path/server/panel/data/default.db" ];then
if [ -d "/$setup_path/server/panel/old_data" ];then
rm -rf $setup_path/server/panel/old_data
fi
mkdir -p $setup_path/server/panel/old_data
mv -f $setup_path/server/panel/data/default.db $setup_path/server/panel/old_data/default.db
mv -f $setup_path/server/panel/data/system.db $setup_path/server/panel/old_data/system.db
mv -f $setup_path/server/panel/data/port.pl $setup_path/server/panel/old_data/port.pl
mv -f $setup_path/server/panel/data/admin_path.pl $setup_path/server/panel/old_data/admin_path.pl
fi
unzip -o panel.zip -d $setup_path/server/ > /dev/null
if [ -d "$setup_path/server/panel/old_data" ];then
mv -f $setup_path/server/panel/old_data/default.db $setup_path/server/panel/data/default.db
mv -f $setup_path/server/panel/old_data/system.db $setup_path/server/panel/data/system.db
mv -f $setup_path/server/panel/old_data/port.pl $setup_path/server/panel/data/port.pl
mv -f $setup_path/server/panel/old_data/admin_path.pl $setup_path/server/panel/data/admin_path.pl
if [ -d "/$setup_path/server/panel/old_data" ];then
rm -rf $setup_path/server/panel/old_data
fi
fi
rm -f panel.zip
if [ ! -f $setup_path/server/panel/tools.py ];then
echo -e "\033[31mERROR: Failed to download, please try again!\033[0m";
echo '============================================'
exit;
fi
rm -f $setup_path/server/panel/class/*.pyc
rm -f $setup_path/server/panel/*.pyc
chmod +x /etc/init.d/bt
chkconfig --add bt
chkconfig --level 2345 bt on
chmod -R 600 $setup_path/server/panel
chmod -R +x $setup_path/server/panel/script
ln -sf /etc/init.d/bt /usr/bin/bt
echo "$port" > $setup_path/server/panel/data/port.pl
/etc/init.d/bt start
password=`cat /dev/urandom | head -n 16 | md5sum | head -c 8`
sleep 1
admin_auth='/www/server/panel/data/admin_path.pl'
if [ ! -f $admin_auth ];then
auth_path=`cat /dev/urandom | head -n 16 | md5sum | head -c 8`
echo "/$auth_path" > $admin_auth
fi
auth_path=`cat $admin_auth`
cd $setup_path/server/panel/
python -m py_compile tools.py
python tools.py username
username=`python tools.py panel $password`
cd ~
echo "$password" > $setup_path/server/panel/default.pl
chmod 600 $setup_path/server/panel/default.pl
/etc/init.d/bt restart
sleep 3
isStart=`ps aux |grep 'gunicorn'|grep -v grep|awk '{print $2}'`
if [ "$isStart" == '' ];then
echo -e "\033[31mERROR: The BT-Panel service startup failed.\033[0m";
echo '============================================'
exit;
fi
if [ -f "/etc/init.d/iptables" ];then
sshPort=`cat /etc/ssh/sshd_config | grep 'Port ' | grep -oE [0-9] | tr -d '\n'`
if [ "${sshPort}" != "22" ]; then
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport $sshPort -j ACCEPT
fi
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport $port -j ACCEPT
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 39000:40000 -j ACCEPT
#iptables -I INPUT -p tcp -m state --state NEW -m udp --dport 39000:40000 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
iptables -A INPUT -s localhost -d localhost -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
service iptables save
sed -i "s#IPTABLES_MODULES=\"\"#IPTABLES_MODULES=\"ip_conntrack_netbios_ns ip_conntrack_ftp ip_nat_ftp\"#" /etc/sysconfig/iptables-config
iptables_status=`service iptables status | grep 'not running'`
if [ "${iptables_status}" == '' ];then
service iptables restart
fi
fi
if [ "${isVersion}" == '' ];then
if [ ! -f "/etc/init.d/iptables" ];then
sshPort=`cat /etc/ssh/sshd_config | grep 'Port ' | grep -oE [0-9] | tr -d '\n'`
yum install firewalld -y
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --set-default-zone=public > /dev/null 2>&1
if [ "${sshPort}" != "22" ]; then
firewall-cmd --permanent --zone=public --add-port=$sshPort/tcp > /dev/null 2>&1
fi
firewall-cmd --permanent --zone=public --add-port=20/tcp > /dev/null 2>&1
firewall-cmd --permanent --zone=public --add-port=21/tcp > /dev/null 2>&1
firewall-cmd --permanent --zone=public --add-port=22/tcp > /dev/null 2>&1
firewall-cmd --permanent --zone=public --add-port=80/tcp > /dev/null 2>&1
firewall-cmd --permanent --zone=public --add-port=$port/tcp > /dev/null 2>&1
firewall-cmd --permanent --zone=public --add-port=39000-40000/tcp > /dev/null 2>&1
#firewall-cmd --permanent --zone=public --add-port=39000-40000/udp > /dev/null 2>&1
firewall-cmd --reload
fi
fi
pip install psutil chardet psutil virtualenv cryptography==2.1 > /dev/null 2>&1
if [ ! -d '/etc/letsencrypt' ];then
yum install epel-release -y
if [ "${country}" = "CN" ]; then
isC7=`cat /etc/redhat-release |grep ' 7.'`
if [ "${isC7}" == "" ];then
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
else
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
fi
fi
mkdir -p /var/spool/cron
if [ ! -f '/var/spool/cron/root' ];then
echo '' > /var/spool/cron/root
chmod 600 /var/spool/cron/root
fi
fi
wget -O acme_install.sh $download_Url/install/acme_install.sh
nohup bash acme_install.sh &> /dev/null &
sleep 1
rm -f acme_install.sh
address=""
address=`curl -sS --connect-timeout 10 -m 60 https://www.bt.cn/Api/getIpAddress`
if [ "$address" == '0.0.0.0' ] || [ "$address" == '' ];then
isHosts=`cat /etc/hosts|grep 'www.bt.cn'`
if [ "$isHosts" == '' ];then
echo "" >> /etc/hosts
echo "125.88.182.170 www.bt.cn" >> /etc/hosts
address=`curl -sS --connect-timeout 10 -m 60 https://www.bt.cn/Api/getIpAddress`
if [ "$address" == '' ];then
sed -i "/bt.cn/d" /etc/hosts
fi
fi
fi
ipCheck=`python -c "import re; print(re.match('^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$','$address'))"`
if [ "$ipCheck" == "None" ];then
address="SERVER_IP"
fi
if [ "$address" != "SERVER_IP" ];then
echo "$address" > $setup_path/server/panel/data/iplist.txt
fi
curl -sS --connect-timeout 10 -m 60 https://www.bt.cn/Api/SetupCount?type=Linux\&o=$1 > /dev/null 2>&1
if [ "$1" != "" ];then
echo $1 > /www/server/panel/data/o.pl
cd /www/server/panel
python tools.py o
fi
echo /www > /var/bt_setupPath.conf
/etc/init.d/bt start
echo -e "=================================================================="
echo -e "\033[32mCongratulations! Installed successfully!\033[0m"
echo -e "=================================================================="
echo "Bt-Panel: http://$address:$port$auth_path"
echo -e "username: $username"
echo -e "password: $password"
echo -e "\033[33mWarning:\033[0m"
echo -e "\033[33mIf you cannot access the panel, \033[0m"
echo -e "\033[33mrelease the following port (8888|888|80|443|20|21) in the security group\033[0m"
echo -e "=================================================================="
endTime=`date +%s`
((outTime=($endTime-$startTime)/60))
echo -e "Time consumed:\033[32m $outTime \033[0mMinute!"
rm -f install.sh

wireshark中文社区
微信公众号扫一扫
评论