~providers功能现在支持导入本地yaml文件

~修复provides功能在meta内核未能正确跳过证书验证的bug
~修复本地导入CrashCore命名的内核时未正确提示的bug
~修复自动更新数据库任务明明成功却提示执行失败的bug
~修复自动更新数据库会更新一些当前无用数据库文件的bug
This commit is contained in:
juewuy
2024-03-03 20:34:14 +08:00
parent c6f8513d7f
commit 0a5e06c4e9
3 changed files with 50 additions and 21 deletions

View File

@@ -336,11 +336,20 @@ setproxies(){ #自定义clash节点
} }
gen_clash_providers(){ #生成clash的providers配置文件 gen_clash_providers(){ #生成clash的providers配置文件
gen_clash_providers_txt(){ gen_clash_providers_txt(){
if [ -n "$(echo $2|grep -E '^./')" ];then
local type=file
local path=$2
local download_url=
else
local type=http
local path="./providers/${1}.yaml"
local download_url=$2
fi
cat >> $TMPDIR/providers/providers.yaml <<EOF cat >> $TMPDIR/providers/providers.yaml <<EOF
${1}: ${1}:
type: http type: http
url: "${2}" url: "$download_url"
path: ./providers/${1}.yaml path: "$path"
interval: 43200 interval: 43200
health-check: health-check:
enable: true enable: true
@@ -349,7 +358,7 @@ gen_clash_providers(){ #生成clash的providers配置文件
interval: 600 interval: 600
EOF EOF
[ "$crashcore" = 'meta' ] && { [ "$crashcore" = 'meta' ] && {
[ "$skip_cert" = "开启" ] && skip_cert_verify='skip-cert-verify: true' [ "$skip_cert" != "开启" ] && skip_cert_verify='skip-cert-verify: true'
cat >> $TMPDIR/providers/providers.yaml <<EOF cat >> $TMPDIR/providers/providers.yaml <<EOF
override: override:
udp: true udp: true
@@ -417,7 +426,18 @@ EOF
} }
gen_singbox_providers(){ #生成singbox的providers配置文件 gen_singbox_providers(){ #生成singbox的providers配置文件
gen_singbox_providers_txt(){ gen_singbox_providers_txt(){
cat >> ${TMPDIR}/providers/providers.json <<EOF if [ -n "$(echo $2|grep -E '^./')" ];then
cat >> ${TMPDIR}/providers/providers.json <<EOF
{
"tag": "${1}",
"type": "file",
"healthcheck_url": "https://www.gstatic.com/generate_204",
"healthcheck_interval": "10m",
"path": "${2}"
},
EOF
else
cat >> ${TMPDIR}/providers/providers.json <<EOF
{ {
"tag": "${1}", "tag": "${1}",
"type": "http", "type": "http",
@@ -430,6 +450,8 @@ gen_singbox_providers(){ #生成singbox的providers配置文件
"download_detour": "DIRECT" "download_detour": "DIRECT"
}, },
EOF EOF
fi
} }
if [ -z "$(grep "provider_temp_${coretype}" ${CRASHDIR}/configs/ShellCrash.cfg)" ];then if [ -z "$(grep "provider_temp_${coretype}" ${CRASHDIR}/configs/ShellCrash.cfg)" ];then
provider_temp_file=$(sed -n "1 p" ${CRASHDIR}/configs/${coretype}_providers.list | awk '{print $2}') provider_temp_file=$(sed -n "1 p" ${CRASHDIR}/configs/${coretype}_providers.list | awk '{print $2}')
@@ -495,7 +517,8 @@ EOF
setproviders(){ #自定义providers setproviders(){ #自定义providers
echo ----------------------------------------------- echo -----------------------------------------------
echo -e "\033[33m你可以在这里快捷管理与生成自定义的providers提供者\033[0m" echo -e "\033[33m你可以在这里快捷管理与生成自定义的providers提供者\033[0m"
echo -e "\033[33m暂时只支持yaml格式配置导入,并且不支持跳过证书验证功能\033[0m" echo -e "\033[36m支持在线及本地的Yaml格式配置导入\033[0m"
echo -e "\033[33msingboxp内核暂不支持跳过证书验证功能\033[0m"
[ -s $CRASHDIR/configs/providers.cfg ] && { [ -s $CRASHDIR/configs/providers.cfg ] && {
echo ----------------------------------------------- echo -----------------------------------------------
echo -e "\033[36m输入对应数字可管理providers提供者\033[0m" echo -e "\033[36m输入对应数字可管理providers提供者\033[0m"
@@ -538,8 +561,8 @@ setproviders(){ #自定义providers
fi fi
;; ;;
2) 2)
read -p "请输入http(s)格式的providers链接地址 > " link read -p "请输入providers订阅地址或本地相对路径 > " link
if [ -n "$(echo $link | grep -E '.*\..*')" ] && [ -z "$(grep "$link" $CRASHDIR/configs/providers.cfg)" ];then if [ -n "$(echo $link | grep -E '.*\..*|^\./')" ] && [ -z "$(grep "$link" $CRASHDIR/configs/providers.cfg)" ];then
link=$(echo $link | sed 's/\&/\\\&/g') #特殊字符添加转义 link=$(echo $link | sed 's/\&/\\\&/g') #特殊字符添加转义
sed -i "s|$provider_name $provider_url|$provider_name $link|" $CRASHDIR/configs/providers.cfg sed -i "s|$provider_name $provider_url|$provider_name $link|" $CRASHDIR/configs/providers.cfg
else else
@@ -562,13 +585,16 @@ setproviders(){ #自定义providers
;; ;;
a) a)
echo ----------------------------------------------- echo -----------------------------------------------
read -p "请输入http(s)格式的providers订阅地址 > " link echo -e "支持填写在线的\033[32mYClash订阅地址\033[0m或者\033[32m本地Clash配置文件\033[0m"
[ -n "$(echo $link | grep -E '.*\..*')" ] && { echo -e "本地配置文件请放在\033[32m$CRASHDIR\033[0m目录下并填写相对路径如【\033[32m./providers/test.yaml\033[0m】"
echo -----------------------------------------------
read -p "请输入providers订阅地址或本地相对路径 > " link
[ -n "$(echo $link | grep -E '.*\..*|^\./')" ] && {
read -p "请输入代理提供者的名称或者代号(不可重复) > " name read -p "请输入代理提供者的名称或者代号(不可重复) > " name
[ -n "$name" ] && [ -z "$(grep "name" $CRASHDIR/configs/providers.cfg)" ] && { [ -n "$name" ] && [ -z "$(grep "name" $CRASHDIR/configs/providers.cfg)" ] && {
echo ----------------------------------------------- echo -----------------------------------------------
echo -e "代理提供者:\033[36m$name\033[0m" echo -e "代理提供者:\033[36m$name\033[0m"
echo -e "链接地址:\033[32m$link\033[0m" echo -e "链接地址/路径\033[32m$link\033[0m"
read -p "确认添加?(1/0) > " res read -p "确认添加?(1/0) > " res
[ "$res" = 1 ] && { [ "$res" = 1 ] && {
echo "$name $link" >> $CRASHDIR/configs/providers.cfg echo "$name $link" >> $CRASHDIR/configs/providers.cfg
@@ -1696,6 +1722,9 @@ setgeo(){ #数据库选择菜单
for file in cn_ip.txt cn_ipv6.txt Country.mmdb GeoSite.dat geoip.db geosite.db ;do for file in cn_ip.txt cn_ipv6.txt Country.mmdb GeoSite.dat geoip.db geosite.db ;do
rm -rf $CRASHDIR/$file rm -rf $CRASHDIR/$file
done done
for var in Country_v cn_mini_v china_ip_list_v china_ipv6_list_v geosite_v geoip_cn_v geosite_cn_v ;do
setconfig $var
done
rm -rf $CRASHDIR/*.srs rm -rf $CRASHDIR/*.srs
echo -e "\033[33m所有数据库文件均已清理\033[0m" echo -e "\033[33m所有数据库文件均已清理\033[0m"
sleep 1 sleep 1
@@ -2025,6 +2054,7 @@ checkupdate(){
[ "$?" = "0" ] && version_new=$(cat ${TMPDIR}/version_new | grep -oE 'versionsh=.*' | awk -F'=' '{ print $2 }') [ "$?" = "0" ] && version_new=$(cat ${TMPDIR}/version_new | grep -oE 'versionsh=.*' | awk -F'=' '{ print $2 }')
if [ -n "$version_new" ];then if [ -n "$version_new" ];then
source ${TMPDIR}/version_new 2>/dev/null source ${TMPDIR}/version_new 2>/dev/null
cat ${TMPDIR}/version_new
else else
echo -e "\033[31m检查更新失败请尝试切换其他安装源\033[0m" echo -e "\033[31m检查更新失败请尝试切换其他安装源\033[0m"
setserver setserver
@@ -2048,7 +2078,7 @@ update(){
echo ----------------------------------------------- echo -----------------------------------------------
echo -e " 1 更新\033[36m管理脚本 \033[33m$versionsh_l\033[0m > \033[32m$version_new \033[36m$release_type\033[0m" echo -e " 1 更新\033[36m管理脚本 \033[33m$versionsh_l\033[0m > \033[32m$version_new \033[36m$release_type\033[0m"
echo -e " 2 切换\033[33m内核文件 \033[33m$core_v\033[0m > \033[32m$core_v_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 " 3 更新\033[32m数据库文件\033[0m > \033[32m$GeoIP_v\033[0m"
echo -e " 4 安装本地\033[35mDashboard\033[0m面板" echo -e " 4 安装本地\033[35mDashboard\033[0m面板"
echo -e " 5 安装/更新本地\033[33m根证书文件\033[0m" echo -e " 5 安装/更新本地\033[33m根证书文件\033[0m"
echo -e " 6 查看\033[32mPAC\033[0m自动代理配置" echo -e " 6 查看\033[32mPAC\033[0m自动代理配置"

View File

@@ -108,7 +108,7 @@ ckstatus(){
#检查执行权限 #检查执行权限
[ ! -x ${CRASHDIR}/start.sh ] && chmod +x ${CRASHDIR}/start.sh [ ! -x ${CRASHDIR}/start.sh ] && chmod +x ${CRASHDIR}/start.sh
#检查/tmp内核文件 #检查/tmp内核文件
for file in `ls -F /tmp | grep -v [/\$] | grep -v ' ' | grep -Ev ".*[(gz)(zip)(7z)(tar)]$" | grep -iE '^clash$|^clash-linux.*|^mihomo.*|^sing.*box|^clash.meta.*'` ; do for file in `ls -F /tmp | grep -v [/\$] | grep -v ' ' | grep -Ev ".*[(gz)(zip)(7z)(tar)]$" | grep -iE 'CrashCore|^clash$|^clash-linux.*|^mihomo.*|^sing.*box|^clash.meta.*'` ; do
file=/tmp/$file file=/tmp/$file
chmod +x $file chmod +x $file
echo -e "发现可用的内核文件: \033[36m$file\033[0m " echo -e "发现可用的内核文件: \033[36m$file\033[0m "

View File

@@ -127,22 +127,21 @@ update_mmdb(){ #自动更新数据库
if [ "$?" != "0" ];then if [ "$?" != "0" ];then
logger "任务【自动更新数据库文件】更新【$2】下载失败!" logger "任务【自动更新数据库文件】更新【$2】下载失败!"
rm -rf ${TMPDIR}/$1 rm -rf ${TMPDIR}/$1
return 1
else else
mv -f ${TMPDIR}/$1 ${BINDIR}/$1 mv -f ${TMPDIR}/$1 ${BINDIR}/$1
setconfig $geo_v $GeoIP_v setconfig $geo_v $GeoIP_v
logger "任务【自动更新数据库文件】更新【$2】成功!" logger "任务【自动更新数据库文件】更新【$2】成功!"
return 0
fi fi
fi fi
} }
[ -n "${Country_v}" ] && getgeo Country.mmdb Country.mmdb [ -n "${Country_v}" -a -s $CRASHDIR/Country.mmdb ] && getgeo Country.mmdb Country.mmdb
[ -n "${cn_mini_v}" ] && getgeo Country.mmdb cn_mini.mmdb [ -n "${cn_mini_v}" -a -s $CRASHDIR/Country.mmdb ] && getgeo Country.mmdb cn_mini.mmdb
[ -n "${china_ip_list_v}" ] && getgeo cn_ip.txt china_ip_list.txt [ -n "${china_ip_list_v}" -a -s $CRASHDIR/cn_ip.txt ] && getgeo cn_ip.txt china_ip_list.txt
[ -n "${china_ipv6_list_v}" ] && getgeo cn_ipv6.txt china_ipv6_list.txt [ -n "${china_ipv6_list_v}" -a -s $CRASHDIR/cn_ipv6.txt ] && getgeo cn_ipv6.txt china_ipv6_list.txt
[ -n "${geosite_v}" ] && getgeo GeoSite.dat geosite.dat [ -n "${geosite_v}" -a -s $CRASHDIR/GeoSite.dat ] && getgeo GeoSite.dat geosite.dat
[ -n "${geoip_cn_v}" ] && getgeo geoip.db geoip_cn.db [ -n "${geoip_cn_v}" -a -s $CRASHDIR/geoip.db ] && getgeo geoip.db geoip_cn.db
[ -n "${geosite_cn_v}" ] && getgeo geosite.db geosite_cn.db [ -n "${geosite_cn_v}" -a -s $CRASHDIR/geosite.db ] && getgeo geosite.db geosite_cn.db
return 0
} }
reset_firewall(){ #重设透明路由防火墙 reset_firewall(){ #重设透明路由防火墙
${CRASHDIR}/start.sh stop_firewall ${CRASHDIR}/start.sh stop_firewall