mirror of
https://github.com/flucont/btcloud.git
synced 2025-10-14 14:20:22 +00:00
Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
0bf1aa2260 | ||
![]() |
9a63bc921b | ||
![]() |
5d305b47de | ||
![]() |
45decd43f6 | ||
![]() |
0db95c4f00 | ||
![]() |
eb5deaeda0 | ||
![]() |
aa704d86ac | ||
![]() |
3eb66a20bc | ||
![]() |
53a878def3 | ||
![]() |
b6350dbed8 |
@@ -5,7 +5,7 @@
|
||||
|
||||
网站后台管理可一键同步宝塔官方的插件列表与增量更新插件包,还有云端使用记录、IP黑白名单、操作日志、定时任务等功能。
|
||||
|
||||
本项目自带的宝塔安装包和更新包是7.9.5最新版,已修改适配此第三方云端,并且全开源,无so等加密文件。
|
||||
本项目自带的宝塔安装包和更新包是7.9.8最新版,已修改适配此第三方云端,并且全开源,无so等加密文件。
|
||||
|
||||
觉得该项目不错的可以给个Star~
|
||||
|
||||
|
@@ -197,6 +197,28 @@ class Api extends BaseController
|
||||
return json($data);
|
||||
}
|
||||
|
||||
//宝塔云监控获取最新版本
|
||||
public function btm_latest_version(){
|
||||
$data = [
|
||||
'version' => config_get('new_version_btm'),
|
||||
'description' => config_get('update_msg_btm'),
|
||||
'create_time' => config_get('update_date_btm')
|
||||
];
|
||||
return json($data);
|
||||
}
|
||||
|
||||
//宝塔云监控更新日志
|
||||
public function btm_update_history(){
|
||||
$data = [
|
||||
[
|
||||
'version' => config_get('new_version_btm'),
|
||||
'description' => config_get('update_msg_btm'),
|
||||
'create_time' => config_get('update_date_btm')
|
||||
]
|
||||
];
|
||||
return json($data);
|
||||
}
|
||||
|
||||
//获取内测版更新日志
|
||||
public function get_beta_logs(){
|
||||
return json(['beta_ps'=>'当前暂无内测版', 'list'=>[]]);
|
||||
@@ -259,11 +281,37 @@ class Api extends BaseController
|
||||
|
||||
//绑定账号
|
||||
public function get_auth_token(){
|
||||
$userinfo = ['uid'=>1, 'username'=>'Administrator', 'address'=>'127.0.0.1', 'serverid'=>'1', 'access_key'=>random(32), 'secret_key'=>random(48), 'ukey'=>md5(time()), 'state'=>1];
|
||||
if(!$_POST['data']) return json(['status'=>false, 'msg'=>'参数不能为空']);
|
||||
$reqData = hex2bin($_POST['data']);
|
||||
parse_str($reqData, $arr);
|
||||
$serverid = $arr['serverid'];
|
||||
$userinfo = ['uid'=>1, 'username'=>'Administrator', 'address'=>'127.0.0.1', 'serverid'=>$serverid, 'access_key'=>random(32), 'secret_key'=>random(48), 'ukey'=>md5(time()), 'state'=>1];
|
||||
$data = bin2hex(urlencode(json_encode($userinfo)));
|
||||
return json(['status'=>true, 'msg'=>'登录成功!', 'data'=>$data]);
|
||||
}
|
||||
|
||||
//绑定账号新
|
||||
public function authorization_login(){
|
||||
if(!$_POST['data']) return json(['status'=>false, 'msg'=>'参数不能为空']);
|
||||
$reqData = hex2bin($_POST['data']);
|
||||
parse_str($reqData, $arr);
|
||||
$serverid = $arr['serverid'];
|
||||
$userinfo = ['uid'=>1, 'username'=>'Administrator', 'ip'=>'127.0.0.1', 'server_id'=>$serverid, 'access_key'=>random(32), 'secret_key'=>random(48)];
|
||||
$data = bin2hex(urlencode(json_encode($userinfo)));
|
||||
return json(['status'=>true, 'msg'=>'登录成功!', 'data'=>$data]);
|
||||
}
|
||||
|
||||
//刷新授权信息
|
||||
public function authorization_info(){
|
||||
if(!$_POST['data']) return json(['status'=>false, 'msg'=>'参数不能为空']);
|
||||
$reqData = hex2bin($_POST['data']);
|
||||
parse_str($reqData, $arr);
|
||||
$id = isset($arr['id'])&&$arr['id']>0?$arr['id']:1;
|
||||
$userinfo = ['id'=>$id, 'product'=>$arr['product'], 'status'=>2, 'clients'=>9999, 'durations'=>0, 'end_time'=>strtotime('+10 year')];
|
||||
$data = bin2hex(urlencode(json_encode($userinfo)));
|
||||
return json(['status'=>true, 'data'=>$data]);
|
||||
}
|
||||
|
||||
//一键部署列表
|
||||
public function get_deplist(){
|
||||
$os = input('post.os');
|
||||
|
@@ -1,7 +1,8 @@
|
||||
#!/bin/bash
|
||||
|
||||
Linux_Version="7.9.6"
|
||||
Linux_Version="7.9.10"
|
||||
Windows_Version="7.8.0"
|
||||
Btm_Version="2.1.7"
|
||||
|
||||
FILES=(
|
||||
public/install/src/panel6.zip
|
||||
@@ -13,6 +14,9 @@ public/win/install/panel_update.py
|
||||
public/win/panel/panel_${Windows_Version}.zip
|
||||
public/win/panel/data/api.py
|
||||
public/win/panel/data/setup.py
|
||||
public/install/src/bt-monitor-${Btm_Version}.zip
|
||||
public/install/install_btmonitor.sh
|
||||
public/install/update_btmonitor.sh
|
||||
)
|
||||
|
||||
DIR=$1
|
||||
|
@@ -47,6 +47,19 @@
|
||||
<label>宝塔Windows面板更新日期:</label>
|
||||
<input type="date" name="update_date_win" value="{:config_get('update_date_win')}" class="form-control"/>
|
||||
<font color="green">用于检测更新接口返回</font>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>宝塔云监控最新版本号:</label>
|
||||
<input type="text" name="new_version_btm" value="{:config_get('new_version_btm')}" class="form-control"/>
|
||||
<font color="green">用于一键更新脚本获取最新版本号,以及检测更新接口。并确保已在/public/install/src/放置对应版本更新包</font>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>宝塔云监控更新日志:</label>
|
||||
<textarea class="form-control" name="update_msg_btm" rows="3" placeholder="支持HTML代码">{:config_get('update_msg_btm')}</textarea>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>宝塔云监控更新日期:</label>
|
||||
<input type="date" name="update_date_btm" value="{:config_get('update_date_btm')}" class="form-control"/>
|
||||
</div>
|
||||
<div class="form-group text-center">
|
||||
<input type="submit" name="submit" value="保存" class="btn btn-success btn-block"/>
|
||||
|
@@ -50,7 +50,7 @@
|
||||
<div class="cont">
|
||||
<div class="top">
|
||||
<div class="title">Windows面板 {:config_get('new_version_win')}</div>
|
||||
<div class="desc">支持Windows Server 2008 R2/2012/2016/2019,64位系统</div>
|
||||
<div class="desc">支持Windows Server 2008 R2/2012/2016/2019/2022,64位系统</div>
|
||||
<div class="mark">
|
||||
<span>操作简单</span>
|
||||
<span>使用方便</span>
|
||||
@@ -62,6 +62,22 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{if config_get('new_version_btm')}<div class="disflex flex_lrcenter mt_30 install-list">
|
||||
<div class="install-box monitor">
|
||||
<div class="img">
|
||||
<img src="/static/images/bt_monitor.png" />
|
||||
</div>
|
||||
<div class="cont">
|
||||
<div class="top">
|
||||
<div class="title">堡塔云监控</div>
|
||||
<div class="desc">多服务监控和异常告警通知</div>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
<a class="btn" href="javascript:;" id="goInstallMonitor">查看安装脚本</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>{/if}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -105,7 +121,7 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d4" id="instal-windows">
|
||||
<div class="d4" id="instal-windows" style="background-color: #edf6ef;">
|
||||
<div class="wrap">
|
||||
<div class="wrap-title">
|
||||
<div class="text">Windows面板{:config_get('new_version_win')}安装方法</div>
|
||||
@@ -121,10 +137,40 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="tips" style="color: orangered; font-weight: 700">
|
||||
<p>注意:仅支持Windows Server 2008 R2/2012/2016/2019,64位系统(中文简体),且未安装其它环境</p>
|
||||
<p>注意:仅支持Windows Server 2008 R2/2012/2016/2019/2022,64位系统(中文简体),且未安装其它环境</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{if config_get('new_version_btm')}
|
||||
<div class="d4" id="instal-monitor">
|
||||
<div class="wrap">
|
||||
<div class="wrap-title">
|
||||
<div class="text" style="margin-right: 12px;">堡塔云监控{:config_get('new_version_btm')}安装脚本</div>
|
||||
</div>
|
||||
<div class="desc">
|
||||
使用 SSH 连接工具,如
|
||||
<a class="link" href="https://www.putty.org/" target="_blank" rel="noreferrer">PUTTY</a>
|
||||
连接到您的 Linux 服务器后,根据系统执行相应命令开始安装:
|
||||
</div>
|
||||
<div class="install-code">
|
||||
<span class="osname">堡塔云监控安装脚本</span>
|
||||
<div class="code-cont">
|
||||
<div class="command" title="点击复制安装脚本">curl -sS {$siteurl}/install/install_btmonitor.sh -o /tmp/install_btmonitor.sh && bash /tmp/install_btmonitor.sh</div>
|
||||
<span class="ico-copy" title="点击复制安装脚本" data-clipboard-text="curl -sS {$siteurl}/install/install_btmonitor.sh -o /tmp/install_btmonitor.sh && bash /tmp/install_btmonitor.sh">复制</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="install-code">
|
||||
<span class="osname">堡塔云监控更新脚本</span>
|
||||
<div class="code-cont">
|
||||
<div class="command" title="点击复制更新脚本">curl {$siteurl}/install/update_btmonitor.sh|bash</div>
|
||||
<span class="ico-copy" title="点击复制更新脚本" data-clipboard-text="curl {$siteurl}/install/update_btmonitor.sh|bash">复制</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tips" style="color: orangered; font-weight: 700">
|
||||
<p>注意:推荐使用Chrome、火狐、edge浏览器,国产浏览器(极速模式)</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>{/if}
|
||||
<div class="animate-bg"></div>
|
||||
</div>
|
||||
|
||||
@@ -140,7 +186,7 @@
|
||||
</div>
|
||||
<div class="fb2 mt_15">
|
||||
<p>
|
||||
Copyright © 2022 宝塔面板安装脚本
|
||||
Copyright © {:date('Y')} 宝塔面板安装脚本
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
@@ -186,6 +232,10 @@
|
||||
scrollTop('#instal-cloud');
|
||||
});
|
||||
|
||||
$('#goInstallMonitor').click(function () {
|
||||
scrollTop('#instal-monitor');
|
||||
});
|
||||
|
||||
function GetRequest() {
|
||||
var url = location.search;
|
||||
//获取url中"?"符后的字串
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -12,12 +12,15 @@ INSERT INTO `cloud_config` (`key`, `value`) VALUES
|
||||
('bt_key', ''),
|
||||
('whitelist', '0'),
|
||||
('download_page', '1'),
|
||||
('new_version', '7.9.6'),
|
||||
('new_version', '7.9.10'),
|
||||
('update_msg', '暂无更新日志'),
|
||||
('update_date', '2022-11-29'),
|
||||
('update_date', '2023-05-09'),
|
||||
('new_version_win', '7.8.0'),
|
||||
('update_msg_win', '暂无更新日志'),
|
||||
('update_date_win', '2022-12-08'),
|
||||
('new_version_btm', '2.1.7'),
|
||||
('update_msg_btm', '暂无更新日志'),
|
||||
('update_date_btm', '2023-05-18'),
|
||||
('updateall_type', '0'),
|
||||
('syskey', 'UqP94LtI8eWAIgCP');
|
||||
|
||||
|
@@ -36,9 +36,9 @@ setup_path="/www"
|
||||
python_bin=$setup_path/server/panel/pyenv/bin/python
|
||||
cpu_cpunt=$(cat /proc/cpuinfo|grep processor|wc -l)
|
||||
|
||||
if [ "$1" ];then
|
||||
IDC_CODE=$1
|
||||
fi
|
||||
# if [ "$1" ];then
|
||||
# IDC_CODE=$1
|
||||
# fi
|
||||
|
||||
GetSysInfo(){
|
||||
if [ -s "/etc/redhat-release" ];then
|
||||
@@ -231,7 +231,7 @@ get_node_url(){
|
||||
|
||||
echo '---------------------------------------------';
|
||||
echo "Selected download node...";
|
||||
nodes=(https://dg2.bt.cn https://dg1.bt.cn https://download.bt.cn);
|
||||
nodes=(https://dg2.bt.cn https://download.bt.cn https://ctcc1-node.bt.cn https://cmcc1-node.bt.cn https://ctcc2-node.bt.cn https://hk1-node.bt.cn https://na1-node.bt.cn https://jp1-node.bt.cn);
|
||||
|
||||
if [ "$1" ];then
|
||||
nodes=($(echo ${nodes[*]}|sed "s#${1}##"))
|
||||
@@ -307,6 +307,15 @@ Install_RPM_Pack(){
|
||||
echo "exclude=httpd nginx php mysql mairadb python-psutil python2-psutil" >> $yumPath
|
||||
fi
|
||||
|
||||
if [ -f "/etc/redhat-release" ] && [ $(cat /etc/os-release|grep PLATFORM_ID|grep -oE "el8") ];then
|
||||
yum config-manager --set-enabled powertools
|
||||
yum config-manager --set-enabled PowerTools
|
||||
fi
|
||||
|
||||
if [ -f "/etc/redhat-release" ] && [ $(cat /etc/os-release|grep PLATFORM_ID|grep -oE "el9") ];then
|
||||
dnf config-manager --set-enabled crb -y
|
||||
fi
|
||||
|
||||
#SYS_TYPE=$(uname -a|grep x86_64)
|
||||
#yumBaseUrl=$(cat /etc/yum.repos.d/CentOS-Base.repo|grep baseurl=http|cut -d '=' -f 2|cut -d '$' -f 1|head -n 1)
|
||||
#[ "${yumBaseUrl}" ] && checkYumRepo=$(curl --connect-timeout 5 --head -s -o /dev/null -w %{http_code} ${yumBaseUrl})
|
||||
@@ -524,7 +533,7 @@ Install_Python_Lib(){
|
||||
return
|
||||
fi
|
||||
|
||||
py_version="3.7.8"
|
||||
py_version="3.7.16"
|
||||
mkdir -p $pyenv_path
|
||||
echo "True" > /www/disk.pl
|
||||
if [ ! -w /www/disk.pl ];then
|
||||
@@ -601,7 +610,7 @@ Install_Python_Lib(){
|
||||
cd ~
|
||||
rm -rf $python_src_path
|
||||
wget -O $pyenv_path/pyenv/bin/activate $download_Url/install/pyenv/activate.panel -T 5
|
||||
wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip-3.7.8.txt -T 5
|
||||
wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip-3.7.16.txt -T 5
|
||||
ln -sf $pyenv_path/pyenv/bin/pip3.7 $pyenv_path/pyenv/bin/pip
|
||||
ln -sf $pyenv_path/pyenv/bin/python3.7 $pyenv_path/pyenv/bin/python
|
||||
ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btpip
|
||||
@@ -611,8 +620,24 @@ Install_Python_Lib(){
|
||||
$pyenv_path/pyenv/bin/pip install -U setuptools==65.5.0
|
||||
$pyenv_path/pyenv/bin/pip install -U wheel==0.34.2
|
||||
$pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt
|
||||
|
||||
wget -O pip-packs.txt $download_Url/install/pyenv/pip-packs.txt
|
||||
PIP_PACKS=$(cat pip-packs.txt)
|
||||
for P_PACK in ${PIP_PACKS};
|
||||
do
|
||||
btpip show ${P_PACK} > /dev/null 2>&1
|
||||
if [ "$?" == "1" ];then
|
||||
btpip install ${P_PACK}
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f pip-packs.txt
|
||||
|
||||
source $pyenv_path/pyenv/bin/activate
|
||||
|
||||
btpip install psutil
|
||||
btpip install gevent
|
||||
|
||||
is_gevent=$($python_bin -m gevent 2>&1|grep -oE package)
|
||||
is_psutil=$($python_bin -m psutil 2>&1|grep -oE package)
|
||||
if [ "${is_gevent}" != "${is_psutil}" ];then
|
||||
@@ -626,6 +651,9 @@ Install_Bt(){
|
||||
else
|
||||
panelPort=$(expr $RANDOM % 55535 + 10000)
|
||||
fi
|
||||
if [ "${PANEL_PORT}" ];then
|
||||
panelPort=$PANEL_PORT
|
||||
fi
|
||||
mkdir -p ${setup_path}/server/panel/logs
|
||||
mkdir -p ${setup_path}/server/panel/vhost/apache
|
||||
mkdir -p ${setup_path}/server/panel/vhost/nginx
|
||||
@@ -719,8 +747,15 @@ Set_Bt_Panel(){
|
||||
fi
|
||||
|
||||
password=$(cat /dev/urandom | head -n 16 | md5sum | head -c 8)
|
||||
if [ "$PANEL_PASSWORD" ];then
|
||||
password=$PANEL_PASSWORD
|
||||
fi
|
||||
sleep 1
|
||||
admin_auth="/www/server/panel/data/admin_path.pl"
|
||||
if [ "${SAFE_PATH}" ];then
|
||||
auth_path=$SAFE_PATH
|
||||
echo "/${auth_path}" > ${admin_auth}
|
||||
fi
|
||||
if [ ! -f ${admin_auth} ];then
|
||||
auth_path=$(cat /dev/urandom | head -n 16 | md5sum | head -c 8)
|
||||
echo "/${auth_path}" > ${admin_auth}
|
||||
@@ -742,6 +777,9 @@ Set_Bt_Panel(){
|
||||
$python_bin -m py_compile tools.py
|
||||
$python_bin tools.py username
|
||||
username=$($python_bin tools.py panel ${password})
|
||||
if [ "$PANEL_USER" ];then
|
||||
username=$PANEL_USER
|
||||
fi
|
||||
cd ~
|
||||
echo "${password}" > ${setup_path}/server/panel/default.pl
|
||||
chmod 600 ${setup_path}/server/panel/default.pl
|
||||
@@ -758,6 +796,12 @@ Set_Bt_Panel(){
|
||||
lsattr python3.7 python
|
||||
Red_Error "ERROR: The BT-Panel service startup failed." "ERROR: 宝塔启动失败"
|
||||
fi
|
||||
|
||||
if [ "$PANEL_USER" ];then
|
||||
cd ${setup_path}/server/panel/
|
||||
btpython -c 'import tools;tools.set_panel_username("'$PANEL_USER'")'
|
||||
cd ~
|
||||
fi
|
||||
}
|
||||
Set_Firewall(){
|
||||
sshPort=$(cat /etc/ssh/sshd_config | grep 'Port '|awk '{print $2}')
|
||||
@@ -903,6 +947,35 @@ echo "
|
||||
| 为了您的正常使用,请确保使用全新或纯净的系统安装宝塔面板,不支持已部署项目/环境的系统安装
|
||||
+----------------------------------------------------------------------
|
||||
"
|
||||
|
||||
while [ ${#} -gt 0 ]; do
|
||||
case $1 in
|
||||
-u|--user)
|
||||
PANEL_USER=$2
|
||||
shift 1
|
||||
;;
|
||||
-p|--password)
|
||||
PANEL_PASSWORD=$2
|
||||
shift 1
|
||||
;;
|
||||
-P|--port)
|
||||
PANEL_PORT=$2
|
||||
shift 1
|
||||
;;
|
||||
--safe-path)
|
||||
SAFE_PATH=$2
|
||||
shift 1
|
||||
;;
|
||||
-y)
|
||||
go="y"
|
||||
;;
|
||||
*)
|
||||
IDC_CODE=$1
|
||||
;;
|
||||
esac
|
||||
shift 1
|
||||
done
|
||||
|
||||
while [ "$go" != 'y' ] && [ "$go" != 'n' ]
|
||||
do
|
||||
read -p "Do you want to install Bt-Panel to the $setup_path directory now?(y/n): " go;
|
||||
@@ -915,7 +988,7 @@ fi
|
||||
ARCH_LINUX=$(cat /etc/os-release |grep "Arch Linux")
|
||||
if [ "${ARCH_LINUX}" ] && [ -f "/usr/bin/pacman" ];then
|
||||
pacman -Sy
|
||||
pacman -S curl wget unzip firewalld openssl pkg-config make gcc cmake libxml2 libxslt libvpx gd libsodium oniguruma sqlite libzip autoconf inetutils sudo --noconfirm
|
||||
pacman -S curl wget unzip firewalld openssl pkg-config make gcc cmake libxml2 libxslt libvpx gd libsodium oniguruma sqlite libzip autoconf inetutils sudo --noconfirm
|
||||
fi
|
||||
|
||||
Install_Main
|
||||
@@ -948,3 +1021,4 @@ endTime=`date +%s`
|
||||
((outTime=($endTime-$startTime)/60))
|
||||
echo -e "Time consumed:\033[32m $outTime \033[0mMinute!"
|
||||
|
||||
|
||||
|
880
public/install/install_btmonitor.sh
Normal file
880
public/install/install_btmonitor.sh
Normal file
@@ -0,0 +1,880 @@
|
||||
#!/bin/bash
|
||||
#########################
|
||||
|
||||
# 广东堡塔安全技术有限公司
|
||||
# author: 赤井秀一
|
||||
# mail: 1021266737@qq.com
|
||||
|
||||
#########################
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
LANG=en_US.UTF-8
|
||||
|
||||
Btapi_Url='http://www.example.com'
|
||||
|
||||
is64bit=$(getconf LONG_BIT)
|
||||
if [ "${is64bit}" != '64' ];then
|
||||
echo -e "\033[31m 抱歉, 堡塔云监控系统不支持32位系统, 请使用64位系统! \033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
S390X_CHECK=$(uname -a|grep s390x)
|
||||
if [ "${S390X_CHECK}" ];then
|
||||
echo -e "\033[31m 抱歉, 堡塔云监控系统不支持s390x架构进行安装,请使用x86_64服务器架构 \033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
is_aarch64=$(uname -a|grep aarch64)
|
||||
if [ "${is_aarch64}" != "" ];then
|
||||
echo -e "\033[31m 抱歉, 堡塔云监控系统暂不支持aarch64架构进行安装,请使用x86_64服务器架构 \033[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
Command_Exists() {
|
||||
command -v "$@" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
|
||||
GetSysInfo(){
|
||||
if [ -s "/etc/redhat-release" ];then
|
||||
SYS_VERSION=$(cat /etc/redhat-release)
|
||||
elif [ -s "/etc/issue" ]; then
|
||||
SYS_VERSION=$(cat /etc/issue)
|
||||
fi
|
||||
SYS_INFO=$(uname -a)
|
||||
SYS_BIT=$(getconf LONG_BIT)
|
||||
MEM_TOTAL=$(free -m|grep Mem|awk '{print $2}')
|
||||
CPU_INFO=$(getconf _NPROCESSORS_ONLN)
|
||||
|
||||
echo -e ${SYS_VERSION}
|
||||
echo -e Bit:${SYS_BIT} Mem:${MEM_TOTAL}M Core:${CPU_INFO}
|
||||
echo -e ${SYS_INFO}
|
||||
echo -e "请截图以上报错信息发帖至论坛www.bt.cn/bbs求助"
|
||||
|
||||
}
|
||||
|
||||
Red_Error(){
|
||||
echo '=================================================';
|
||||
printf '\033[1;31;40m%b\033[0m\n' "$@";
|
||||
GetSysInfo
|
||||
exit 1;
|
||||
}
|
||||
|
||||
|
||||
monitor_path="/www/server/bt-monitor"
|
||||
run_bin="/www/server/bt-monitor/BT-MONITOR"
|
||||
if [ ! -d "/www/server" ];then
|
||||
mkdir -p /www/server
|
||||
fi
|
||||
old_dir="/www/server/old_btmonitor"
|
||||
|
||||
cd ~
|
||||
setup_path="/www"
|
||||
python_bin=$setup_path/server/bt-monitor/pyenv/bin/python
|
||||
cpu_cpunt=$(cat /proc/cpuinfo|grep processor|wc -l)
|
||||
|
||||
get_node_url(){
|
||||
if [ ! -f /bin/curl ];then
|
||||
if [ "${PM}" = "yum" ]; then
|
||||
yum install curl -y
|
||||
elif [ "${PM}" = "apt-get" ]; then
|
||||
apt-get install curl -y
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -f "/www/node.pl" ];then
|
||||
download_Url=$(cat /www/node.pl)
|
||||
echo "Download node: $download_Url";
|
||||
echo '---------------------------------------------';
|
||||
return
|
||||
fi
|
||||
|
||||
echo '---------------------------------------------';
|
||||
echo "Selected download node...";
|
||||
# nodes=(http://dg2.bt.cn http://dg1.bt.cn http://125.90.93.52:5880 http://36.133.1.8:5880 http://123.129.198.197 http://38.34.185.130 http://116.213.43.206:5880 http://128.1.164.196);
|
||||
#nodes=(http://dg2.bt.cn http://dg1.bt.cn http://125.90.93.52:5880 http://36.133.1.8:5880 http://123.129.198.197 http://116.213.43.206:5880 http://128.1.164.196);
|
||||
nodes=(https://dg2.bt.cn https://dg1.bt.cn https://download.bt.cn);
|
||||
tmp_file1=/dev/shm/net_test1.pl
|
||||
tmp_file2=/dev/shm/net_test2.pl
|
||||
[ -f "${tmp_file1}" ] && rm -f ${tmp_file1}
|
||||
[ -f "${tmp_file2}" ] && rm -f ${tmp_file2}
|
||||
touch $tmp_file1
|
||||
touch $tmp_file2
|
||||
for node in ${nodes[@]};
|
||||
do
|
||||
NODE_CHECK=$(curl --connect-timeout 3 -m 3 2>/dev/null -w "%{http_code} %{time_total}" ${node}/net_test|xargs)
|
||||
RES=$(echo ${NODE_CHECK}|awk '{print $1}')
|
||||
NODE_STATUS=$(echo ${NODE_CHECK}|awk '{print $2}')
|
||||
TIME_TOTAL=$(echo ${NODE_CHECK}|awk '{print $3 * 1000 - 500 }'|cut -d '.' -f 1)
|
||||
if [ "${NODE_STATUS}" == "200" ];then
|
||||
if [ $TIME_TOTAL -lt 100 ];then
|
||||
if [ $RES -ge 1500 ];then
|
||||
echo "$RES $node" >> $tmp_file1
|
||||
fi
|
||||
else
|
||||
if [ $RES -ge 1500 ];then
|
||||
echo "$TIME_TOTAL $node" >> $tmp_file2
|
||||
fi
|
||||
fi
|
||||
|
||||
i=$(($i+1))
|
||||
if [ $TIME_TOTAL -lt 100 ];then
|
||||
if [ $RES -ge 3000 ];then
|
||||
break;
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
NODE_URL=$(cat $tmp_file1|sort -r -g -t " " -k 1|head -n 1|awk '{print $2}')
|
||||
if [ -z "$NODE_URL" ];then
|
||||
NODE_URL=$(cat $tmp_file2|sort -g -t " " -k 1|head -n 1|awk '{print $2}')
|
||||
if [ -z "$NODE_URL" ];then
|
||||
NODE_URL='https://download.bt.cn';
|
||||
fi
|
||||
fi
|
||||
rm -f $tmp_file1
|
||||
rm -f $tmp_file2
|
||||
download_Url=$NODE_URL
|
||||
echo "Download node: $download_Url";
|
||||
echo '---------------------------------------------';
|
||||
}
|
||||
|
||||
Get_Versions(){
|
||||
redhat_version_file="/etc/redhat-release"
|
||||
deb_version_file="/etc/issue"
|
||||
if [ -f $redhat_version_file ];then
|
||||
os_type='el'
|
||||
is_aliyunos=$(cat $redhat_version_file|grep Aliyun)
|
||||
if [ "$is_aliyunos" != "" ];then
|
||||
return
|
||||
fi
|
||||
os_version=$(cat $redhat_version_file|grep CentOS|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '^[0-9]')
|
||||
if [ "${os_version}" = "5" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ -z "${os_version}" ];then
|
||||
os_version=$(cat /etc/redhat-release |grep Stream|grep -oE 8)
|
||||
fi
|
||||
else
|
||||
os_type='ubuntu'
|
||||
os_version=$(cat $deb_version_file|grep Ubuntu|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '^[0-9]+')
|
||||
if [ "${os_version}" = "" ];then
|
||||
os_type='debian'
|
||||
os_version=$(cat $deb_version_file|grep Debian|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '[0-9]+')
|
||||
if [ "${os_version}" = "" ];then
|
||||
os_version=$(cat $deb_version_file|grep Debian|grep -Eo '[0-9]+')
|
||||
fi
|
||||
if [ "${os_version}" = "8" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ "${is64bit}" = '32' ];then
|
||||
os_version=""
|
||||
fi
|
||||
else
|
||||
if [ "$os_version" = "14" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ "$os_version" = "12" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ "$os_version" = "19" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ "$os_version" = "21" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ "$os_version" = "20" ];then
|
||||
os_version2004=$(cat /etc/issue|grep 20.04)
|
||||
if [ -z "${os_version2004}" ];then
|
||||
os_version=""
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
Install_Python_Lib(){
|
||||
curl -Ss --connect-timeout 3 -m 60 $download_Url/install/pip_select.sh|bash
|
||||
pyenv_path="/www/server/bt-monitor"
|
||||
if [ -f $pyenv_path/pyenv/bin/python ];then
|
||||
is_ssl=$($python_bin -c "import ssl" 2>&1|grep cannot)
|
||||
$pyenv_path/pyenv/bin/python3.7 -V
|
||||
if [ $? -eq 0 ] && [ -z "${is_ssl}" ];then
|
||||
chmod -R 700 $pyenv_path/pyenv/bin
|
||||
is_package=$($python_bin -m psutil 2>&1|grep package)
|
||||
if [ "$is_package" = "" ];then
|
||||
wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip.txt -t 5 -T 10
|
||||
$pyenv_path/pyenv/bin/pip install -U pip
|
||||
$pyenv_path/pyenv/bin/pip install -U setuptools
|
||||
$pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt
|
||||
$pyenv_path/pyenv/bin/pip install -U flask==2.2.0
|
||||
$pyenv_path/pyenv/bin/pip install flask_sock
|
||||
$pyenv_path/pyenv/bin/pip install cachelib
|
||||
$pyenv_path/pyenv/bin/pip install py7zr
|
||||
$pyenv_path/pyenv/bin/pip install backports.lzma
|
||||
$pyenv_path/pyenv/bin/pip install pandas
|
||||
$pyenv_path/pyenv/bin/pip install msgpack
|
||||
fi
|
||||
source $pyenv_path/pyenv/bin/activate
|
||||
chmod -R 700 $pyenv_path/pyenv/bin
|
||||
return
|
||||
else
|
||||
rm -rf $pyenv_path/pyenv
|
||||
fi
|
||||
fi
|
||||
|
||||
py_version="3.7.9"
|
||||
if [ ! -d "$pyenv_path" ]; then
|
||||
mkdir -p $pyenv_path
|
||||
fi
|
||||
echo "True" > /www/disk.pl
|
||||
if [ ! -w /www/disk.pl ];then
|
||||
Red_Error "ERROR: Install python env fielded." "ERROR: /www目录无法写入,请检查目录/用户/磁盘权限!"
|
||||
fi
|
||||
os_type='el'
|
||||
os_version='7'
|
||||
is_export_openssl=0
|
||||
Get_Versions
|
||||
|
||||
echo "OS: $os_type - $os_version"
|
||||
is_aarch64=$(uname -a|grep aarch64)
|
||||
if [ "$is_aarch64" != "" ];then
|
||||
is64bit="aarch64"
|
||||
fi
|
||||
|
||||
if [ -f "/www/server/bt-monitor/pymake.pl" ];then
|
||||
os_version=""
|
||||
rm -f /www/server/bt-monitor/pymake.pl
|
||||
fi
|
||||
|
||||
if [[ $os_type =~ "debian" ]] || [[ $os_type =~ "ubuntu" ]]; then
|
||||
isbtm="-btm"
|
||||
fi
|
||||
|
||||
if [ "${os_version}" != "" ];then
|
||||
pyenv_file="/www/pyenv.tar.gz"
|
||||
wget -O $pyenv_file $download_Url/install/pyenv/pyenv-${os_type}${os_version}-x${is64bit}${isbtm}.tar.gz -t 5 -T 10
|
||||
|
||||
tmp_size=$(du -b $pyenv_file|awk '{print $1}')
|
||||
if [ $tmp_size -lt 703460 ];then
|
||||
rm -f $pyenv_file
|
||||
echo "ERROR: Download python env fielded."
|
||||
else
|
||||
echo "Install python env..."
|
||||
tar zxvf $pyenv_file -C $pyenv_path/ > /dev/null
|
||||
chmod -R 700 $pyenv_path/pyenv/bin
|
||||
rm -rf $pyenv_path/pyenv/bin/python
|
||||
ln -sf $pyenv_path/pyenv/bin/python3.7 $pyenv_path/pyenv/bin/python
|
||||
$pyenv_path/pyenv/bin/python -m pip install --upgrade --force-reinstall pip
|
||||
$pyenv_path/pyenv/bin/pip install -U flask==2.2.0
|
||||
$pyenv_path/pyenv/bin/pip install flask_sock
|
||||
$pyenv_path/pyenv/bin/pip install cachelib
|
||||
$pyenv_path/pyenv/bin/pip install py7zr
|
||||
$pyenv_path/pyenv/bin/pip install backports.lzma
|
||||
$pyenv_path/pyenv/bin/pip install pandas
|
||||
$pyenv_path/pyenv/bin/pip install msgpack
|
||||
if [ ! -f $pyenv_path/pyenv/bin/python ];then
|
||||
rm -f $pyenv_file
|
||||
Red_Error "ERROR: Install python env fielded." "ERROR: 下载堡塔云监控主控端运行环境失败,请尝试重新安装!"
|
||||
fi
|
||||
$pyenv_path/pyenv/bin/python3.7 -V
|
||||
if [ $? -eq 0 ];then
|
||||
rm -f $pyenv_file
|
||||
ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btmpip
|
||||
ln -sf $pyenv_path/pyenv/bin/python3.7 /usr/bin/btmpython
|
||||
source $pyenv_path/pyenv/bin/activate
|
||||
return
|
||||
else
|
||||
rm -f $pyenv_file
|
||||
rm -rf $pyenv_path/pyenv
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
cd /www
|
||||
python_src='/www/python_src.tar.xz'
|
||||
python_src_path="/www/Python-${py_version}"
|
||||
wget -O $python_src $download_Url/src/Python-${py_version}.tar.xz -t 5 -T 10
|
||||
tmp_size=$(du -b $python_src|awk '{print $1}')
|
||||
if [ $tmp_size -lt 10703460 ];then
|
||||
rm -f $python_src
|
||||
Red_Error "ERROR: Download python source code fielded." "ERROR: 下载堡塔云监控主控端运行环境失败,请尝试重新安装!"
|
||||
fi
|
||||
tar xvf $python_src
|
||||
rm -f $python_src
|
||||
cd $python_src_path
|
||||
./configure --prefix=$pyenv_path/pyenv
|
||||
make -j$cpu_cpunt
|
||||
make install
|
||||
if [ ! -f $pyenv_path/pyenv/bin/python3.7 ];then
|
||||
rm -rf $python_src_path
|
||||
Red_Error "ERROR: Make python env fielded." "ERROR: 编译堡塔云监控主控端运行环境失败!"
|
||||
fi
|
||||
cd ~
|
||||
rm -rf $python_src_path
|
||||
wget -O $pyenv_path/pyenv/bin/activate $download_Url/install/pyenv/activate.panel -t 5 -T 10
|
||||
wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip-3.7.8.txt -t 5 -T 10
|
||||
ln -sf $pyenv_path/pyenv/bin/pip3.7 $pyenv_path/pyenv/bin/pip
|
||||
ln -sf $pyenv_path/pyenv/bin/python3.7 $pyenv_path/pyenv/bin/python
|
||||
ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btmpip
|
||||
ln -sf $pyenv_path/pyenv/bin/python3.7 /usr/bin/btmpython
|
||||
chmod -R 700 $pyenv_path/pyenv/bin
|
||||
$pyenv_path/pyenv/bin/pip install -U pip
|
||||
$pyenv_path/pyenv/bin/pip install -U setuptools
|
||||
$pyenv_path/pyenv/bin/pip install -U wheel==0.34.2
|
||||
$pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt
|
||||
$pyenv_path/pyenv/bin/pip install -U flask==2.2.0
|
||||
$pyenv_path/pyenv/bin/pip install flask_sock
|
||||
$pyenv_path/pyenv/bin/pip install cachelib
|
||||
$pyenv_path/pyenv/bin/pip install py7zr
|
||||
$pyenv_path/pyenv/bin/pip install backports.lzma
|
||||
$pyenv_path/pyenv/bin/pip install pandas
|
||||
$pyenv_path/pyenv/bin/pip install msgpack
|
||||
source $pyenv_path/pyenv/bin/activate
|
||||
|
||||
is_gevent=$($python_bin -m gevent 2>&1|grep -oE package)
|
||||
is_psutil=$($python_bin -m psutil 2>&1|grep -oE package)
|
||||
if [ "${is_gevent}" != "${is_psutil}" ];then
|
||||
Red_Error "ERROR: psutil/gevent install failed!"
|
||||
fi
|
||||
}
|
||||
|
||||
Install_Monitor(){
|
||||
ulimit -n 1000001
|
||||
tee -a /etc/security/limits.conf << EOF
|
||||
* hard nofile 1000001
|
||||
* soft nofile 1000001
|
||||
root hard nofile 1000001
|
||||
root soft nofile 1000001
|
||||
EOF
|
||||
sysctl -p
|
||||
panelPort="806"
|
||||
|
||||
if [ ! -d "/etc/init.d" ];then
|
||||
mkdir -p /etc/init.d
|
||||
fi
|
||||
|
||||
if [ -f "/etc/init.d/btm" ]; then
|
||||
/etc/init.d/btm stop
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
if [ -f "/www/server/bt-monitor/sqlite-server.sh" ]; then
|
||||
chmod +x /www/server/bt-monitor/sqlite-server.sh
|
||||
/www/server/bt-monitor/sqlite-server.sh stop
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
version="2.1.7"
|
||||
file_name="bt-monitor"
|
||||
agent_src="bt-monitor.zip"
|
||||
|
||||
cd ~
|
||||
version=`curl -sf ${Btapi_Url}/bt_monitor/latest_version |awk -F '\"version\"' '{print $2}'|awk -F ':' '{print $2}'|awk -F '"' '{print $2}'`
|
||||
if [ -z $version ]; then
|
||||
version="2.0.6"
|
||||
fi
|
||||
if [ "$re_install" == "1" ]; then
|
||||
new_dir="/www/server/new_btmonitor"
|
||||
if [ ! -d "$new_dir" ];then
|
||||
mkdir -p $new_dir
|
||||
fi
|
||||
wget -O $agent_src ${Btapi_Url}/install/src/$file_name-$version.zip -t 5 -T 10
|
||||
unzip -o $agent_src -d $new_dir/ > /dev/null
|
||||
if [ ! -f $new_dir/BT-MONITOR ];then
|
||||
ls -lh $agent_src
|
||||
Red_Error "ERROR: Failed to download, please try install again!" "ERROR: 下载堡塔云监控主控端失败,请尝试重新安装!"
|
||||
fi
|
||||
|
||||
rm -rf $new_dir/config
|
||||
rm -rf $new_dir/data
|
||||
rm -rf $new_dir/ssl
|
||||
\cp -r $new_dir/* $monitor_path/
|
||||
rm -rf $new_dir
|
||||
else
|
||||
wget -O $agent_src ${Btapi_Url}/install/src/$file_name-$version.zip -t 5 -T 10
|
||||
if [ ! -d "$monitor_path" ]; then
|
||||
mkdir -p $monitor_path
|
||||
fi
|
||||
unzip -o $agent_src -d $monitor_path/ > /dev/null
|
||||
if [ ! -f $run_bin ];then
|
||||
ls -lh $agent_src
|
||||
Red_Error "ERROR: Failed to download, please try install again!" "ERROR: 下载堡塔云监控主控端失败,请尝试重新安装!"
|
||||
fi
|
||||
fi
|
||||
rm -rf $agent_src
|
||||
chmod +x $monitor_path/BT-MONITOR
|
||||
chmod +x $monitor_path/tools.py
|
||||
wget -O /etc/init.d/btm ${download_Url}/init/btmonitor.init -t 5 -T 10
|
||||
# \cp -r $monitor_path/init.sh /etc/init.d/btm
|
||||
|
||||
chmod +x /etc/init.d/btm
|
||||
ln -sf /etc/init.d/btm /usr/bin/btm
|
||||
|
||||
if [ ! -f $monitor_path/data/user.json ]; then
|
||||
echo "{\"uid\":1,\"username\":\"Administrator\",\"ip\":\"127.0.0.1\",\"server_id\":\"1\",\"access_key\":\"test\",\"secret_key\":\"123456\"}" > $monitor_path/data/user.json
|
||||
fi
|
||||
if [ -f $monitor_path/core/include/c_loader/PluginLoader.so ]; then
|
||||
rm -f $monitor_path/core/include/c_loader/PluginLoader.so
|
||||
fi
|
||||
}
|
||||
|
||||
Start_Monitor(){
|
||||
/etc/init.d/btm start
|
||||
if [ "$?" != "0" ]; then
|
||||
#echo "堡塔云监控主控端启动失败!"
|
||||
tail $monitor_path/logs/error.log
|
||||
Red_Error "堡塔云监控主控端启动失败!"
|
||||
fi
|
||||
|
||||
echo "正在初始化云监控主控端..."
|
||||
if [ "$re_install" == "1" ] || [ "$re_install" == "2" ]; then
|
||||
user_pass=`$setup_path/server/bt-monitor/tools.py reset_pwd`
|
||||
password=`echo $user_pass |awk '{print $3}'`
|
||||
else
|
||||
user_pass=`$monitor_path/tools.py create_admin`
|
||||
password=`echo $user_pass |awk -F " " '{print $5}'`
|
||||
for ((i=1; i<=5; i++));do
|
||||
if [ -z "$password" ]; then
|
||||
sleep 7
|
||||
user_pass=`$monitor_path/tools.py create_admin`
|
||||
password=`echo $user_pass |awk -F " " '{print $5}'`
|
||||
else
|
||||
i=5
|
||||
fi
|
||||
done
|
||||
fi
|
||||
if [[ "$password" == "" ]];then
|
||||
Red_Error "ERROR: 初始化云监控主控端失败,请尝试重新安装!"
|
||||
fi
|
||||
|
||||
c_path=$(cat /www/server/bt-monitor/config/config.json |awk -F '\"admin_path\"' '{print $2}'|awk -F ":" '{print $2}'|awk -F '"' '{print $2}')
|
||||
adminpath=$(echo $c_path|awk -F ',' '{print $1}')
|
||||
|
||||
if [ -d "/usr/bin/btmonitoragent" ];then
|
||||
rm -rf /usr/bin/btmonitoragent
|
||||
fi
|
||||
|
||||
date_f=`date '+%Y%m%d_%H%M%S'`
|
||||
md5_pl=`echo $date_f | md5sum | head -c 32`
|
||||
token_pl=`cat $monitor_path/config/token.pl 2>&1`
|
||||
if [ "$token_pl" == ' ' ] || [ ! -f $monitor_path/config/token.pl ]; then
|
||||
echo "$md5_pl" > $monitor_path/config/token.pl
|
||||
fi
|
||||
|
||||
echo "正在给本机安装云监控被控端,请等待..."
|
||||
sleep 15
|
||||
curl -sSO ${download_Url}/install/btmonitoragent.sh && bash btmonitoragent.sh https://127.0.0.1:806 $md5_pl
|
||||
target_dir="/usr/local/btmonitoragent"
|
||||
if [ ! -f "$target_dir/BT-MonitorAgent" ];then
|
||||
tail -n 10 ${monitor_path}/logs/error.log
|
||||
echo ""
|
||||
ps aux|grep -v grep|grep ${monitor_path}
|
||||
netstat -tulnp|grep ${panelPort}
|
||||
/etc/init.d/btm restart
|
||||
if [ "$?" -eq 0 ]; then
|
||||
echo -e "\033[31m安装云监控被控端失败,正在尝试重新安装!\033[0m"
|
||||
sleep 15
|
||||
curl -sSO ${download_Url}/install/btmonitoragent.sh && bash btmonitoragent.sh https://127.0.0.1:806 $md5_pl
|
||||
if [ ! -f "$target_dir/BT-MonitorAgent" ];then
|
||||
Red_Error "ERROR: 安装云监控被控端失败,请尝试重新安装!"
|
||||
fi
|
||||
else
|
||||
Red_Error "ERROR: 安装云监控被控端失败,请尝试重新安装!"
|
||||
fi
|
||||
fi
|
||||
/etc/init.d/btm restart > /dev/null 2>&1
|
||||
|
||||
}
|
||||
|
||||
Set_Firewall(){
|
||||
sshPort=$(cat /etc/ssh/sshd_config | grep 'Port '|awk '{print $2}')
|
||||
if [ "${PM}" = "apt-get" ]; then
|
||||
apt-get install -y ufw
|
||||
if [ -f "/usr/sbin/ufw" ];then
|
||||
ufw allow 22/tcp
|
||||
ufw allow ${panelPort}/tcp
|
||||
ufw allow ${sshPort}/tcp
|
||||
ufw_status=`ufw status`
|
||||
echo y|ufw enable
|
||||
ufw default deny
|
||||
ufw reload
|
||||
fi
|
||||
else
|
||||
if [ -f "/etc/init.d/iptables" ];then
|
||||
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 ${panelPort} -j ACCEPT
|
||||
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport ${sshPort} -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
|
||||
else
|
||||
AliyunCheck=$(cat /etc/redhat-release|grep "Aliyun Linux")
|
||||
[ "${AliyunCheck}" ] && return
|
||||
yum install firewalld -y
|
||||
[ "${Centos8Check}" ] && yum reinstall python3-six -y
|
||||
systemctl enable firewalld
|
||||
systemctl start firewalld
|
||||
firewall-cmd --set-default-zone=public > /dev/null 2>&1
|
||||
firewall-cmd --permanent --zone=public --add-port=22/tcp > /dev/null 2>&1
|
||||
firewall-cmd --permanent --zone=public --add-port=${panelPort}/tcp > /dev/null 2>&1
|
||||
firewall-cmd --permanent --zone=public --add-port=${sshPort}/tcp > /dev/null 2>&1
|
||||
firewall-cmd --reload
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
Service_Add(){
|
||||
if [ $Command_Exists systemctl ]; then
|
||||
wget -O /usr/lib/systemd/system/btm.service ${download_Url}/init/systemd/btmonitor.service -t 5 -T 10
|
||||
systemctl daemon-reload
|
||||
systemctl enable btm
|
||||
else
|
||||
if [ "${PM}" == "yum" ] || [ "${PM}" == "dnf" ]; then
|
||||
chkconfig --add btm
|
||||
chkconfig --level 2345 btm on
|
||||
elif [ "${PM}" == "apt-get" ]; then
|
||||
update-rc.d btm defaults
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
Service_Del(){
|
||||
if [ $Command_Exists systemctl ]; then
|
||||
rm -rf /usr/lib/systemd/system/btm.service
|
||||
systemctl disable btm
|
||||
else
|
||||
if [ "${PM}" == "yum" ] || [ "${PM}" == "dnf" ]; then
|
||||
chkconfig --del btm
|
||||
chkconfig --level 2345 btm off
|
||||
elif [ "${PM}" == "apt-get" ]; then
|
||||
update-rc.d btm remove
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
Get_Ip_Address(){
|
||||
getIpAddress=""
|
||||
getIpAddress=$(curl -sS --connect-timeout 10 -m 60 https://www.bt.cn/Api/getIpAddress)
|
||||
if [ -z "${getIpAddress}" ] || [ "${getIpAddress}" = "0.0.0.0" ]; then
|
||||
isHosts=$(cat /etc/hosts|grep 'www.bt.cn')
|
||||
if [ -z "${isHosts}" ];then
|
||||
echo "" >> /etc/hosts
|
||||
echo "116.213.43.206 www.bt.cn" >> /etc/hosts
|
||||
getIpAddress=$(curl -sS --connect-timeout 10 -m 60 https://www.bt.cn/Api/getIpAddress)
|
||||
if [ -z "${getIpAddress}" ];then
|
||||
sed -i "/bt.cn/d" /etc/hosts
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
ipv4Check=$($python_bin -c "import re; print(re.match('^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$','${getIpAddress}'))")
|
||||
if [ "${ipv4Check}" == "None" ];then
|
||||
ipv6Address=$(echo ${getIpAddress}|tr -d "[]")
|
||||
ipv6Check=$($python_bin -c "import re; print(re.match('^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$','${ipv6Address}'))")
|
||||
if [ "${ipv6Check}" == "None" ]; then
|
||||
getIpAddress="SERVER_IP"
|
||||
else
|
||||
echo "True" > ${setup_path}/server/bt-monitor/data/ipv6.pl
|
||||
sleep 1
|
||||
/etc/init.d/btm restart
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${getIpAddress}" != "SERVER_IP" ];then
|
||||
echo "${getIpAddress}" > ${setup_path}/server/bt-monitor/data/iplist.txt
|
||||
fi
|
||||
LOCAL_IP=$(ip addr | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -E -v "^127\.|^255\.|^0\." | head -n 1)
|
||||
}
|
||||
|
||||
System_Check(){
|
||||
if [ -f "$monitor_path/BT-MONITOR" ] || [ -f "$monitor_path/tools.py" ] || [ -f "/etc/init.d/btm" ];then
|
||||
Install_Check
|
||||
elif [ -d "$old_dir" ];then
|
||||
Rev_Install_Check
|
||||
fi
|
||||
}
|
||||
|
||||
Install_Check(){
|
||||
echo -e "----------------------------------------------------"
|
||||
echo -e "检测到已存在堡塔云监控系统,请按照选项选择安装方式!"
|
||||
echo -e "1) 覆盖安装:保存原有监控配置及数据并安装堡塔云监控"
|
||||
echo -e "\033[33m2) 全新安装:清空原有监控配置及数据并安装堡塔云监控\033[0m"
|
||||
echo -e "----------------------------------------------------"
|
||||
read -p "请输入对应选项[1|2]进行安装或输入任意内容退出安装: " yes;
|
||||
if [ "$yes" == "1" ]; then
|
||||
re_install="1"
|
||||
echo "即将卸载并重装本机的堡塔云监控被控端..."
|
||||
Uninstall_agent
|
||||
elif [ "$yes" == "2" ]; then
|
||||
Backup_Monitor
|
||||
echo "即将卸载并重装本机的堡塔云监控被控端..."
|
||||
Uninstall_agent
|
||||
else
|
||||
echo -e "------------"
|
||||
echo "取消安装"
|
||||
exit;
|
||||
fi
|
||||
}
|
||||
|
||||
Rev_Install_Check(){
|
||||
echo -e "----------------------------------------------------"
|
||||
echo -e "\033[33m检测到上一次卸载云监控时保留的旧数据,请按照选项选择安装方式!\033[0m"
|
||||
echo -e "1) 还原以前的备份并安装堡塔云监控系统!"
|
||||
echo -e "2) 不使用原有备份,全新安装堡塔云监控系统!"
|
||||
echo -e "----------------------------------------------------"
|
||||
read -p "请输入对应选项[1|2]进行安装或输入任意内容退出安装: " yes;
|
||||
if [ "$yes" == "1" ]; then
|
||||
re_install="2"
|
||||
echo "开始安装堡塔云监控系统并还原数据..."
|
||||
elif [ "$yes" == "2" ]; then
|
||||
echo "开始全新安装堡塔云监控系统..."
|
||||
else
|
||||
echo -e "------------"
|
||||
echo "取消安装"
|
||||
exit;
|
||||
fi
|
||||
}
|
||||
|
||||
Backup_Monitor(){
|
||||
if [ -f "/etc/init.d/btm" ]; then
|
||||
/etc/init.d/btm stop
|
||||
sleep 1
|
||||
fi
|
||||
if [ ! -d "${old_dir}" ];then
|
||||
mkdir -p ${old_dir}
|
||||
else
|
||||
mv ${old_dir} ${old_dir}_$(date +%Y_%m_%d_%H_%M_%S)
|
||||
mkdir -p ${old_dir}
|
||||
fi
|
||||
|
||||
mv ${monitor_path}/data ${old_dir}/data
|
||||
mv ${monitor_path}/config ${old_dir}/config
|
||||
mv ${monitor_path}/ssl ${old_dir}/ssl
|
||||
}
|
||||
|
||||
Reinstall_Monitor(){
|
||||
rm -rf $monitor_path/data
|
||||
rm -rf $monitor_path/config
|
||||
rm -rf $monitor_path/ssl
|
||||
mv $old_dir/data $monitor_path/data
|
||||
mv $old_dir/config $monitor_path/config
|
||||
mv $old_dir/ssl $monitor_path/ssl
|
||||
rm -rf $old_dir
|
||||
}
|
||||
|
||||
Get_Pack_Manager(){
|
||||
if [ -f "/usr/bin/yum" ] && [ -d "/etc/yum.repos.d" ]; then
|
||||
PM="yum"
|
||||
elif [ -f "/usr/bin/apt-get" ] && [ -f "/usr/bin/dpkg" ]; then
|
||||
PM="apt-get"
|
||||
fi
|
||||
}
|
||||
|
||||
Install_RPM_Pack(){
|
||||
yumPacks="wget curl unzip gcc gcc-c++ make libcurl-devel openssl-devel xz-devel python-backports-lzma xz crontabs zlib zlib-devel sqlite-devel libffi-devel bzip2-devel lsof net-tools"
|
||||
yum install -y ${yumPacks}
|
||||
|
||||
for yumPack in ${yumPacks}
|
||||
do
|
||||
rpmPack=$(rpm -q ${yumPack})
|
||||
packCheck=$(echo ${rpmPack}|grep not)
|
||||
if [ "${packCheck}" ]; then
|
||||
yum install ${yumPack} -y
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
Install_Deb_Pack(){
|
||||
debPacks="wget curl unzip gcc g++ make cron libcurl4-openssl-dev libssl-dev liblzma-dev xz-utils libffi-dev libbz2-dev libsqlite3-dev libreadline-dev libgdbm-dev python3-bsddb3 tk-dev ncurses-dev uuid-dev zlib1g zlib1g-dev lsof net-tools";
|
||||
apt-get update -y
|
||||
apt-get install -y $debPacks --force-yes
|
||||
|
||||
for debPack in ${debPacks}
|
||||
do
|
||||
packCheck=$(dpkg -l ${debPack})
|
||||
if [ "$?" -ne "0" ] ;then
|
||||
apt-get install -y $debPack
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
Check_Sys_Write(){
|
||||
echo "正在检测系统关键目录是否可写"
|
||||
if [ ! -d "/etc/init.d" ];then
|
||||
mkdir -p /etc/init.d
|
||||
fi
|
||||
if [ -f /usr/bin/which ];then
|
||||
Get_Pack_Manager
|
||||
if [ "$PM" == "yum" ]; then
|
||||
read_dir="/usr/lib/systemd/system/ /etc/init.d/ /var/spool/cron/"
|
||||
else
|
||||
read_dir="/usr/lib/systemd/system/ /etc/init.d/ /var/spool/cron/crontabs/"
|
||||
fi
|
||||
|
||||
for dir in ${read_dir[@]}
|
||||
do
|
||||
if [[ -d "$dir" ]]; then
|
||||
touch $dir/btm_install_test_111.pl
|
||||
state=$(echo $?)
|
||||
if [[ "$state" != "0" ]];then
|
||||
echo -e "\033[31m错误:检测到系统关键目录不可写! $read_dir \033[0m"
|
||||
echo "1、如果安装了[宝塔系统加固],请先临时关闭"
|
||||
echo "2、如果安装了云锁,请临时关闭[系统加固]功能"
|
||||
echo "3、如果安装了安全狗,请临时关闭[系统防护]功能"
|
||||
echo "4、如果使用了其它安全软件,请先卸载 "
|
||||
echo -e "5、如果使用了禁止写入命令,请执行命令取消禁止写入:\n chattr -iaR $read_dir "
|
||||
echo ""
|
||||
echo -e "\033[31m解决以上问题后,请尝试重新安装! \033[0m"
|
||||
echo -e "如果无法解决请截图以上报错信息发帖至论坛www.bt.cn/bbs求助"
|
||||
exit 1
|
||||
else
|
||||
rm -f $dir/btm_install_test_111.pl
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
}
|
||||
|
||||
Check_Sys_Packs(){
|
||||
echo "正在检查系统中是否存在必备的依赖包"
|
||||
Packs="wget curl unzip gcc make"
|
||||
for pack in ${Packs[@]}
|
||||
do
|
||||
check_pack=$(which $pack)
|
||||
#echo $check_pack
|
||||
if [[ "$check_pack" == "" ]]; then
|
||||
echo -e "\033[31mERROR: $pack 命令不存在,尝试以下解决方法:\033[0m"
|
||||
if [ "$PM" == "yum" ]; then
|
||||
echo 1、使用命令重新安装依赖包:yum reinstall -y ${Packs}
|
||||
else
|
||||
echo 1、使用命令重新安装依赖包:apt-get reinstall -y ${Packs}
|
||||
fi
|
||||
echo -e "2、检查系统源是否可用?尝试更换可用的源参考教程:\n https://www.bt.cn/bbs/thread-58005-1-1.html "
|
||||
echo ""
|
||||
echo -e "\033[31m解决以上问题后,请尝试重新安装! \033[0m"
|
||||
echo -e "如果无法解决请截图以上报错信息发帖至论坛www.bt.cn/bbs求助"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
Install_Main(){
|
||||
startTime=`date +%s`
|
||||
Check_Sys_Write
|
||||
System_Check
|
||||
Get_Pack_Manager
|
||||
get_node_url
|
||||
|
||||
if [ "$PM" == "yum" ]; then
|
||||
Install_RPM_Pack
|
||||
else
|
||||
Install_Deb_Pack
|
||||
fi
|
||||
Check_Sys_Packs
|
||||
Install_Python_Lib
|
||||
Install_Monitor
|
||||
Set_Firewall
|
||||
Get_Ip_Address
|
||||
Service_Add
|
||||
if [ "$re_install" == "2" ]; then
|
||||
Reinstall_Monitor
|
||||
fi
|
||||
Start_Monitor
|
||||
}
|
||||
|
||||
Uninstall_Monitor(){
|
||||
pkill BT-MONITOR
|
||||
/etc/init.d/btm stop
|
||||
|
||||
if [ -f "/www/server/bt-monitor/sqlite-server.sh" ]; then
|
||||
chmod +x /www/server/bt-monitor/sqlite-server.sh
|
||||
/www/server/bt-monitor/sqlite-server.sh stop
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
Service_Del
|
||||
|
||||
rm -rf $monitor_path
|
||||
rm -rf /usr/bin/btm
|
||||
rm -rf /etc/init.d/btm
|
||||
|
||||
echo -e "堡塔云监控主控端卸载成功!"
|
||||
}
|
||||
|
||||
Uninstall_agent(){
|
||||
get_node_url
|
||||
if [ -f "/tmp/btmonitoragent.sh" ];then
|
||||
rm -rf /tmp/btmonitoragent.sh
|
||||
fi
|
||||
curl -o /tmp/btmonitoragent.sh -sSO ${download_Url}/install/btmonitoragent.sh && bash /tmp/btmonitoragent.sh uninstall
|
||||
}
|
||||
|
||||
action="${1}"
|
||||
if [ "$action" == "uninstall" ];then
|
||||
echo -e "----------------------------------------------------"
|
||||
echo -e "\033[33m检测到您正在卸载堡塔云监控系统,请按照选项选择卸载方式!\033[0m"
|
||||
echo -e "1) 备份数据后卸载:保存原有监控配置及数据并卸载堡塔云监控系统"
|
||||
echo -e "2) 完全卸载:清空原有监控配置及数据并卸载堡塔云监控系统"
|
||||
echo -e "----------------------------------------------------"
|
||||
read -p "请输入对应选项[1|2]进行卸载或输入任意内容退出卸载: " yes;
|
||||
if [ "$yes" == "1" ]; then
|
||||
Backup_Monitor
|
||||
echo -e "----------------------------------------------------"
|
||||
echo -e "\033[33m已备份原有监控数据至: ${old_dir}\033[0m"
|
||||
elif [ "$yes" == "2" ]; then
|
||||
echo "正在清空堡塔云监控系统数据..."
|
||||
else
|
||||
echo -e "------------"
|
||||
echo "取消卸载"
|
||||
exit;
|
||||
fi
|
||||
Uninstall_agent
|
||||
Uninstall_Monitor
|
||||
exit 0
|
||||
else
|
||||
echo "
|
||||
+----------------------------------------------------------------------
|
||||
| Bt-Monitor FOR CentOS/Ubuntu/Debian
|
||||
+----------------------------------------------------------------------
|
||||
| Copyright © 2015-2099 BT-SOFT(https://www.bt.cn) All rights reserved.
|
||||
+----------------------------------------------------------------------
|
||||
| The Monitor URL will be https://SERVER_IP:806 when installed.
|
||||
+----------------------------------------------------------------------
|
||||
"
|
||||
while [ "$go" != 'y' ] && [ "$go" != 'n' ]
|
||||
do
|
||||
read -p "Do you want to install Bt-Monitor to the $setup_path directory now?(y/n): " go;
|
||||
done
|
||||
|
||||
if [ "$go" == 'n' ];then
|
||||
exit;
|
||||
fi
|
||||
Install_Main
|
||||
#curl -o /dev/null -fsSL --connect-time 10 "https://api.bt.cn/bt_monitor/setup_count?cloud_type=1&token=$md5_pl&src_code=$1"
|
||||
#curl -o /dev/null -fsSL --connect-time 10 "https://api.bt.cn/bt_monitor/setup_count?cloud_type=1&token=$md5_pl&src_code=$1&status=1"
|
||||
|
||||
fi
|
||||
echo -e "=================================================================="
|
||||
echo -e "\033[32m堡塔云监控主控端安装完成! Installed successfully!\033[0m"
|
||||
echo -e "=================================================================="
|
||||
echo "外网访问地址: https://${getIpAddress}:${panelPort}${adminpath}"
|
||||
echo "内网访问地址: https://${LOCAL_IP}:${panelPort}${adminpath}"
|
||||
echo -e "username: admin"
|
||||
echo -e "password: $password"
|
||||
echo -e "\033[33mIf you cannot access the Monitor,\033[0m"
|
||||
echo -e "\033[33mrelease the following Monitor port [${panelPort}] in the security group\033[0m"
|
||||
echo -e "\033[33m若无法访问堡塔云监控主控端,请检查防火墙/安全组是否有放行[${panelPort}]端口\033[0m"
|
||||
echo -e "=================================================================="
|
||||
|
||||
endTime=`date +%s`
|
||||
((outTime=($endTime-$startTime)/60))
|
||||
echo -e "Time consumed:\033[32m $outTime \033[0mMinute!"
|
@@ -10,7 +10,7 @@ export LANG=en_US.UTF-8
|
||||
export LANGUAGE=en_US:en
|
||||
|
||||
get_node_url(){
|
||||
nodes=(https://dg2.bt.cn https://dg1.bt.cn https://download.bt.cn https://hk1-node.bt.cn https://na1-node.bt.cn https://jp1-node.bt.cn);
|
||||
nodes=(https://dg2.bt.cn https://download.bt.cn https://ctcc1-node.bt.cn https://cmcc1-node.bt.cn https://ctcc2-node.bt.cn https://hk1-node.bt.cn https://na1-node.bt.cn https://jp1-node.bt.cn);
|
||||
|
||||
if [ "$1" ];then
|
||||
nodes=($(echo ${nodes[*]}|sed "s#${1}##"))
|
||||
@@ -29,7 +29,7 @@ get_node_url(){
|
||||
NODE_STATUS=$(echo ${NODE_CHECK}|awk '{print $2}')
|
||||
TIME_TOTAL=$(echo ${NODE_CHECK}|awk '{print $3 * 1000 - 500 }'|cut -d '.' -f 1)
|
||||
if [ "${NODE_STATUS}" == "200" ];then
|
||||
if [ $TIME_TOTAL -lt 100 ];then
|
||||
if [ $TIME_TOTAL -lt 300 ];then
|
||||
if [ $RES -ge 1500 ];then
|
||||
echo "$RES $node" >> $tmp_file1
|
||||
fi
|
||||
@@ -40,7 +40,7 @@ get_node_url(){
|
||||
fi
|
||||
|
||||
i=$(($i+1))
|
||||
if [ $TIME_TOTAL -lt 100 ];then
|
||||
if [ $TIME_TOTAL -lt 200 ];then
|
||||
if [ $RES -ge 3000 ];then
|
||||
break;
|
||||
fi
|
||||
|
BIN
public/install/src/bt-monitor-2.1.7.zip
Normal file
BIN
public/install/src/bt-monitor-2.1.7.zip
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -12,16 +12,16 @@ if [ ! -d /www/server/panel/BTPanel ];then
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
if [ ! -f "/www/server/panel/pyenv/bin/python3" ];then
|
||||
echo "============================================="
|
||||
echo "错误, 当前面板过旧/py-2.7/无pyenv环境,无法升级至最新版面板"
|
||||
echo "请截图发帖至论坛www.bt.cn/bbs求助"
|
||||
exit 0;
|
||||
fi
|
||||
|
||||
public_file=/www/server/panel/install/public.sh
|
||||
publicFileMd5=$(md5sum ${public_file} 2>/dev/null|awk '{print $1}')
|
||||
md5check="f6ccaaec227577b87a22bf162004667b"
|
||||
if [ "${publicFileMd5}" != "${md5check}" ]; then
|
||||
if [ ! -f $public_file ];then
|
||||
wget -O Tpublic.sh $Btapi_Url/install/public.sh -T 20;
|
||||
publicFileMd5=$(md5sum Tpublic.sh 2>/dev/null|awk '{print $1}')
|
||||
if [ "${publicFileMd5}" == "${md5check}" ]; then
|
||||
\cp -rpa Tpublic.sh $public_file
|
||||
fi
|
||||
rm -f Tpublic.sh
|
||||
fi
|
||||
. $public_file
|
||||
|
||||
@@ -42,12 +42,16 @@ download_Url=$NODE_URL
|
||||
setup_path=/www
|
||||
version=$(curl -Ss --connect-timeout 5 -m 2 $Btapi_Url/api/panel/get_version)
|
||||
if [ "$version" = '' ];then
|
||||
version='7.9.6'
|
||||
version='7.9.9'
|
||||
fi
|
||||
armCheck=$(uname -m|grep arm)
|
||||
if [ "${armCheck}" ];then
|
||||
version='7.7.0'
|
||||
fi
|
||||
|
||||
if [ "$1" ];then
|
||||
version=$1
|
||||
fi
|
||||
wget -T 5 -O /tmp/panel.zip $Btapi_Url/install/update/LinuxPanel-${version}.zip
|
||||
dsize=$(du -b /tmp/panel.zip|awk '{print $1}')
|
||||
if [ $dsize -lt 10240 ];then
|
||||
@@ -69,10 +73,11 @@ rm -f /www/server/panel/class/*.pyc
|
||||
#pip install itsdangerous==0.24
|
||||
|
||||
pip_list=$($mypip list)
|
||||
request_v=$(echo "$pip_list"|grep requests)
|
||||
if [ "$request_v" = "" ];then
|
||||
$mypip install requests
|
||||
request_v=$(btpip list 2>/dev/null|grep "requests "|awk '{print $2}'|cut -d '.' -f 2)
|
||||
if [ "$request_v" = "" ] || [ "${request_v}" -gt "28" ];then
|
||||
$mypip install requests==2.27.1
|
||||
fi
|
||||
|
||||
openssl_v=$(echo "$pip_list"|grep pyOpenSSL)
|
||||
if [ "$openssl_v" = "" ];then
|
||||
$mypip install pyOpenSSL
|
||||
|
446
public/install/update_btmonitor.sh
Normal file
446
public/install/update_btmonitor.sh
Normal file
@@ -0,0 +1,446 @@
|
||||
#!/bin/bash
|
||||
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
|
||||
export PATH
|
||||
LANG=en_US.UTF-8
|
||||
|
||||
Btapi_Url='http://www.example.com'
|
||||
|
||||
monitor_path="/www/server/bt-monitor"
|
||||
run_bin="/www/server/bt-monitor/BT-MONITOR"
|
||||
is64bit=$(getconf LONG_BIT)
|
||||
|
||||
if [ ! -d $monitor_path ]; then
|
||||
echo "没有安装云监控,请执行下面的命令安装堡塔云监控!"
|
||||
echo "curl -sSO ${Btapi_Url}/install/install_btmonitor.sh && bash install_btmonitor.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cd ~
|
||||
setup_path="/www"
|
||||
|
||||
if [ -f "/etc/init.d/btm" ]; then
|
||||
/etc/init.d/btm stop
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
if [ -f "/www/server/bt-monitor/sqlite-server.sh" ]; then
|
||||
chmod +x /www/server/bt-monitor/sqlite-server.sh
|
||||
/www/server/bt-monitor/sqlite-server.sh stop
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
get_node_url(){
|
||||
if [ ! -f /bin/curl ];then
|
||||
if [ "${PM}" = "yum" ]; then
|
||||
yum install curl -y
|
||||
elif [ "${PM}" = "apt-get" ]; then
|
||||
apt-get install curl -y
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -f "/www/node.pl" ];then
|
||||
download_Url=$(cat /www/node.pl)
|
||||
echo "Download node: $download_Url";
|
||||
echo '---------------------------------------------';
|
||||
return
|
||||
fi
|
||||
|
||||
echo '---------------------------------------------';
|
||||
echo "Selected download node...";
|
||||
# nodes=(http://dg2.bt.cn http://dg1.bt.cn http://125.90.93.52:5880 http://36.133.1.8:5880 http://123.129.198.197 http://38.34.185.130 http://116.213.43.206:5880 http://128.1.164.196);
|
||||
#nodes=(http://dg2.bt.cn http://dg1.bt.cn http://125.90.93.52:5880 http://36.133.1.8:5880 http://123.129.198.197 http://116.213.43.206:5880);
|
||||
nodes=(https://dg2.bt.cn https://dg1.bt.cn https://download.bt.cn);
|
||||
tmp_file1=/dev/shm/net_test1.pl
|
||||
tmp_file2=/dev/shm/net_test2.pl
|
||||
[ -f "${tmp_file1}" ] && rm -f ${tmp_file1}
|
||||
[ -f "${tmp_file2}" ] && rm -f ${tmp_file2}
|
||||
touch $tmp_file1
|
||||
touch $tmp_file2
|
||||
for node in ${nodes[@]};
|
||||
do
|
||||
NODE_CHECK=$(curl --connect-timeout 3 -m 3 2>/dev/null -w "%{http_code} %{time_total}" ${node}/net_test|xargs)
|
||||
RES=$(echo ${NODE_CHECK}|awk '{print $1}')
|
||||
NODE_STATUS=$(echo ${NODE_CHECK}|awk '{print $2}')
|
||||
TIME_TOTAL=$(echo ${NODE_CHECK}|awk '{print $3 * 1000 - 500 }'|cut -d '.' -f 1)
|
||||
if [ "${NODE_STATUS}" == "200" ];then
|
||||
if [ $TIME_TOTAL -lt 100 ];then
|
||||
if [ $RES -ge 1500 ];then
|
||||
echo "$RES $node" >> $tmp_file1
|
||||
fi
|
||||
else
|
||||
if [ $RES -ge 1500 ];then
|
||||
echo "$TIME_TOTAL $node" >> $tmp_file2
|
||||
fi
|
||||
fi
|
||||
|
||||
i=$(($i+1))
|
||||
if [ $TIME_TOTAL -lt 100 ];then
|
||||
if [ $RES -ge 3000 ];then
|
||||
break;
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
NODE_URL=$(cat $tmp_file1|sort -r -g -t " " -k 1|head -n 1|awk '{print $2}')
|
||||
if [ -z "$NODE_URL" ];then
|
||||
NODE_URL=$(cat $tmp_file2|sort -g -t " " -k 1|head -n 1|awk '{print $2}')
|
||||
if [ -z "$NODE_URL" ];then
|
||||
NODE_URL='https://download.bt.cn';
|
||||
fi
|
||||
fi
|
||||
rm -f $tmp_file1
|
||||
rm -f $tmp_file2
|
||||
download_Url=$NODE_URL
|
||||
echo "Download node: $download_Url";
|
||||
echo '---------------------------------------------';
|
||||
}
|
||||
|
||||
Get_Versions(){
|
||||
redhat_version_file="/etc/redhat-release"
|
||||
deb_version_file="/etc/issue"
|
||||
if [ -f $redhat_version_file ];then
|
||||
os_type='el'
|
||||
is_aliyunos=$(cat $redhat_version_file|grep Aliyun)
|
||||
if [ "$is_aliyunos" != "" ];then
|
||||
return
|
||||
fi
|
||||
os_version=$(cat $redhat_version_file|grep CentOS|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '^[0-9]')
|
||||
if [ "${os_version}" = "5" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ -z "${os_version}" ];then
|
||||
os_version=$(cat /etc/redhat-release |grep Stream|grep -oE 8)
|
||||
fi
|
||||
else
|
||||
os_type='ubuntu'
|
||||
os_version=$(cat $deb_version_file|grep Ubuntu|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '^[0-9]+')
|
||||
if [ "${os_version}" = "" ];then
|
||||
os_type='debian'
|
||||
os_version=$(cat $deb_version_file|grep Debian|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '[0-9]+')
|
||||
if [ "${os_version}" = "" ];then
|
||||
os_version=$(cat $deb_version_file|grep Debian|grep -Eo '[0-9]+')
|
||||
fi
|
||||
if [ "${os_version}" = "8" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ "${is64bit}" = '32' ];then
|
||||
os_version=""
|
||||
fi
|
||||
else
|
||||
if [ "$os_version" = "14" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ "$os_version" = "12" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ "$os_version" = "19" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ "$os_version" = "21" ];then
|
||||
os_version=""
|
||||
fi
|
||||
if [ "$os_version" = "20" ];then
|
||||
os_version2004=$(cat /etc/issue|grep 20.04)
|
||||
if [ -z "${os_version2004}" ];then
|
||||
os_version=""
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
Install_Python_Lib(){
|
||||
curl -Ss --connect-timeout 3 -m 60 $download_Url/install/pip_select.sh|bash
|
||||
pyenv_path="/www/server/bt-monitor"
|
||||
if [ -f $pyenv_path/pyenv/bin/python ];then
|
||||
is_ssl=$($python_bin -c "import ssl" 2>&1|grep cannot)
|
||||
$pyenv_path/pyenv/bin/python3.7 -V
|
||||
if [ $? -eq 0 ] && [ -z "${is_ssl}" ];then
|
||||
chmod -R 700 $pyenv_path/pyenv/bin
|
||||
is_package=$($python_bin -m psutil 2>&1|grep package)
|
||||
if [ "$is_package" = "" ];then
|
||||
wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip.txt -t 5 -T 10
|
||||
$pyenv_path/pyenv/bin/pip install -U pip
|
||||
$pyenv_path/pyenv/bin/pip install -U setuptools
|
||||
$pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt
|
||||
$pyenv_path/pyenv/bin/pip install -U flask==2.2.0
|
||||
$pyenv_path/pyenv/bin/pip install flask_sock
|
||||
$pyenv_path/pyenv/bin/pip install cachelib
|
||||
$pyenv_path/pyenv/bin/pip install py7zr
|
||||
$pyenv_path/pyenv/bin/pip install backports.lzma
|
||||
fi
|
||||
source $pyenv_path/pyenv/bin/activate
|
||||
chmod -R 700 $pyenv_path/pyenv/bin
|
||||
return
|
||||
else
|
||||
rm -rf $pyenv_path/pyenv
|
||||
fi
|
||||
fi
|
||||
|
||||
py_version="3.7.9"
|
||||
if [ ! -d "$pyenv_path" ]; then
|
||||
mkdir -p $pyenv_path
|
||||
fi
|
||||
echo "True" > /www/disk.pl
|
||||
if [ ! -w /www/disk.pl ];then
|
||||
Red_Error "ERROR: Install python env fielded." "ERROR: /www目录无法写入,请检查目录/用户/磁盘权限!"
|
||||
fi
|
||||
os_type='el'
|
||||
os_version='7'
|
||||
is_export_openssl=0
|
||||
Get_Versions
|
||||
|
||||
echo "OS: $os_type - $os_version"
|
||||
is_aarch64=$(uname -a|grep aarch64)
|
||||
if [ "$is_aarch64" != "" ];then
|
||||
is64bit="aarch64"
|
||||
fi
|
||||
|
||||
if [ -f "/www/server/bt-monitor/pymake.pl" ];then
|
||||
os_version=""
|
||||
rm -f /www/server/bt-monitor/pymake.pl
|
||||
fi
|
||||
|
||||
if [[ $os_type =~ "debian" ]] || [[ $os_type =~ "ubuntu" ]]; then
|
||||
isbtm="-btm"
|
||||
fi
|
||||
|
||||
if [ "${os_version}" != "" ];then
|
||||
pyenv_file="/www/pyenv.tar.gz"
|
||||
wget -O $pyenv_file $download_Url/install/pyenv/pyenv-${os_type}${os_version}-x${is64bit}${isbtm}.tar.gz -t 5 -T 10
|
||||
tmp_size=$(du -b $pyenv_file|awk '{print $1}')
|
||||
if [ $tmp_size -lt 703460 ];then
|
||||
rm -f $pyenv_file
|
||||
echo "ERROR: Download python env fielded."
|
||||
else
|
||||
echo "Install python env..."
|
||||
tar zxvf $pyenv_file -C $pyenv_path/ > /dev/null
|
||||
chmod -R 700 $pyenv_path/pyenv/bin
|
||||
rm -rf $pyenv_path/pyenv/bin/python
|
||||
ln -sf $pyenv_path/pyenv/bin/python3.7 $pyenv_path/pyenv/bin/python
|
||||
$pyenv_path/pyenv/bin/python -m pip install --upgrade --force-reinstall pip
|
||||
$pyenv_path/pyenv/bin/pip install -U flask==2.2.0
|
||||
$pyenv_path/pyenv/bin/pip install flask_sock
|
||||
$pyenv_path/pyenv/bin/pip install cachelib
|
||||
$pyenv_path/pyenv/bin/pip install py7zr
|
||||
$pyenv_path/pyenv/bin/pip install backports.lzma
|
||||
if [ ! -f $pyenv_path/pyenv/bin/python ];then
|
||||
rm -f $pyenv_file
|
||||
Red_Error "ERROR: Install python env fielded." "ERROR: 下载堡塔云监控运行环境失败,请尝试重新安装!"
|
||||
fi
|
||||
$pyenv_path/pyenv/bin/python3.7 -V
|
||||
if [ $? -eq 0 ];then
|
||||
rm -f $pyenv_file
|
||||
ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btmpip
|
||||
ln -sf $pyenv_path/pyenv/bin/python3.7 /usr/bin/btmpython
|
||||
source $pyenv_path/pyenv/bin/activate
|
||||
return
|
||||
else
|
||||
rm -f $pyenv_file
|
||||
rm -rf $pyenv_path/pyenv
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
cd /www
|
||||
python_src='/www/python_src.tar.xz'
|
||||
python_src_path="/www/Python-${py_version}"
|
||||
wget -O $python_src $download_Url/src/Python-${py_version}.tar.xz -t 5 -T 10
|
||||
tmp_size=$(du -b $python_src|awk '{print $1}')
|
||||
if [ $tmp_size -lt 10703460 ];then
|
||||
rm -f $python_src
|
||||
Red_Error "ERROR: Download python source code fielded." "ERROR: 下载堡塔云监控运行环境失败,请尝试重新安装!"
|
||||
fi
|
||||
tar xvf $python_src
|
||||
rm -f $python_src
|
||||
cd $python_src_path
|
||||
./configure --prefix=$pyenv_path/pyenv
|
||||
make -j$cpu_cpunt
|
||||
make install
|
||||
if [ ! -f $pyenv_path/pyenv/bin/python3.7 ];then
|
||||
rm -rf $python_src_path
|
||||
Red_Error "ERROR: Make python env fielded." "ERROR: 编译堡塔云监控运行环境失败!"
|
||||
fi
|
||||
cd ~
|
||||
rm -rf $python_src_path
|
||||
wget -O $pyenv_path/pyenv/bin/activate $download_Url/install/pyenv/activate.panel -t 5 -T 10
|
||||
wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip-3.7.8.txt -t 5 -T 10
|
||||
ln -sf $pyenv_path/pyenv/bin/pip3.7 $pyenv_path/pyenv/bin/pip
|
||||
ln -sf $pyenv_path/pyenv/bin/python3.7 $pyenv_path/pyenv/bin/python
|
||||
ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btmpip
|
||||
ln -sf $pyenv_path/pyenv/bin/python3.7 /usr/bin/btmpython
|
||||
chmod -R 700 $pyenv_path/pyenv/bin
|
||||
$pyenv_path/pyenv/bin/pip install -U pip
|
||||
$pyenv_path/pyenv/bin/pip install -U setuptools
|
||||
$pyenv_path/pyenv/bin/pip install -U wheel==0.34.2
|
||||
$pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt
|
||||
$pyenv_path/pyenv/bin/pip install -U flask==2.2.0
|
||||
$pyenv_path/pyenv/bin/pip install flask_sock
|
||||
$pyenv_path/pyenv/bin/pip install cachelib
|
||||
$pyenv_path/pyenv/bin/pip install py7zr
|
||||
$pyenv_path/pyenv/bin/pip install backports.lzma
|
||||
source $pyenv_path/pyenv/bin/activate
|
||||
|
||||
is_gevent=$($python_bin -m gevent 2>&1|grep -oE package)
|
||||
is_psutil=$($python_bin -m psutil 2>&1|grep -oE package)
|
||||
if [ "${is_gevent}" != "${is_psutil}" ];then
|
||||
Red_Error "ERROR: psutil/gevent install failed!"
|
||||
fi
|
||||
}
|
||||
|
||||
Install_Monitor(){
|
||||
version="1.0.2"
|
||||
file_name="bt-monitor"
|
||||
agent_src="bt-monitor.zip"
|
||||
|
||||
cd ~
|
||||
version=`curl -sf ${Btapi_Url}/bt_monitor/latest_version |awk -F '\"version\"' '{print $2}'|awk -F ':' '{print $2}'|awk -F '"' '{print $2}'`
|
||||
if [ -z $version ]; then
|
||||
version="1.0.2"
|
||||
fi
|
||||
new_dir="/www/server/new_btmonitor"
|
||||
if [ ! -d "$new_dir" ];then
|
||||
mkdir -p $new_dir
|
||||
fi
|
||||
if [ ! -z "$action" ]; then
|
||||
# 例如:sh update_btmonitor.sh /root/demo.zip
|
||||
if [[ "$action" =~ "zip" ]]; then
|
||||
version="指定版本"
|
||||
unzip -o $action -d $new_dir/
|
||||
else
|
||||
wget -O $agent_src ${Btapi_Url}/install/src/$file_name-$version.zip -t 5 -T 10
|
||||
unzip -o $agent_src -d $new_dir/ > /dev/null
|
||||
fi
|
||||
else
|
||||
wget -O $agent_src ${Btapi_Url}/install/src/$file_name-$version.zip -t 5 -T 10
|
||||
unzip -o $agent_src -d $new_dir/ > /dev/null
|
||||
fi
|
||||
if [ ! -f $new_dir/BT-MONITOR ];then
|
||||
ls -lh $agent_src
|
||||
Red_Error "ERROR: Failed to download, please try install again!" "ERROR: 下载堡塔云监控失败,请尝试重新安装!"
|
||||
fi
|
||||
|
||||
rm -rf $new_dir/config
|
||||
rm -rf $new_dir/data
|
||||
rm -rf $new_dir/ssl
|
||||
\cp -r $new_dir/* $monitor_path/
|
||||
rm -rf $agent_src
|
||||
rm -rf $new_dir
|
||||
chmod +x $monitor_path/BT-MONITOR
|
||||
chmod +x $monitor_path/tools.py
|
||||
wget -O /etc/init.d/btm ${download_Url}/init/btmonitor.init -t 5 -T 10
|
||||
chmod +x /etc/init.d/btm
|
||||
ln -sf /etc/init.d/btm /usr/bin/btm
|
||||
|
||||
if [ ! -f $monitor_path/data/user.json ]; then
|
||||
echo "{\"uid\":1,\"username\":\"Administrator\",\"ip\":\"127.0.0.1\",\"server_id\":\"1\",\"access_key\":\"test\",\"secret_key\":\"123456\"}" > $monitor_path/data/user.json
|
||||
fi
|
||||
if [ -f $monitor_path/core/include/c_loader/PluginLoader.so ]; then
|
||||
rm -f $monitor_path/core/include/c_loader/PluginLoader.so
|
||||
fi
|
||||
}
|
||||
|
||||
Service_Add(){
|
||||
if [ $Command_Exists systemctl ]; then
|
||||
wget -O /usr/lib/systemd/system/btm.service ${download_Url}/init/systemd/btmonitor.service -t 5 -T 10
|
||||
systemctl daemon-reload
|
||||
systemctl enable btm
|
||||
else
|
||||
if [ "${PM}" == "yum" ] || [ "${PM}" == "dnf" ]; then
|
||||
chkconfig --add btm
|
||||
chkconfig --level 2345 btm on
|
||||
elif [ "${PM}" == "apt-get" ]; then
|
||||
update-rc.d btm defaults
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
Start_Monitor(){
|
||||
/etc/init.d/btm start
|
||||
if [ "$?" != "0" ]; then
|
||||
echo "堡塔云监控启动失败!"
|
||||
tail $monitor_path/logs/error.log
|
||||
exit 1
|
||||
fi
|
||||
echo "已成功升级到[$version]${Ver}";
|
||||
}
|
||||
|
||||
GetSysInfo(){
|
||||
if [ -s "/etc/redhat-release" ];then
|
||||
SYS_VERSION=$(cat /etc/redhat-release)
|
||||
elif [ -s "/etc/issue" ]; then
|
||||
SYS_VERSION=$(cat /etc/issue)
|
||||
fi
|
||||
SYS_INFO=$(uname -a)
|
||||
SYS_BIT=$(getconf LONG_BIT)
|
||||
MEM_TOTAL=$(free -m|grep Mem|awk '{print $2}')
|
||||
CPU_INFO=$(getconf _NPROCESSORS_ONLN)
|
||||
|
||||
echo -e ${SYS_VERSION}
|
||||
echo -e Bit:${SYS_BIT} Mem:${MEM_TOTAL}M Core:${CPU_INFO}
|
||||
echo -e ${SYS_INFO}
|
||||
echo -e "请截图以上报错信息发帖至论坛www.bt.cn/bbs求助"
|
||||
}
|
||||
|
||||
Red_Error(){
|
||||
echo '=================================================';
|
||||
printf '\033[1;31;40m%b\033[0m\n' "$@";
|
||||
GetSysInfo
|
||||
exit 1;
|
||||
}
|
||||
|
||||
Install_RPM_Pack(){
|
||||
yumPacks="wget curl unzip gcc gcc-c++ make libcurl-devel openssl-devel xz-devel python-backports-lzma xz"
|
||||
yum install -y ${yumPacks}
|
||||
|
||||
for yumPack in ${yumPacks}
|
||||
do
|
||||
rpmPack=$(rpm -q ${yumPack})
|
||||
packCheck=$(echo ${rpmPack}|grep not)
|
||||
if [ "${packCheck}" ]; then
|
||||
yum install ${yumPack} -y
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
Install_Deb_Pack(){
|
||||
apt-get update -y
|
||||
debPacks="wget curl unzip gcc g++ make libcurl4-openssl-dev libssl-dev liblzma-dev xz-utils libffi-dev libbz2-dev libsqlite3-dev libreadline-dev libgdbm-dev python3-bsddb3 tk-dev ncurses-dev uuid-dev";
|
||||
apt-get install -y $debPacks --force-yes
|
||||
|
||||
for debPack in ${debPacks}
|
||||
do
|
||||
packCheck=$(dpkg -l ${debPack})
|
||||
if [ "$?" -ne "0" ] ;then
|
||||
apt-get install -y $debPack
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
Get_Pack_Manager(){
|
||||
if [ -f "/usr/bin/yum" ] && [ -d "/etc/yum.repos.d" ]; then
|
||||
PM="yum"
|
||||
elif [ -f "/usr/bin/apt-get" ] && [ -f "/usr/bin/dpkg" ]; then
|
||||
PM="apt-get"
|
||||
fi
|
||||
}
|
||||
|
||||
Update_Monitor(){
|
||||
Get_Pack_Manager
|
||||
get_node_url
|
||||
if [ $PM = "yum" ]; then
|
||||
Install_RPM_Pack
|
||||
else
|
||||
Install_Deb_Pack
|
||||
fi
|
||||
if [ "$action" == "update_py" ]; then
|
||||
Install_Python_Lib
|
||||
fi
|
||||
Install_Monitor
|
||||
Service_Add
|
||||
Start_Monitor
|
||||
}
|
||||
|
||||
action=${1}
|
||||
Update_Monitor
|
@@ -70,7 +70,7 @@ select_node(){
|
||||
get_version(){
|
||||
version=$(curl -Ss --connect-timeout 5 -m 2 $Btapi_Url/api/panel/get_version)
|
||||
if [ "$version" = '' ];then
|
||||
version='7.9.6'
|
||||
version='7.9.9'
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -333,9 +333,9 @@ update_panel(){
|
||||
|
||||
chattr -i /etc/init.d/bt
|
||||
chmod +x /etc/init.d/bt
|
||||
if [ $up_plugin = 1 ];then
|
||||
$pyenv_bin/python /www/server/panel/tools.py update_to6
|
||||
fi
|
||||
# if [ $up_plugin = 1 ];then
|
||||
# $pyenv_bin/python /www/server/panel/tools.py update_to6
|
||||
# fi
|
||||
}
|
||||
|
||||
update_start(){
|
||||
|
@@ -331,10 +331,6 @@ canvas {
|
||||
color: #20a53a;
|
||||
}
|
||||
|
||||
.d4 {
|
||||
background-color: #edf6ef;
|
||||
}
|
||||
|
||||
.d4 .desc {
|
||||
margin-bottom: 16px;
|
||||
line-height: 30px;
|
||||
@@ -375,7 +371,7 @@ canvas {
|
||||
animation: flap-right 0.75s linear infinite;
|
||||
}
|
||||
|
||||
/* <20><>װ<EFBFBD>ű<EFBFBD> */
|
||||
/* <20><>װ<EFBFBD>ű<EFBFBD> */
|
||||
.layui-layer .install-code {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
BIN
public/static/images/bt_monitor.png
Normal file
BIN
public/static/images/bt_monitor.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 194 KiB |
@@ -105,5 +105,8 @@ class panel_update:
|
||||
|
||||
os.system("echo f|xcopy /s /c /e /y /r {} {}".format(public.to_path(tmpPath),public.to_path(panelPath)))
|
||||
|
||||
return public.returnMsg(True,"升级面板成功,重启面板后生效.");
|
||||
if os.path.exists('C:/update.py'): os.remove('C:/update.py')
|
||||
os.system('bt restart')
|
||||
|
||||
return public.returnMsg(True,"升级面板成功.");
|
||||
|
||||
|
Binary file not shown.
@@ -15,6 +15,14 @@ Route::post('/panel/get_unbinding', 'api/return_success');
|
||||
Route::post('/bt_cert', 'api/return_error');
|
||||
Route::post('/Auth/GetAuthToken', 'api/get_auth_token');
|
||||
Route::post('/Auth/GetBindCode', 'api/return_error');
|
||||
Route::any('/bt_monitor/update_history', 'api/btm_update_history');
|
||||
Route::any('/bt_monitor/latest_version', 'api/btm_latest_version');
|
||||
|
||||
Route::group('authorization', function () {
|
||||
Route::post('/login', 'api/authorization_login');
|
||||
Route::post('/info', 'api/authorization_info');
|
||||
Route::miss('api/return_error');
|
||||
});
|
||||
|
||||
Route::group('api', function () {
|
||||
Route::any('/panel/get_soft_list', 'api/get_plugin_list');
|
||||
|
53
wiki/btmonitor.md
Normal file
53
wiki/btmonitor.md
Normal file
@@ -0,0 +1,53 @@
|
||||
# 宝塔云监控安装包修改记录
|
||||
|
||||
查询最新版本号:https://api.bt.cn/bt_monitor/latest_version
|
||||
|
||||
安装包下载链接:http://download.bt.cn/install/src/bt-monitor-版本号.zip
|
||||
|
||||
- 删除core/include/c_loader/PluginLoader.so,sqlite_server/PluginLoader.so,将btmonitor/PluginLoader.py复制到这个文件夹
|
||||
|
||||
- 批量解密源码:执行 php think decrypt all <源码根目录>
|
||||
|
||||
极少数文件解密失败是正常现象可无视
|
||||
|
||||
- 全局搜索替换 https://api.bt.cn => http://www.example.com
|
||||
|
||||
- 全局搜索替换 https://www.bt.cn/api/ => http://www.example.com/api/(需排除/panel/get_ip_info)
|
||||
|
||||
- core/include/public.py 在
|
||||
|
||||
```python
|
||||
def GetConfigValue(key):
|
||||
```
|
||||
|
||||
这一行下面加上
|
||||
|
||||
```python
|
||||
if key == 'home': return 'http://www.example.com'
|
||||
```
|
||||
|
||||
def write_request_log(reques = None): 这一行下面加上 return
|
||||
|
||||
- core/include/basic_monitor.py
|
||||
|
||||
在 def report_module_logs(self, force=False): 这一行下面加上 return
|
||||
|
||||
- modules/configModule/main.py
|
||||
|
||||
https://download.bt.cn => http://www.example.com
|
||||
|
||||
- update/update_btmonitor.sh 修改Install_Monitor方法内的download_Url变量
|
||||
|
||||
- init.sh https://download.bt.cn => http://www.example.com
|
||||
|
||||
- BT-MONITOR 在
|
||||
|
||||
```python
|
||||
def CreateSSL():
|
||||
```
|
||||
|
||||
这一行下面加上
|
||||
|
||||
```python
|
||||
return CreateSSL_offline()
|
||||
```
|
64
wiki/files/btmonitor/PluginLoader.py
Normal file
64
wiki/files/btmonitor/PluginLoader.py
Normal file
@@ -0,0 +1,64 @@
|
||||
#coding: utf-8
|
||||
import os,sys,json
|
||||
import core.include.public as public
|
||||
|
||||
#执行模块方法(模块名,方法名,参数)
|
||||
def module_run(module_name, def_name, def_args):
|
||||
if not module_name or not def_name: return public.returnMsg(False,'模块名称和模块方法名称不能为空!')
|
||||
if not path_check(module_name) or not path_check(def_name): return public.returnMsg(False,'模块名或方法名不能包含特殊符号!')
|
||||
|
||||
panel_path = public.get_panel_path()
|
||||
filename = "{}/modules/{}Module/{}Module.py".format(panel_path,module_name,module_name)
|
||||
if not os.path.exists(filename):
|
||||
filename = "{}/modules/{}Module/main.py".format(panel_path,module_name)
|
||||
if not os.path.exists(filename):
|
||||
filename = "{}/plugin/{}/main.py".format(panel_path,module_name)
|
||||
if not os.path.exists(filename):
|
||||
filename = "{}/plugin/{}Module/{}Plugin.py".format(panel_path,module_name,module_name)
|
||||
if not os.path.exists(filename):
|
||||
return public.returnMsg(False,'指定模块或插件不存在')
|
||||
|
||||
_obj = public.get_script_object(filename)
|
||||
if not _obj: return public.returnMsg(False,'模块加载失败: %s' % module_name)
|
||||
if hasattr(_obj, "items") and hasattr(_obj, "setdefault"):
|
||||
return _obj
|
||||
|
||||
class_name = "main"
|
||||
if not hasattr(_obj, class_name):
|
||||
return public.returnMsg(False,'找不到入口类: %s' % class_name)
|
||||
|
||||
class_obj = getattr(_obj,class_name, None)
|
||||
if not class_obj:
|
||||
return public.returnMsg(False,'获取入口类失败' % module_name)
|
||||
|
||||
try:
|
||||
class_func = class_obj()
|
||||
except:
|
||||
return public.returnMsg(False,'模块入口实例化失败' % module_name)
|
||||
|
||||
if not hasattr(class_func, def_name):
|
||||
return public.returnMsg(False,'在[%s]模块中找不到[%s]方法' % (class_name,def_name))
|
||||
|
||||
def_func = getattr(class_func, def_name, None)
|
||||
if not def_func:
|
||||
return public.returnMsg(False,'获取方法失败')
|
||||
|
||||
if 'module_get_object' in def_args:
|
||||
return def_func
|
||||
|
||||
result = def_func(def_args)
|
||||
return result
|
||||
|
||||
#获取指定模块对象(文件全路径)
|
||||
def get_module(filename):
|
||||
if not filename: return public.returnMsg(False,'模块路径不能为空!')
|
||||
if "./" in filename: return public.returnMsg(False,'模块路径不能为相对路径')
|
||||
return public.get_script_object(filename)
|
||||
|
||||
#检查路径是否合法
|
||||
def path_check(path):
|
||||
list = ["./","..",",",";",":","?","'","\"","<",">","|","\\","\n","\r","\t","\b","\a","\f","\v","*","%","&","$","#","@","!","~","`","^","(",")","+","=","{","}","[","]"]
|
||||
for i in path:
|
||||
if i in list:
|
||||
return False
|
||||
return True
|
@@ -3,7 +3,7 @@ import public,os,sys,json
|
||||
|
||||
#获取插件列表(0/1)
|
||||
def get_plugin_list(force = 0):
|
||||
api_root_url = 'https://api.bt.cn'
|
||||
api_root_url = 'http://www.example.com'
|
||||
api_url = api_root_url+ '/panel/get_plugin_list'
|
||||
cache_file = 'data/plugin_list.json'
|
||||
|
||||
@@ -120,3 +120,17 @@ def path_check(path):
|
||||
if i in list:
|
||||
return False
|
||||
return True
|
||||
|
||||
#数据加密
|
||||
def db_encrypt(data):
|
||||
result = {}
|
||||
result['status'] = True
|
||||
result['msg'] = data
|
||||
return result
|
||||
|
||||
#数据解密
|
||||
def db_decrypt(data):
|
||||
result = {}
|
||||
result['status'] = True
|
||||
result['msg'] = data
|
||||
return result
|
@@ -163,6 +163,19 @@ if("undefined" != typeof database && database.hasOwnProperty("del_database")){
|
||||
}
|
||||
],
|
||||
success: function () {
|
||||
$('#check_layer_content').find('.glyphicon-info-sign').click(function (e) {
|
||||
var msg = $(this).parent().prop('title')
|
||||
msg = msg.replace('数据库:','<br>数据库:')
|
||||
layer.tips(msg, $(this).parent(), { tips: [1, 'red'], time: 3000 })
|
||||
$(document).click(function (ev) {
|
||||
layer.closeAll('tips');
|
||||
$(this).unbind('click');
|
||||
ev.stopPropagation();
|
||||
ev.preventDefault();
|
||||
});
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
if ($('.remote_database').length) {
|
||||
$('.remote_database').each(function (index, el) {
|
||||
var id = $(el).parent().parent().parent().index()
|
@@ -43,66 +43,128 @@ if("undefined" != typeof bt && bt.hasOwnProperty("prompt_confirm")){
|
||||
}
|
||||
if("undefined" != typeof database && database.hasOwnProperty("del_database")){
|
||||
database.del_database = function (wid, dbname,obj, callback) {
|
||||
var tips = '是否确认【删除数据库】,删除后可能会影响业务使用!';
|
||||
if(obj && obj.db_type > 0) tips = '远程数据库不支持数据库回收站,删除后将无法恢复,请谨慎操作';
|
||||
var title = typeof dbname === "function" ?'批量删除数据库':'删除数据库 [ '+ dbname +' ]';
|
||||
layer.open({
|
||||
type:1,
|
||||
title:title,
|
||||
icon:0,
|
||||
skin:'delete_site_layer',
|
||||
area: "530px",
|
||||
closeBtn: 2,
|
||||
shadeClose: true,
|
||||
content:"<div class=\'bt-form webDelete pd30\' id=\'site_delete_form\'>" +
|
||||
"<i class=\'layui-layer-ico layui-layer-ico0\'></i>" +
|
||||
"<div class=\'f13 check_title\' style=\'margin-bottom: 20px;\'>"+tips+"</div>" +
|
||||
"<div style=\'color:red;margin:18px 0 18px 18px;font-size:14px;font-weight: bold;\'>注意:数据无价,请谨慎操作!!!"+(!recycle_bin_db_open?'<br>风险操作:当前数据库回收站未开启,删除数据库将永久消失!':'')+"</div>" +
|
||||
"</div>",
|
||||
btn:[lan.public.ok,lan.public.cancel],
|
||||
yes:function(indexs){
|
||||
var data = {id: wid,name: dbname};
|
||||
if(typeof dbname === "function"){
|
||||
delete data.id;
|
||||
delete data.name;
|
||||
}
|
||||
layer.close(indexs)
|
||||
if(typeof dbname === "function"){
|
||||
dbname(data)
|
||||
}else{
|
||||
bt.database.del_database(data, function (rdata) {
|
||||
layer.closeAll()
|
||||
if (rdata.status) database_table.$refresh_table_list(true);
|
||||
if (callback) callback(rdata);
|
||||
bt.msg(rdata);
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
var title = '',
|
||||
tips = '是否确认【删除数据库】,删除后可能会影响业务使用!';
|
||||
if(obj && obj.db_type > 0) tips = '远程数据库不支持数据库回收站,删除后将无法恢复,请谨慎操作';
|
||||
title = typeof dbname === "function" ?'批量删除数据库':'删除数据库 [ '+ dbname +' ]';
|
||||
layer.open({
|
||||
type:1,
|
||||
title:title,
|
||||
icon:0,
|
||||
skin:'delete_site_layer',
|
||||
area: "530px",
|
||||
closeBtn: 2,
|
||||
shadeClose: true,
|
||||
content:"<div class=\'bt-form webDelete pd30\' id=\'site_delete_form\'>" +
|
||||
"<i class=\'layui-layer-ico layui-layer-ico0\'></i>" +
|
||||
"<div class=\'f13 check_title\' style=\'margin-bottom: 20px;\'>"+tips+"</div>" +
|
||||
"<div style=\'color:red;margin:18px 0 18px 18px;font-size:14px;font-weight: bold;\'>注意:数据无价,请谨慎操作!!!"+(!recycle_bin_db_open?'<br>风险操作:当前数据库回收站未开启,删除数据库将永久消失!':'')+"</div>" +
|
||||
"</div>",
|
||||
btn:[lan.public.ok,lan.public.cancel],
|
||||
yes:function(indexs){
|
||||
var data = {id: wid,name: dbname};
|
||||
if(typeof dbname === "function"){
|
||||
delete data.id;
|
||||
delete data.name;
|
||||
}
|
||||
layer.close(indexs)
|
||||
var arrs = wid instanceof Array ? wid : [wid]
|
||||
var ids = JSON.stringify(arrs), countDown = 9;
|
||||
if (arrs.length == 1) countDown = 4
|
||||
title = typeof dbname === "function" ?'二次验证信息,批量删除数据库':'二次验证信息,删除数据库 [ ' + dbname + ' ]';
|
||||
var loadT = bt.load('正在检测数据库数据信息,请稍后...')
|
||||
|
||||
bt_tools.send({url:'database/'+bt.data.db_tab_name+'/check_del_data',data:{data:JSON.stringify({ids: ids})}},function(res){
|
||||
loadT.close()
|
||||
layer.open({
|
||||
type:1,
|
||||
title:title,
|
||||
closeBtn: 2,
|
||||
skin: 'verify_site_layer_info',
|
||||
area: '740px',
|
||||
content: '<div class="check_delete_site_main pd30">' +
|
||||
'<i class="layui-layer-ico layui-layer-ico0"></i>' +
|
||||
'<div class="check_layer_title">堡塔温馨提示您,请冷静几秒钟,确认是否要删除以下数据。</div>' +
|
||||
'<div class="check_layer_content">' +
|
||||
'<div class="check_layer_item">' +
|
||||
'<div class="check_layer_site"></div>' +
|
||||
'<div class="check_layer_database"></div>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="check_layer_error ' + (recycle_bin_db_open ? 'hide' : '') + '"><span class="glyphicon glyphicon-info-sign"></span>风险事项:当前未开启数据库回收站功能,删除数据库后,数据库将永久消失!</div>' +
|
||||
'<div class="check_layer_message"><span style="color:red">注意:请仔细阅读以上要删除信息,防止数据库被误删</span></div>' +
|
||||
'</div>',
|
||||
btn: ['确认删除', '取消删除'],
|
||||
success: function (layers) {
|
||||
var html = '', rdata = res.data;
|
||||
var filterData = rdata.filter(function(el){
|
||||
return ids.indexOf(el.id) != -1
|
||||
})
|
||||
for (var i = 0; i < filterData.length; i++) {
|
||||
var item = filterData[i], newTime = parseInt(new Date().getTime() / 1000),
|
||||
t_icon = '<span class="glyphicon glyphicon-info-sign" style="color: red;width:15px;height: 15px;;vertical-align: middle;"></span>';
|
||||
|
||||
database_html = (function(item){
|
||||
var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10),
|
||||
is_database_rule = res.db_size <= item.total,
|
||||
database_time = bt.format_data(item.st_time, 'yyyy-MM-dd'),
|
||||
database_size = bt.format_size(item.total);
|
||||
|
||||
var f_size = '<i ' + (is_database_rule ? 'class="warning"' : '') + ' style = "vertical-align: middle;" > ' + database_size + '</i> ' + (is_database_rule ? t_icon : '');
|
||||
var t_size = '注意:此数据库较大,可能为重要数据,请谨慎操作.\n数据库:' + database_size;
|
||||
|
||||
return '<div class="check_layer_database">' +
|
||||
'<span title="数据库:' + item.name + '">数据库:' + item.name + '</span>' +
|
||||
'<span title="' + t_size+'">大小:' + f_size +'</span>' +
|
||||
'<span title="' + (is_time_rule && item.total != 0 ? '重要:此数据库创建时间较早,可能为重要数据,请谨慎操作.' : '') + '时间:' + database_time+'">创建时间:<i ' + (is_time_rule && item.total != 0 ? 'class="warning"' : '') + '>' + database_time + '</i></span>' +
|
||||
'</div>'
|
||||
}(item))
|
||||
if(database_html !== '') html += '<div class="check_layer_item">' + database_html +'</div>';
|
||||
}
|
||||
if(html === '') html = '<div style="text-align: center;width: 100%;height: 100%;line-height: 300px;font-size: 15px;">无数据</div>'
|
||||
$('.check_layer_content').html(html)
|
||||
},
|
||||
yes:function(indes,layers){
|
||||
if(typeof dbname === "function"){
|
||||
dbname(data)
|
||||
}else{
|
||||
bt.database.del_database(data, function (rdata) {
|
||||
layer.closeAll()
|
||||
if (rdata.status) database_table.$refresh_table_list(true);
|
||||
if (callback) callback(rdata);
|
||||
bt.msg(rdata);
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
if("undefined" != typeof site && site.hasOwnProperty("del_site")){
|
||||
site.del_site = function(wid, wname, callback) {
|
||||
var title = typeof wname === "function" ?'批量删除站点':'删除站点 [ '+ wname +' ]';
|
||||
var title = typeof wname === "function" ? '批量删除站点' : '删除站点 [ ' + wname + ' ]';
|
||||
recycle_bin_open = bt.get_cookie("is_recycle") || bt.get_cookie("is_recycle") == null ? true : false
|
||||
layer.open({
|
||||
type:1,
|
||||
title:title,
|
||||
icon:0,
|
||||
skin:'delete_site_layer',
|
||||
type: 1,
|
||||
title: title,
|
||||
icon: 0,
|
||||
skin: 'delete_site_layer',
|
||||
area: "440px",
|
||||
closeBtn: 2,
|
||||
shadeClose: true,
|
||||
content:"<div class=\'bt-form webDelete pd30\' id=\'site_delete_form\'>" +
|
||||
content: "<div class=\'bt-form webDelete pd30\' id=\'site_delete_form\'>" +
|
||||
'<i class="layui-layer-ico layui-layer-ico0"></i>' +
|
||||
"<div class=\'f13 check_title\'>是否要删除关联的FTP、数据库、站点目录!</div>" +
|
||||
"<div class=\"check_type_group\">" +
|
||||
"<label><input type=\"checkbox\" name=\"ftp\"><span>FTP</span></label>" +
|
||||
"<label><input type=\"checkbox\" name=\"database\"><span>数据库</span>"+ (!recycle_bin_db_open?'<span class="glyphicon glyphicon-info-sign" style="color: red"></span>':'') +"</label>" +
|
||||
"<label><input type=\"checkbox\" name=\"path\"><span>站点目录</span>"+ (!recycle_bin_open?'<span class="glyphicon glyphicon-info-sign" style="color: red"></span>':'') +"</label>" +
|
||||
"</div>"+
|
||||
"<label><input type=\"checkbox\" name=\"database\"><span>数据库</span>" + (!recycle_bin_db_open ? '<span class="glyphicon glyphicon-info-sign" style="color: red"></span>' : '') + "</label>" +
|
||||
"<label><input type=\"checkbox\" name=\"path\"><span>站点目录</span>" + (!recycle_bin_open ? '<span class="glyphicon glyphicon-info-sign" style="color: red"></span>' : '') + "</label>" +
|
||||
"</div>" +
|
||||
"</div>",
|
||||
btn:[lan.public.ok,lan.public.cancel],
|
||||
success:function(layers,indexs){
|
||||
btn: [lan.public.ok, lan.public.cancel],
|
||||
success: function (layers, indexs) {
|
||||
$(layers).find('.check_type_group label').hover(function () {
|
||||
var name = $(this).find('input').attr('name');
|
||||
if (name === 'data' && !recycle_bin_db_open) {
|
||||
@@ -114,14 +176,14 @@ if("undefined" != typeof site && site.hasOwnProperty("del_site")){
|
||||
layer.closeAll('tips');
|
||||
})
|
||||
},
|
||||
yes:function(indexs){
|
||||
var data = {id: wid,webname: wname};
|
||||
yes: function (indexs) {
|
||||
var data = { id: wid, webname: wname };
|
||||
$('#site_delete_form input[type=checkbox]').each(function (index, item) {
|
||||
if($(item).is(':checked')) data[$(item).attr('name')] = 1
|
||||
if ($(item).is(':checked')) data[$(item).attr('name')] = 1
|
||||
})
|
||||
var is_database = data.hasOwnProperty('database'),is_path = data.hasOwnProperty('path'),is_ftp = data.hasOwnProperty('ftp');
|
||||
if((!is_database && !is_path) && (!is_ftp || is_ftp)){
|
||||
if(typeof wname === "function"){
|
||||
var is_database = data.hasOwnProperty('database'), is_path = data.hasOwnProperty('path'), is_ftp = data.hasOwnProperty('ftp');
|
||||
if ((!is_database && !is_path) && (!is_ftp || is_ftp)) {
|
||||
if (typeof wname === "function") {
|
||||
wname(data)
|
||||
return false;
|
||||
}
|
||||
@@ -132,24 +194,104 @@ if("undefined" != typeof site && site.hasOwnProperty("del_site")){
|
||||
})
|
||||
return false
|
||||
}
|
||||
if(typeof wname === "function"){
|
||||
if (typeof wname === "function") {
|
||||
delete data.id;
|
||||
delete data.webname;
|
||||
}
|
||||
layer.close(indexs)
|
||||
if(typeof wname === "function"){
|
||||
console.log(data)
|
||||
wname(data)
|
||||
}else{
|
||||
bt.site.del_site(data, function (rdata) {
|
||||
layer.closeAll()
|
||||
if (rdata.status) site.get_list();
|
||||
if (callback) callback(rdata);
|
||||
bt.msg(rdata);
|
||||
var arrs = wid instanceof Array ? wid : [wid]
|
||||
var ids = JSON.stringify(arrs), countDown = 9;
|
||||
if (arrs.length == 1) countDown = 4
|
||||
title = typeof wname === "function" ? '二次验证信息,批量删除站点' : '二次验证信息,删除站点 [ ' + wname + ' ]';
|
||||
var loadT = bt.load('正在检测站点数据信息,请稍后...')
|
||||
bt.send('check_del_data', 'site/check_del_data', { ids: ids }, function (res) {
|
||||
loadT.close()
|
||||
layer.open({
|
||||
type: 1,
|
||||
title: title,
|
||||
closeBtn: 2,
|
||||
skin: 'verify_site_layer_info',
|
||||
area: '740px',
|
||||
content: '<div class="check_delete_site_main pd30">' +
|
||||
'<i class="layui-layer-ico layui-layer-ico0"></i>' +
|
||||
'<div class="check_layer_title">堡塔温馨提示您,请冷静几秒钟,确认以下要删除的数据。</div>' +
|
||||
'<div class="check_layer_content">' +
|
||||
'<div class="check_layer_item">' +
|
||||
'<div class="check_layer_site"></div>' +
|
||||
'<div class="check_layer_database"></div>' +
|
||||
'</div>' +
|
||||
'</div>' +
|
||||
'<div class="check_layer_error ' + (data.database && recycle_bin_db_open ? 'hide' : '') + '"><span class="glyphicon glyphicon-info-sign"></span>风险事项:当前未开启数据库回收站功能,删除数据库后,数据库将永久消失!</div>' +
|
||||
'<div class="check_layer_error ' + (data.path && recycle_bin_open ? 'hide' : '') + '"><span class="glyphicon glyphicon-info-sign"></span>风险事项:当前未开启文件回收站功能,删除站点目录后,站点目录将永久消失!</div>' +
|
||||
'<div class="check_layer_message"><span style="color:red">注意:请仔细阅读以上要删除信息,防止网站数据被误删</span></div>' +
|
||||
'</div>',
|
||||
// recycle_bin_db_open &&
|
||||
// recycle_bin_open &&
|
||||
btn: ['确认删除', '取消删除'],
|
||||
success: function (layers) {
|
||||
var html = '', rdata = res.data;
|
||||
for (var i = 0; i < rdata.length; i++) {
|
||||
var item = rdata[i], newTime = parseInt(new Date().getTime() / 1000),
|
||||
t_icon = '<span class="glyphicon glyphicon-info-sign" style="color: red;width:15px;height: 15px;;vertical-align: middle;"></span>';
|
||||
|
||||
site_html = (function (item) {
|
||||
if (!is_path) return ''
|
||||
var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10),
|
||||
is_path_rule = res.file_size <= item.total,
|
||||
dir_time = bt.format_data(item.st_time, 'yyyy-MM-dd'),
|
||||
dir_size = bt.format_size(item.total);
|
||||
|
||||
var f_html = '<i ' + (is_path_rule ? 'class="warning"' : '') + ' style = "vertical-align: middle;" > ' + dir_size + '</i> ' + (is_path_rule ? t_icon : '');
|
||||
var f_title = (is_path_rule ? '注意:此目录较大,可能为重要数据,请谨慎操作.\n' : '') + '目录:' + item.path + '(' + (item.limit ? '大于' : '') + dir_size + ')';
|
||||
|
||||
return '<div class="check_layer_site">' +
|
||||
'<span title="站点:' + item.name + '">站点名:' + item.name + '</span>' +
|
||||
'<span title="' + f_title + '" >目录:<span style="vertical-align: middle;max-width: 160px;width: auto;">' + item.path + '</span> (' + f_html + ')</span>' +
|
||||
'<span title="' + (is_time_rule ? '注意:此站点创建时间较早,可能为重要数据,请谨慎操作.\n' : '') + '时间:' + dir_time + '">创建时间:<i ' + (is_time_rule ? 'class="warning"' : '') + '>' + dir_time + '</i></span>' +
|
||||
'</div>'
|
||||
}(item)),
|
||||
database_html = (function (item) {
|
||||
if (!is_database || !item.database) return '';
|
||||
var is_time_rule = (newTime - item.st_time) > (86400 * 30) && (item.total > 1024 * 10),
|
||||
is_database_rule = res.db_size <= item.database.total,
|
||||
database_time = bt.format_data(item.database.st_time, 'yyyy-MM-dd'),
|
||||
database_size = bt.format_size(item.database.total);
|
||||
|
||||
var f_size = '<i ' + (is_database_rule ? 'class="warning"' : '') + ' style = "vertical-align: middle;" > ' + database_size + '</i> ' + (is_database_rule ? t_icon : '');
|
||||
var t_size = '注意:此数据库较大,可能为重要数据,请谨慎操作.\n数据库:' + database_size;
|
||||
|
||||
return '<div class="check_layer_database">' +
|
||||
'<span title="数据库:' + item.database.name + '">数据库:' + item.database.name + '</span>' +
|
||||
'<span title="' + t_size + '">大小:' + f_size + '</span>' +
|
||||
'<span title="' + (is_time_rule && item.database.total != 0 ? '重要:此数据库创建时间较早,可能为重要数据,请谨慎操作.' : '') + '时间:' + database_time + '">创建时间:<i ' + (is_time_rule && item.database.total != 0 ? 'class="warning"' : '') + '>' + database_time + '</i></span>' +
|
||||
'</div>'
|
||||
}(item))
|
||||
if ((site_html + database_html) !== '') html += '<div class="check_layer_item">' + site_html + database_html + '</div>';
|
||||
}
|
||||
if (html === '') html = '<div style="text-align: center;width: 100%;height: 100%;line-height: 300px;font-size: 15px;">无数据</div>'
|
||||
$('.check_layer_content').html(html)
|
||||
},
|
||||
yes: function (indes, layers) {
|
||||
if (typeof wname === "function") {
|
||||
wname(data)
|
||||
} else {
|
||||
bt.site.del_site(data, function (rdata) {
|
||||
layer.closeAll()
|
||||
if (rdata.status) site.get_list();
|
||||
if (callback) callback(rdata);
|
||||
bt.msg(rdata);
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
if(bt.get_cookie("is_recycle") || bt.get_cookie("is_recycle")==null){
|
||||
$('[name="path"]').attr('checked',true)
|
||||
}else{
|
||||
$('[name="path"]').removeProp('checked');
|
||||
}
|
||||
}
|
||||
}
|
||||
if("undefined" != typeof bt && bt.hasOwnProperty("firewall") && bt.firewall.hasOwnProperty("add_accept_port")){
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
- 将class文件夹里面所有的.so文件删除
|
||||
|
||||
- 将PluginLoader.py复制到class文件夹
|
||||
- 将linux/PluginLoader.py复制到class文件夹
|
||||
|
||||
- 批量解密模块文件:执行 php think decrypt classdir <面板class文件夹路径>
|
||||
|
||||
@@ -16,9 +16,7 @@
|
||||
|
||||
- 全局搜索替换 https://www.bt.cn/api/ => http://www.example.com/api/(需排除clearModel.py、scanningModel.py、ipsModel.py)
|
||||
|
||||
- class/panelAuth.py 替换 http://www.bt.cn/api/ => http://www.example.com/api/
|
||||
|
||||
- 全局搜索替换 http://download.bt.cn/install/update6.sh => http://www.example.com/install/update6.sh
|
||||
- 全局搜索替换 https://download.bt.cn/install/update6.sh => http://www.example.com/install/update6.sh
|
||||
|
||||
- class/ajax.py 文件 \#是否执行升级程序 下面的 public.get_url() 改成 public.GetConfigValue('home')
|
||||
|
||||
@@ -56,12 +54,16 @@
|
||||
temp_file = temp_file.replace('wget -O Tpublic.sh', '#wget -O Tpublic.sh')
|
||||
temp_file = temp_file.replace('\cp -rpa Tpublic.sh', '#\cp -rpa Tpublic.sh')
|
||||
temp_file = temp_file.replace('http://download.bt.cn/install/public.sh', 'http://www.example.com/install/public.sh')
|
||||
temp_file = temp_file.replace('https://download.bt.cn/install/public.sh', 'http://www.example.com/install/public.sh')
|
||||
```
|
||||
|
||||
- class/plugin_deployment.py 文件,SetupPackage方法内替换 public.GetConfigValue('home') => 'https://www.bt.cn'
|
||||
|
||||
- install/install_soft.sh 在bash执行之前加入以下代码
|
||||
|
||||
```shell
|
||||
sed -i "s/http:\/\/download.bt.cn\/install\/public.sh/http:\/\/www.example.com\/install\/public.sh/" lib.sh
|
||||
sed -i "s/https:\/\/download.bt.cn\/install\/public.sh/http:\/\/www.example.com\/install\/public.sh/" lib.sh
|
||||
sed -i "/wget -O Tpublic.sh/d" $name.sh
|
||||
```
|
||||
|
||||
@@ -69,12 +71,8 @@
|
||||
|
||||
- 去除无用的定时任务:task.py 文件 删除以下几行
|
||||
|
||||
"update_software_list": update_software_list,
|
||||
|
||||
"check_panel_msg": check_panel_msg,
|
||||
|
||||
PluginLoader.daemon_panel()
|
||||
|
||||
- 去除WebRTC连接:BTPanel/static/js/public.js 删除stun.start();这一行
|
||||
|
||||
- 去除首页广告:BTPanel/static/js/index.js 文件删除最下面index.recommend_paid_version()这一行
|
||||
@@ -103,6 +101,8 @@
|
||||
|
||||
- [可选]关闭自动生成访问日志:在 BTPanel/\_\_init\_\_.py 删除public.write_request_log()这一行
|
||||
|
||||
- [可选]删除小图标广告:在BTPanel/static/js/site.js,删除“WAF防火墙,保护网站安全”对应的html标签,files.js,删除“开启保护,文件无法编辑”对应的html标签
|
||||
|
||||
|
||||
解压安装包panel6.zip,将更新包改好的文件覆盖到里面,然后重新打包,即可更新安装包。(
|
||||
|
||||
|
@@ -52,10 +52,12 @@ Windows版宝塔由于加密文件太多,无法全部解密,因此无法做
|
||||
|
||||
- 删除最下面 logs_analysis() 这1行
|
||||
|
||||
- 去除首页广告:BTPanel/static/js/index.js 文件删除最下面index.recommend_paid_version()这一行
|
||||
- 去除首页广告:BTPanel/static/js/index.js 文件删除最下面index.recommend_paid_version()这一行以及index.consultancy_services()这一行
|
||||
|
||||
- 去除首页自动检测更新,避免频繁请求云端:BTPanel/static/js/index.js 文件注释掉bt.system.check_update这一段代码外的setTimeout
|
||||
|
||||
- 去除内页广告:BTPanel/templates/default/layout.html 删除getPaymentStatus();这一行
|
||||
|
||||
- [可选]去除各种计算题:复制win/bt.js到 BTPanel/static/ ,在 BTPanel/templates/default/layout.html 的尾部加入
|
||||
|
||||
```javascript
|
||||
|
Reference in New Issue
Block a user