mirror of
https://github.com/flucont/btcloud.git
synced 2025-10-14 22:31:52 +00:00
Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
9a63bc921b | ||
![]() |
5d305b47de | ||
![]() |
45decd43f6 | ||
![]() |
0db95c4f00 | ||
![]() |
eb5deaeda0 | ||
![]() |
aa704d86ac | ||
![]() |
3eb66a20bc |
@@ -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.7"
|
||||
Linux_Version="7.9.9"
|
||||
Windows_Version="7.8.0"
|
||||
Btm_Version="2.1.1"
|
||||
|
||||
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.7'),
|
||||
('new_version', '7.9.9'),
|
||||
('update_msg', '暂无更新日志'),
|
||||
('update_date', '2022-12-21'),
|
||||
('update_date', '2023-04-07'),
|
||||
('new_version_win', '7.8.0'),
|
||||
('update_msg_win', '暂无更新日志'),
|
||||
('update_date_win', '2022-12-08'),
|
||||
('new_version_btm', '2.1.1'),
|
||||
('update_msg_btm', '暂无更新日志'),
|
||||
('update_date_btm', '2023-03-31'),
|
||||
('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}##"))
|
||||
@@ -626,6 +626,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 +722,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 +752,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 +771,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 +922,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 +963,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 +996,4 @@ endTime=`date +%s`
|
||||
((outTime=($endTime-$startTime)/60))
|
||||
echo -e "Time consumed:\033[32m $outTime \033[0mMinute!"
|
||||
|
||||
|
||||
|
874
public/install/install_btmonitor.sh
Normal file
874
public/install/install_btmonitor.sh
Normal file
@@ -0,0 +1,874 @@
|
||||
#!/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
|
||||
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(){
|
||||
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.0.8"
|
||||
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.1.zip
Normal file
BIN
public/install/src/bt-monitor-2.1.1.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,7 +42,7 @@ 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.7'
|
||||
version='7.9.9'
|
||||
fi
|
||||
armCheck=$(uname -m|grep arm)
|
||||
if [ "${armCheck}" ];then
|
||||
|
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.7'
|
||||
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');
|
||||
|
44
wiki/btmonitor.md
Normal file
44
wiki/btmonitor.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# 宝塔云监控安装包修改记录
|
||||
|
||||
查询最新版本号:https://api.bt.cn/bt_monitor/latest_version
|
||||
|
||||
安装包下载链接:http://download.bt.cn/install/src/bt-monitor-版本号.zip
|
||||
|
||||
- 删除core/include/c_loader/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/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 取消第一个CreateSSL方法定义的注释,删除第二个CreateSSL方法定义
|
||||
|
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
|
@@ -8,7 +8,7 @@
|
||||
|
||||
- 将class文件夹里面所有的.so文件删除
|
||||
|
||||
- 将PluginLoader.py复制到class文件夹
|
||||
- 将linux/PluginLoader.py复制到class文件夹
|
||||
|
||||
- 批量解密模块文件:执行 php think decrypt classdir <面板class文件夹路径>
|
||||
|
||||
@@ -57,6 +57,8 @@
|
||||
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
|
||||
|
Reference in New Issue
Block a user