~更新功能调整,新增更新版本通道选择
  ·增加稳定版分支及分支切换
  ·增加公测版及开发版分支
  ·现在前4个源都支持各个分支之间任意切换及回退
  ·内测源今后改为个人开发测试用,请更新后尽快换源
~正式适配sing-box1.8.0内核
  ·已编译mips相关版本内核文件
  ·已将内核添加到项目内/bin目录,以支持小闪存模式
  ·编译时移除了with_gvisor参数,以优化内存占用
~修复手动加载/tmp目录下内核时无法正确识别的bug
~修复保守模式启用本机代理后部分设备导致日志刷屏的bug
This commit is contained in:
juewuy
2024-01-12 21:36:31 +08:00
parent 3679267902
commit 75f1bbeaa4
10 changed files with 184 additions and 125 deletions

View File

@@ -9,6 +9,7 @@ dir_avail(){
df -h &>/dev/null && h=$2
df $h $1 |awk '{ for(i=1;i<=NF;i++){ if(NR==1){ arr[i]=$i; }else{ arr[i]=arr[i]" "$i; } } } END{ for(i=1;i<=NF;i++){ print arr[i]; } }' |grep -E 'Ava|可用' |awk '{print $2}'
}
#导入订阅、配置文件相关
setrules(){ #自定义clash规则
set_rule_type(){
@@ -761,7 +762,7 @@ set_core_config(){ #配置文件功能
}
#下载更新相关
gettar(){
${CRASHDIR}/start.sh webget ${TMPDIR}/clashfm.tar.gz $tarurl
${CRASHDIR}/start.sh get_bin ${TMPDIR}/update.tar.gz bin/clashfm.tar.gz
if [ "$?" != "0" ];then
echo -e "\033[33m文件下载失败\033[0m"
error_down
@@ -771,7 +772,7 @@ gettar(){
echo -----------------------------------------------
echo 开始解压文件!
mkdir -p ${CRASHDIR} > /dev/null
tar -zxvf "${TMPDIR}/clashfm.tar.gz" -C ${CRASHDIR}/ || tar -zxvf "${TMPDIR}/clashfm.tar.gz" --no-same-owner -C ${CRASHDIR}/
tar -zxvf "${TMPDIR}/update.tar.gz" -C ${CRASHDIR}/ 2>/dev/null || tar -zxvf "${TMPDIR}/update.tar.gz" --no-same-owner -C ${CRASHDIR}/
if [ $? -ne 0 ];then
echo -e "\033[33m文件解压失败\033[0m"
error_down
@@ -780,7 +781,7 @@ gettar(){
echo -e "\033[32m脚本更新成功\033[0m"
fi
fi
rm -rf ${TMPDIR}/clashfm.tar.gz
rm -rf ${TMPDIR}/update.tar.gz
exit
}
getsh(){
@@ -791,7 +792,6 @@ getsh(){
echo -----------------------------------------------
read -p "是否更新脚本?[1/0] > " res
if [ "$res" = '1' ]; then
tarurl=$update_url/bin/clashfm.tar.gz
#下载更新
gettar
#提示
@@ -884,12 +884,14 @@ getcore(){
[ -z "$crashcore" ] && crashcore=clashpre
[ -z "$cpucore" ] && getcpucore
[ "$crashcore" = singbox ] && core_new=singbox || core_new=clash
#生成链接
[ -z "$custcorelink" ] && corelink="${update_url}/bin/${crashcore}/${core_new}-linux-${cpucore}" || corelink="$custcorelink"
#获取在线内核文件
echo -----------------------------------------------
echo 正在在线获取$crashcore核心文件……
${CRASHDIR}/start.sh webget ${TMPDIR}/core.new $corelink
if [ -z "$custcorelink" ];then
${CRASHDIR}/start.sh get_bin ${TMPDIR}/core.new bin/${crashcore}/${core_new}-linux-${cpucore}
else
${CRASHDIR}/start.sh webget ${TMPDIR}/core.new "$custcorelink"
fi
if [ "$?" = "1" ];then
echo -e "\033[31m核心文件下载失败\033[0m"
rm -rf ${TMPDIR}/core.new
@@ -931,7 +933,7 @@ setcustcore(){
echo -e "\033[33m请选择需要使用的核心\033[0m"
echo -e "1 \033[32m 测试版ClashPre内核 \033[0m"
echo -e "2 \033[32m 最新Meta.Alpha内核 \033[0m"
echo -e "3 \033[32m Sing-Box官方内核 \033[0m"
#echo -e "3 \033[32m Sing-Box官方内核 \033[0m"
echo -e "4 \033[33m 自定义内核链接 \033[0m"
read -p "请输入对应数字 > " num
case "$num" in
@@ -984,11 +986,15 @@ setcore(){
echo
echo -e "3 \033[43;30mClash.Meta\033[0m \033[32m多功能支持最全面\033[0m"
echo -e " (Meta稳定内核) \033[33m内存占用较高\033[0m"
echo -e " 说明文档: \033[36;4mhttps://docs.metacubex.one\033[0m"
echo -e " 说明文档: \033[36;4mhttps://wiki.metacubex.one\033[0m"
echo
echo -e "4 \033[32m自定义内核\033[0m \033[33m仅限专业用户使用\033[0m"
echo -e "4 \033[43;30mSing-Box\033[0m \033[32m支持全面占用低\033[0m"
echo -e " (sing-box内核) \033[33m另一个选择\033[0m"
echo -e " 说明文档: \033[36;4mhttps://sing-box.sagernet.org\033[0m"
echo
echo "5 手动指定处理器架构"
echo -e "5 \033[32m自定义内核\033[0m \033[33m仅限专业用户使用\033[0m"
echo
echo "6 手动指定处理器架构"
echo -----------------------------------------------
echo 0 返回上级菜单
read -p "请输入对应数字 > " num
@@ -1009,9 +1015,14 @@ setcore(){
getcore
;;
4)
setcustcore
crashcore=singbox
custcorelink=''
getcore
;;
5)
setcustcore
;;
6)
setcpucore
setcore
;;
@@ -1023,10 +1034,9 @@ setcore(){
getgeo(){
#生成链接
[ -z "$custgeolink" ] && geolink="$update_url/bin/geodata/$geotype" || geolink="$custgeolink"
echo -----------------------------------------------
echo 正在从服务器获取数据库文件…………
${CRASHDIR}/start.sh webget ${TMPDIR}/$geoname $geolink
${CRASHDIR}/start.sh get_bin ${TMPDIR}/$geoname bin/geodata/$geotype
if [ "$?" = "1" ];then
echo -----------------------------------------------
echo -e "\033[31m文件下载失败\033[0m"
@@ -1277,10 +1287,10 @@ esac
}
getdb(){
dblink="${update_url}/bin/dashboard/${db_type}.tar.gz"
dblink="${update_url}/"
echo -----------------------------------------------
echo 正在连接服务器获取安装文件…………
${CRASHDIR}/start.sh webget ${TMPDIR}/clashdb.tar.gz $dblink
${CRASHDIR}/start.sh get_bin ${TMPDIR}/clashdb.tar.gz bin/dashboard/${db_type}.tar.gz
if [ "$?" = "1" ];then
echo -----------------------------------------------
echo -e "\033[31m文件下载失败\033[0m"
@@ -1402,10 +1412,9 @@ setdb(){
}
getcrt(){
crtlink="${update_url}/bin/fix/ca-certificates.crt"
echo -----------------------------------------------
echo 正在连接服务器获取安装文件…………
${CRASHDIR}/start.sh webget ${TMPDIR}/ca-certificates.crt $crtlink
${CRASHDIR}/start.sh get_bin ${TMPDIR}/ca-certificates.crt bin/fix/ca-certificates.crt
if [ "$?" = "1" ];then
echo -----------------------------------------------
echo -e "\033[31m文件下载失败\033[0m"
@@ -1414,12 +1423,11 @@ getcrt(){
echo -----------------------------------------------
mkdir -p $openssldir
mv -f ${TMPDIR}/ca-certificates.crt $crtdir
${CRASHDIR}/start.sh webget ${TMPDIR}/ssl_test https://baidu.com echooff rediron skipceroff
${CRASHDIR}/start.sh webget /dev/null https://baidu.com echooff rediron skipceroff
if [ "$?" = "1" ];then
export CURL_CA_BUNDLE=$crtdir
echo "export CURL_CA_BUNDLE=$crtdir" >> /etc/profile
fi
rm -rf ${TMPDIR}/ssl_test
echo -e "\033[32m证书安装成功\033[0m"
sleep 1
fi
@@ -1454,68 +1462,123 @@ setcrt(){
}
#安装源
setserver(){
[ -z "$release_type" ] && release_name=未指定
[ -n "$release_type" ] && release_name=${release_type}'(回退)'
[ "$release_type" = stable ] && release_name=稳定版
[ "$release_type" = master ] && release_name=公测版
[ "$release_type" = dev ] && release_name=开发版
[ -n "$url_id" ] && url_name=$(grep "$url_id" ${CRASHDIR}/configs/servers.list 2>/dev/null | awk '{print $2}') || url_name=$update_url
saveserver(){
#写入配置文件
setconfig update_url \'$update_url\'
setconfig release_url \'$release_url\'
setconfig url_id $url_id
setconfig release_type $release_type
echo -----------------------------------------------
echo -e "\033[32m源地址更新成功\033[0m"
release_new=""
}
echo -----------------------------------------------
echo -e "\033[30;47m切换ShellCrash版本及更新源地址\033[0m"
echo -e "当前源地址\033[4;32m$update_url\033[0m"
echo -e "当前版本\033[4;33m$release_name\033[0m 当前源:\033[4;32m$url_name\033[0m"
echo -----------------------------------------------
grep -aE '^1|^2' ${CRASHDIR}/configs/servers.list | awk '{print " "NR" "$4" "$2}'
grep -E "^1|$release_name" ${CRASHDIR}/configs/servers.list | awk '{print " "NR" "$2}'
echo -----------------------------------------------
echo -e " a 自定义源地址(用于本地源或自建源)"
echo -e " b \033[31m版本回退\033[0m"
echo -e " a 切换至\033[32m稳定版\033[0m"
echo -e " b 切换至\033[36m公测版\033[0m"
echo -e " c 切换至\033[33m开发版\033[0m"
echo -----------------------------------------------
echo -e " d 自定义源地址(用于本地源或自建源)"
echo -e " e \033[31m版本回退\033[0m"
echo -e " 0 返回上级菜单"
read -p "请输入对应数字 > " num
echo -----------------------------------------------
read -p "请输入对应字母或数字 > " num
case $num in
0)
;;
[1-99])
release_type=$(grep -aE '^1|^2' ${CRASHDIR}/configs/servers.list | sed -n ""$num"p" | awk '{print $4}')
if [ "release_type" = "稳定版" ];then
release_url=$(grep -aE '^1' ${CRASHDIR}/configs/servers.list | sed -n ""$num"p" | awk '{print $3}')
url_id_new=$(grep -E "^1|$release_name" ${CRASHDIR}/configs/servers.list | sed -n ""$num"p" | awk '{print $1}')
if [ -z "$url_id_new" ];then
errornum
sleep 1
setserver
elif [ "$url_id_new" -ge 200 ];then
update_url=$(grep -E "^1|$release_name" ${CRASHDIR}/configs/servers.list | sed -n ""$num"p" | awk '{print $3}')
url_id=''
saveserver
else
update_url=$(grep -aE '^1|^2' ${CRASHDIR}/configs/servers.list | sed -n ""$num"p" | awk '{print $3}')
unset release_url
url_id=$url_id_new
update_url=''
saveserver
fi
saveserver
unset url_id_new
;;
a)
release_type=stable
setconfig release_type $release_type
setserver
;;
b)
release_type=master
setconfig release_type $release_type
setserver
;;
c)
echo -----------------------------------------------
echo -e "\033[33m开发版未经过妥善测试可能依然存在大量bug\033[0m"
echo -e "\033[36m如果你没有足够的耐心或者测试经验切勿使用此版本\033[0m"
echo -e "请务必加入我们的讨论组:\033[32;4mhttps://t.me/ShellClash\033[0m"
read -p "是否依然切换到开发版?(1/0) > " res
if [ "$res" = 1 ];then
release_type=dev
setconfig release_type $release_type
fi
setserver
;;
d)
echo -----------------------------------------------
read -p "请输入个人源路径 > " update_url
if [ -z "$update_url" ];then
echo -----------------------------------------------
echo -e "\033[31m取消输入返回上级菜单\033[0m"
else
url_id=''
release_type=''
saveserver
unset release_url
fi
;;
b)
e)
echo -----------------------------------------------
echo -e "\033[33m如无法连接请务必先启用服务\033[0m"
${CRASHDIR}/start.sh webget ${TMPDIR}/release_new https://raw.githubusercontent.com/juewuy/ShellCrash/master/bin/release_version echooff rediroff 2>${TMPDIR}/release_new
echo -e "\033[31m请选择想要回退至的release版本\033[0m"
cat ${TMPDIR}/release_new | awk '{print " "NR" "$1}'
echo -e " 0 返回上级菜单"
read -p "请输入对应数字 > " num
if [ -z "$num" -o "$num" = 0 ]; then
setserver
elif [ $num -le $(cat ${TMPDIR}/release_new 2>/dev/null | awk 'END{print NR}') ]; then
release_version=$(cat ${TMPDIR}/release_new | awk '{print $1}' | sed -n "$num"p)
update_url="https://raw.githubusercontent.com/juewuy/ShellCrash/$release_version"
saveserver
unset release_url
if [ -n "$url_id" ] && [ "$url_id" -lt 200 ];then
echo -ne "\033[32m正在获取版本信息\033[0m\r"
${CRASHDIR}/start.sh get_bin ${TMPDIR}/release_version bin/release_version
if [ "$?" = "0" ];then
echo -e "\033[31m请选择想要回退至的稳定版版本\033[0m"
cat ${TMPDIR}/release_version | awk '{print " "NR" "$1}'
echo -e " 0 返回上级菜单"
read -p "请输入对应数字 > " num
if [ -z "$num" -o "$num" = 0 ]; then
setserver
elif [ $num -le $(cat ${TMPDIR}/release_version 2>/dev/null | awk 'END{print NR}') ]; then
release_type=$(cat ${TMPDIR}/release_version | awk '{print $1}' | sed -n "$num"p)
update_url=''
saveserver
else
echo -----------------------------------------------
errornum
sleep 1
setserver
fi
else
echo -----------------------------------------------
echo -e "\033[31m版本回退信息获取失败请尝试更换其他安装源\033[0m"
sleep 1
setserver
fi
rm -rf ${TMPDIR}/release_version
else
echo -----------------------------------------------
echo -e "\033[31m输入有误请重新输入\033[0m"
echo -e "\033[31m当前源不支持版本回退请尝试更换其他安装源\033[0m"
sleep 1
setserver
fi
rm -rf ${TMPDIR}/release_new
;;
*)
errornum
@@ -1524,29 +1587,16 @@ setserver(){
}
#检查更新
checkupdate(){
if [ -z "$release_new" ];then
if [ -n "$release_url" ];then
[ -n "$(echo $release_url|grep 'jsdelivr')" ] && check_url=$release_url@master || check_url=$release_url/master
${CRASHDIR}/start.sh webget ${TMPDIR}/version_new $check_url/bin/release_version echoon rediroff 2>${TMPDIR}/version_new
release_new=$(cat ${TMPDIR}/version_new | head -1)
[ -n "$(echo $release_url|grep 'jsdelivr')" ] && update_url=$release_url@$release_new || update_url=$release_url/$release_new
setconfig update_url \'$update_url\'
release_type=正式版
else
release_type=测试版
fi
${CRASHDIR}/start.sh webget ${TMPDIR}/version_new $update_url/bin/version echooff
[ "$?" = "0" ] && release_new=$(cat ${TMPDIR}/version_new | grep -oE 'versionsh=.*' | awk -F'=' '{ print $2 }')
if [ -n "$release_new" ];then
${CRASHDIR}/start.sh get_bin ${TMPDIR}/version_new bin/version echooff
[ "$?" = "0" ] && version_new=$(cat ${TMPDIR}/version_new | grep -oE 'versionsh=.*' | awk -F'=' '{ print $2 }')
if [ -n "$version_new" ];then
source ${TMPDIR}/version_new 2>/dev/null
else
echo -e "\033[31m检查更新失败请切换其他安装源\033[0m"
echo -e "\033[36m如全部安装源都无法使用请先运行服务后再使用更新功能\033[0m"
sleep 1
echo -e "\033[31m检查更新失败尝试切换其他安装源!\033[0m"
setserver
checkupdate
fi
rm -rf ${TMPDIR}/version_new
fi
}
update(){
echo -----------------------------------------------
@@ -1562,8 +1612,8 @@ update(){
sleep 1
}
echo -----------------------------------------------
echo -e " 1 更新\033[36m管理脚本 \033[33m$versionsh_l\033[0m > \033[32m$versionsh$release_type\033[0m"
echo -e " 2 切换\033[33m内核文件 \033[33m$core_v\033[0m > \033[32m$core_v_new\033[0m"
echo -e " 1 更新\033[36m管理脚本 \033[33m$versionsh_l\033[0m > \033[32m$version_new\033[0m"
echo -e " 2 切换\033[33m内核文件 \033[33m$core_v\033[0m > \033[32m$core_v_new\033[0m"
echo -e " 3 更新\033[32m数据库文件\033[0m"
echo -e " 4 安装本地\033[35mDashboard\033[0m面板"
echo -e " 5 安装/更新本地\033[33m根证书文件\033[0m"
@@ -1723,14 +1773,13 @@ userguide(){
[ "$res" = 1 ] && checkupdate && getcrt
fi
#设置加密DNS
${CRASHDIR}/start.sh webget ${TMPDIR}/ssl_test https://doh.pub echooff rediron
${CRASHDIR}/start.sh webget /dev/null https://baidu.com echooff rediron
if [ "$?" = "0" ];then
dns_nameserver='https://223.5.5.5/dns-query, https://doh.pub/dns-query, tls://dns.rubyfish.cn:853'
dns_fallback='https://1.0.0.1/dns-query, https://8.8.4.4/dns-query, https://doh.opendns.com/dns-query'
setconfig dns_nameserver \'"$dns_nameserver"\'
setconfig dns_fallback \'"$dns_fallback"\'
fi
rm -rf ${TMPDIR}/ssl_test
#开启公网访问
sethost(){
read -p "请输入你的公网IP地址 > " host