diff --git a/scripts/init.sh b/scripts/init.sh index 68c94a0..cbe38fb 100644 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -1,7 +1,7 @@ #!/bin/sh # Copyright (C) Juewuy -version=1.9.2beta7 +version=1.9.3alpha2 setdir() { dir_avail() { @@ -309,6 +309,7 @@ mkdir -p ${CRASHDIR}/yamls mkdir -p ${CRASHDIR}/jsons mkdir -p ${CRASHDIR}/tools mkdir -p ${CRASHDIR}/task +mkdir -p ${CRASHDIR}/ruleset for file in config.yaml.bak user.yaml proxies.yaml proxy-groups.yaml rules.yaml others.yaml; do mv -f ${CRASHDIR}/$file ${CRASHDIR}/yamls/$file 2>/dev/null done @@ -321,6 +322,9 @@ mv -f ${CRASHDIR}/mark ${CRASHDIR}/configs/ShellCrash.cfg 2>/dev/null mv -f ${CRASHDIR}/configs/ShellClash.cfg ${CRASHDIR}/configs/ShellCrash.cfg 2>/dev/null #数据库改名 mv -f ${CRASHDIR}/geosite.dat ${CRASHDIR}/GeoSite.dat 2>/dev/null +#数据库移动 +mv -f ${CRASHDIR}/*.srs ${CRASHDIR}/ruleset/ 2>/dev/null +mv -f ${CRASHDIR}/*.mrs ${CRASHDIR}/ruleset/ 2>/dev/null #内核改名 mv -f ${CRASHDIR}/clash ${CRASHDIR}/CrashCore 2>/dev/null #内核压缩 @@ -336,6 +340,7 @@ userdel shellclash >/dev/null 2>&1 sed -i '/shellclash/d' /etc/passwd sed -i '/shellclash/d' /etc/group rm -rf /etc/init.d/clash +rm -rf ${CRASHDIR}/rules [ "$systype" = "mi_snapshot" -a "$CRASHDIR" != '/data/clash' ] && rm -rf /data/clash for file in CrashCore clash.sh getdate.sh shellcrash.rc core.new clashservice log shellcrash.service mark? mark.bak; do rm -rf ${CRASHDIR}/$file diff --git a/scripts/start.sh b/scripts/start.sh index dbe091c..4339fd3 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -79,6 +79,7 @@ ckcmd() { #检查命令是否存在 command -v sh >/dev/null 2>&1 && command -v "$1" >/dev/null 2>&1 || type "$1" >/dev/null 2>&1 } ckgeo() { #查找及下载Geo数据文件 + [ ! -d "$BINDIR"/ruleset ] && mkdir -p "$BINDIR"/ruleset find --help 2>&1 | grep -q size && find_para=' -size +20' #find命令兼容 [ -z "$(find "$BINDIR"/"$1" "$find_para" 2>/dev/null)" ] && { if [ -n "$(find "$CRASHDIR"/"$1" "$find_para" 2>/dev/null)" ]; then @@ -86,7 +87,7 @@ ckgeo() { #查找及下载Geo数据文件 else logger "未找到${1}文件,正在下载!" 33 get_bin "$BINDIR"/"$1" bin/geodata/"$2" - [ "$?" = "1" ] && rm -rf "${BINDIR:?}"/"${1}" && logger "${1}文件下载失败,已退出!请前往更新界面尝试手动下载!" 31 && exit 1 + [ "$?" = "1" ] && rm -rf "${BINDIR}"/"${1}" && logger "${1}文件下载失败,已退出!请前往更新界面尝试手动下载!" 31 && exit 1 geo_v="$(echo "$2" | awk -F "." '{print $1}')_v" setconfig "$geo_v" "$(date +"%Y%m%d")" fi @@ -556,7 +557,7 @@ EOF [ "$dns_mod" = "mix" ] && ! grep -q 'geosite-cn:' "$TMPDIR"/rule-providers.yaml && ! grep -q '^rule-providers' "$CRASHDIR"/yamls/others.yaml 2>/dev/null && { space=$(sed -n "1p" "$TMPDIR"/rule-providers.yaml | grep -oE '^ *') #获取空格数 [ -z "$space" ] && space=' ' - echo "${space}geosite-cn: {type: file, behavior: domain, format: mrs, path: geosite-cn.mrs}" >> "$TMPDIR"/rule-providers.yaml + echo "${space}geosite-cn: {type: file, behavior: domain, format: mrs, path: ./ruleset/geosite-cn.mrs}" >> "$TMPDIR"/rule-providers.yaml } #对齐rules中的空格 sed -i 's/^ *-/ -/g' "$TMPDIR"/rules.yaml @@ -679,7 +680,7 @@ EOF "tag": "geosite-cn", "type": "local", "format": "binary", - "path": "geosite-cn.srs" + "path": "./ruleset/geosite-cn.srs" } ] } @@ -729,7 +730,7 @@ EOF { "clash_mode": "Global", "server": "$global_dns", "strategy": "$strategy", "disable_cache": true }, { "clash_mode": "Direct", "server": "dns_direct", "strategy": "$strategy", "disable_cache": true }, - { "domain_suffix": ["services.googleapis.cn"], "server": "dns_fakeip" }, + { "domain_suffix": ["services.googleapis.cn"], "server": "dns_fakeip", "strategy": "$strategy", "disable_cache": true, "rewrite_ttl": 1 }, $fake_ip_filter_domain $fake_ip_filter_suffix $fake_ip_filter_regex @@ -759,8 +760,8 @@ EOF { "inbound": [ "dns-in" ], "action": "hijack-dns" }, $sniffer_set { "protocol": "dns", "action": "hijack-dns" }, - { "clash_mode": [ "Direct" ], "outbound": "DIRECT" }, - { "clash_mode": [ "Global" ], "outbound": "GLOBAL" } + { "clash_mode": "Direct" , "outbound": "DIRECT" }, + { "clash_mode": "Global" , "outbound": "GLOBAL" } ] } } @@ -906,9 +907,9 @@ EOF sed -i 's/"auto_detect_interface": true/"auto_detect_interface": false/g' "$TMPDIR"/jsons/route.json #跳过本地tls证书验证 if [ -z "$skip_cert" -o "$skip_cert" = "已开启" ]; then - sed -i 's/"insecure": false/"insecure": true/' "$TMPDIR"/jsons/outbounds.json "$TMPDIR"/jsons/providers.json + sed -i 's/"insecure": false/"insecure": true/' "$TMPDIR"/jsons/outbounds.json "$TMPDIR"/jsons/providers.json 2>/dev/null else - sed -i 's/"insecure": true/"insecure": false/' "$TMPDIR"/jsons/outbounds.json "$TMPDIR"/jsons/providers.json + sed -i 's/"insecure": true/"insecure": false/' "$TMPDIR"/jsons/outbounds.json "$TMPDIR"/jsons/providers.json 2>/dev/null fi #判断可用并修饰outbounds&providers&route.json结尾 for file in outbounds providers route; do @@ -1826,13 +1827,9 @@ singbox_check() { #singbox启动前检查 [ "$crashcore" != "singboxr" ] && [ -n "$(cat "$CRASHDIR"/jsons/*.json | grep -oE '"shadowsocksr"|"providers"')" ] && core_exchange singboxr 'singboxr内核专属功能' core_check #预下载geoip-cn.srs数据库 - [ -n "$(cat "$CRASHDIR"/jsons/*.json | grep -oEi '"rule_set" *: *"geoip-cn"')" ] && ckgeo geoip-cn.srs srs_geoip_cn.srs + [ -n "$(cat "$CRASHDIR"/jsons/*.json | grep -oEi '"rule_set" *: *"geoip-cn"')" ] && ckgeo ruleset/geoip-cn.srs srs_geoip_cn.srs #预下载geosite-cn.srs数据库 - [ -n "$(cat "$CRASHDIR"/jsons/*.json | grep -oEi '"rule_set" *: *"geosite-cn"')" -o "$dns_mod" = "mix" ] && ckgeo geosite-cn.srs srs_geosite_cn.srs - #预下载GeoIP数据库 - [ -n "$(cat "$CRASHDIR"/jsons/*.json | grep -oEi '"geoip":')" ] && ckgeo geoip.db geoip_cn.db - #预下载GeoSite数据库 - [ -n "$(cat "$CRASHDIR"/jsons/*.json | grep -oEi '"geosite":')" ] && ckgeo geosite.db geosite_cn.db + [ -n "$(cat "$CRASHDIR"/jsons/*.json | grep -oEi '"rule_set" *: *"geosite-cn"')" -o "$dns_mod" = "mix" ] && ckgeo ruleset/geosite-cn.srs srs_geosite_cn.srs return 0 } network_check() { #检查是否联网 diff --git a/scripts/webget.sh b/scripts/webget.sh index 55feb20..6526517 100644 --- a/scripts/webget.sh +++ b/scripts/webget.sh @@ -1281,15 +1281,15 @@ switch_core(){ #clash与singbox内核切换 read -p "是否保留相关数据库文件?(1/0) > " res [ "$res" = '0' ] && { [ "$core_old" = "clash" ] && { - geodate='Country.mmdb GeoSite.dat geosite-cn.mrs' + geodate='Country.mmdb GeoSite.dat ruleset/*.mrs ruleset/*.yaml ruleset/*.yml' geodate_v='Country_v cn_mini_v geosite_v mrs_geosite_cn_v' } [ "$core_old" = "singbox" ] && { - geodate='geoip.db geosite.db geoip-cn.srs geosite-cn.srs' + geodate='geoip.db geosite.db ruleset/*.srs ruleset/*.json' geodate_v='geoip_cn_v geosite_cn_v srs_geoip_cn_v srs_geosite_cn_v' } for text in ${geodate} ;do - rm -rf ${CRASHDIR}/"$text" + rm -rf ${CRASHDIR}/${text} done for text in ${geodate_v} ;do setconfig "$text" @@ -1553,13 +1553,17 @@ getgeo(){ #下载Geo文件 #生成链接 echo ----------------------------------------------- echo 正在从服务器获取数据库文件………… - ${CRASHDIR}/start.sh get_bin ${TMPDIR}/$geoname bin/geodata/$geotype + ${CRASHDIR}/start.sh get_bin ${TMPDIR}/${geoname} bin/geodata/$geotype if [ "$?" = "1" ];then echo ----------------------------------------------- echo -e "\033[31m文件下载失败!\033[0m" error_down else - mv -f ${TMPDIR}/$geoname ${BINDIR}/$geoname + echo "$geoname" | grep -Eq '.mrs|.srs' && { + geofile='ruleset/' + [ ! -d "$BINDIR"/ruleset ] && mkdir -p "$BINDIR"/ruleset + } + mv -f ${TMPDIR}/${geoname} ${BINDIR}/${geofile}${geoname} echo ----------------------------------------------- echo -e "\033[32m$geotype数据库文件下载成功!\033[0m" #全球版GeoIP和精简版CN-IP数据库不共存 @@ -1582,7 +1586,11 @@ setcustgeo(){ #下载自定义数据库文件 echo -e "\033[31m文件下载失败!\033[0m" error_down else - mv -f ${TMPDIR}/$geoname ${BINDIR}/$geoname + echo "$geoname" | grep -Eq '.mrs|.srs' && { + geofile='ruleset/' + [ ! -d "$BINDIR"/ruleset ] && mkdir -p "$BINDIR"/ruleset + } + mv -f ${TMPDIR}/${geoname} ${BINDIR}/${geofile}${geoname} echo ----------------------------------------------- echo -e "\033[32m$geotype数据库文件下载成功!\033[0m" fi @@ -1594,7 +1602,7 @@ setcustgeo(){ #下载自定义数据库文件 echo -e "\033[32m正在查找可更新的数据库文件!\033[0m" ${CRASHDIR}/start.sh webget ${TMPDIR}/github_api https://api.github.com/repos/${project}/releases/${api_url} release_tag=$(cat ${TMPDIR}/github_api | grep '"tag_name":' | awk -F '"' '{print $4}') - cat ${TMPDIR}/github_api | grep "browser_download_url" | grep -oE 'releases/download.*' | grep -oiE 'geosite.*\.dat"$|country.*\.mmdb"$|geosite.*\.db"$|geoip.*\.db"$' | sed 's/"//' > ${TMPDIR}/geo.list + cat ${TMPDIR}/github_api | grep "browser_download_url" | grep -oE 'releases/download.*' | grep -oiE 'geosite.*\.dat"$|country.*\.mmdb"$|.*.mrs|.*.srs' | sed 's|.*/||' | sed 's/"//' > ${TMPDIR}/geo.list rm -rf ${TMPDIR}/github_api } if [ -s ${TMPDIR}/geo.list ];then @@ -1612,8 +1620,7 @@ setcustgeo(){ #下载自定义数据库文件 geotype=$(sed -n "$num"p ${TMPDIR}/geo.list) [ -n "$(echo $geotype | grep -oiE 'GeoSite.*dat')" ] && geoname=GeoSite.dat [ -n "$(echo $geotype | grep -oiE 'Country.*mmdb')" ] && geoname=Country.mmdb - [ -n "$(echo $geotype | grep -oiE 'geosite.*db')" ] && geoname=geosite.db - [ -n "$(echo $geotype | grep -oiE 'geoip.*db')" ] && geoname=geoip.db + [ -n "$(echo $geotype | grep -oiE '.*(.srs|.mrs)')" ] && geoname=$geotype custgeolink=https://github.com/${project}/releases/download/${release_tag}/${geotype} getcustgeo checkcustgeo @@ -1638,10 +1645,10 @@ setcustgeo(){ #下载自定义数据库文件 echo -e "\033[33m如遇到网络错误请先启动ShellCrash服务!\033[0m" echo -e "\033[0m请选择需要更新的数据库项目来源:\033[0m" echo ----------------------------------------------- - echo -e " 1 \033[36;4mhttps://github.com/MetaCubeX/meta-rules-dat\033[0m (Clash及SingBox)" - echo -e " 2 \033[36;4mhttps://github.com/DustinWin/ruleset_geodata\033[0m (仅限Clash)" - echo -e " 3 \033[36;4mhttps://github.com/DustinWin/ruleset_geodata\033[0m (仅限SingBox)" - echo -e " 4 \033[36;4mhttps://github.com/lyc8503/sing-box-rules\033[0m (仅限SingBox)" + echo -e " 1 \033[36;4mhttps://github.com/MetaCubeX/meta-rules-dat\033[0m (仅限Clash/Mihomo)" + echo -e " 2 \033[36;4mhttps://github.com/DustinWin/ruleset_geodata\033[0m (仅限Clash/Mihomo)" + echo -e " 3 \033[36;4mhttps://github.com/DustinWin/ruleset_geodata\033[0m (仅限SingBox-srs)" + echo -e " 4 \033[36;4mhttps://github.com/DustinWin/ruleset_geodata\033[0m (仅限Mihomo-mrs)" echo -e " 5 \033[36;4mhttps://github.com/Loyalsoldier/geoip\033[0m (仅限Clash-GeoIP)" echo ----------------------------------------------- echo -e " 9 \033[33m自定义数据库链接 \033[0m" @@ -1664,13 +1671,13 @@ setcustgeo(){ #下载自定义数据库文件 ;; 3) project=DustinWin/ruleset_geodata - api_tag=sing-box-geodata + api_tag=sing-box-ruleset checkcustgeo setcustgeo ;; 4) - project=lyc8503/sing-box-rules - api_tag=latest + project=DustinWin/ruleset_geodata + api_tag=mihomo-ruleset checkcustgeo setcustgeo ;; @@ -1710,10 +1717,8 @@ setgeo(){ #数据库选择菜单 echo -e " 5 geosite-cn.mrs数据库(DNS分流,约0.5mb) \033[33m$mrs_geosite_cn_v\033[0m" } [ -n "$(echo "$crashcore" | grep sing)" ] && { - echo -e " 6 SingBox精简版GeoIP_cn数据库(约0.3mb) \033[33m$geoip_cn_v\033[0m" - echo -e " 7 SingBox精简版GeoSite数据库(约0.8mb) \033[33m$geosite_cn_v\033[0m" - echo -e " 8 geoip-cn.srs数据库(约0.1mb) \033[33m$srs_geoip_cn_v\033[0m" - echo -e " 9 geosite-cn.srs数据库(DNS分流,约0.5mb) \033[33m$srs_geosite_cn_v\033[0m" + echo -e " 6 geoip-cn.srs数据库(约0.1mb) \033[33m$srs_geoip_cn_v\033[0m" + echo -e " 7 geosite-cn.srs数据库(DNS分流,约0.5mb) \033[33m$srs_geosite_cn_v\033[0m" } echo ----------------------------------------------- echo -e " a \033[32m自定义数据库文件\033[0m" @@ -1755,24 +1760,12 @@ setgeo(){ #数据库选择菜单 setgeo ;; 6) - geotype=geoip_cn.db - geoname=geoip.db - getgeo - setgeo - ;; - 7) - geotype=geosite_cn.db - geoname=geosite.db - getgeo - setgeo - ;; - 8) geotype=srs_geoip_cn.srs geoname=geoip-cn.srs getgeo setgeo ;; - 9) + 7) geotype=srs_geosite_cn.srs geoname=geosite-cn.srs getgeo @@ -1789,13 +1782,13 @@ setgeo(){ #数据库选择菜单 echo ----------------------------------------------- read -p "确认清理?[1/0] > " res [ "$res" = '1' ] && { - for file in cn_ip.txt cn_ipv6.txt Country.mmdb GeoSite.dat geosite_cn.mrs geoip.db geosite.db geoip-cn.srs geosite-cn.srs;do + for file in cn_ip.txt cn_ipv6.txt Country.mmdb GeoSite.dat geoip.db geosite.db;do rm -rf $CRASHDIR/$file 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 mrs_geosite_cn_v srs_geoip_cn_v srs_geosite_cn_v ;do setconfig $var done - rm -rf $CRASHDIR/*.srs + rm -rf $CRASHDIR/ruleset/* echo -e "\033[33m所有数据库文件均已清理!\033[0m" sleep 1 }