From 5ec99ebcff39b63d5e408c615126e6eb85ed48ff Mon Sep 17 00:00:00 2001 From: juewuy Date: Sat, 3 Feb 2024 18:55:45 +0800 Subject: [PATCH] =?UTF-8?q?~=E9=87=8D=E5=86=99Geo=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E6=A3=80=E6=B5=8B=E9=80=BB=E8=BE=91=20~=E4=BC=98=E5=8C=96singb?= =?UTF-8?q?ox=E5=86=85=E6=A0=B8=E6=9C=AC=E6=9C=BAhosts=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=20~=E4=BF=AE=E5=A4=8D=E9=83=A8=E5=88=86grep=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=8A=A5=E9=94=99=20~=E4=BC=98=E5=8C=96tar.gz=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=86=85=E6=A0=B8=E8=A7=A3=E5=8E=8B=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/getdate.sh | 3 +- scripts/menu.sh | 4 +- scripts/start.sh | 119 ++++++++++++--------------------------------- scripts/task.sh | 4 +- 4 files changed, 35 insertions(+), 95 deletions(-) diff --git a/scripts/getdate.sh b/scripts/getdate.sh index af29f3f..9bdc3dd 100644 --- a/scripts/getdate.sh +++ b/scripts/getdate.sh @@ -902,8 +902,7 @@ getcore(){ #下载内核文件 [ -f ${TMPDIR}/core_new.tar.gz ] && { mkdir -p ${TMPDIR}/core_tmp tar -zxf "${TMPDIR}/core_new.tar.gz" -C ${TMPDIR}/core_tmp/ &>/dev/null || tar -zxf "${TMPDIR}/core_new.tar.gz" --no-same-owner -C ${TMPDIR}/core_tmp/ - files=$(find ${TMPDIR}/core_tmp 2>/dev/null) - for file in $files ;do + for file in $(find ${TMPDIR}/core_tmp 2>/dev/null);do [ -s $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new done rm -rf ${TMPDIR}/core_tmp diff --git a/scripts/menu.sh b/scripts/menu.sh index 574f259..808a28b 100644 --- a/scripts/menu.sh +++ b/scripts/menu.sh @@ -102,7 +102,7 @@ ckstatus(){ #检查执行权限 [ ! -x ${CRASHDIR}/start.sh ] && chmod +x ${CRASHDIR}/start.sh #检查/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 '^clash$|^clash-linux.*|^mihomo.*|^sing.*box|^clash.meta.*'` ; do file=/tmp/$file chmod +x $file echo -e "发现可用的内核文件: \033[36m$file\033[0m " @@ -130,7 +130,7 @@ ckstatus(){ echo ----------------------------------------------- done #检查/tmp配置文件 - for file in `ls -F /tmp | grep -v [/\$] | grep -v '\ ' | grep -iE '.yaml$|.yml$|config.json$'` ; do + for file in `ls -F /tmp | grep -v [/\$] | grep -v ' ' | grep -iE '.yaml$|.yml$|config.json$'` ; do file=/tmp/$file echo -e "发现内核配置文件: \033[36m$file\033[0m " read -p "是否加载为$crashcore的配置文件?(1/0) > " res diff --git a/scripts/start.sh b/scripts/start.sh index 0b87755..2dee180 100644 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -51,8 +51,19 @@ setconfig(){ #脚本配置工具 ckcmd(){ #检查命令是否存在 command -v sh &>/dev/null && command -v $1 &>/dev/null || type $1 &>/dev/null } -finds(){ #find命令兼容 - [ -n "$(find --help 2>&1|grep size)" ] && find $1 $2 $3 $4 $5 || find $1 +ckgeo(){ #查找及下载Geo数据文件 + [ -n "$(find --help 2>&1|grep 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 + mv ${CRASHDIR}/${1} ${BINDIR}/${1} #小闪存模式移动文件 + else + logger "未找到${1}文件,正在下载!" 33 + get_bin ${BINDIR}/${1} bin/geodata/${2} + [ "$?" = "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 + } } compare(){ #对比文件 if [ ! -f $1 -o ! -f $2 ];then @@ -549,9 +560,13 @@ EOF cat > ${TMPDIR}/jsons/add_hosts.json </dev/null)" ] && { - if [ -f ${CRASHDIR}/cn_ip.txt ];then - mv ${CRASHDIR}/cn_ip.txt ${BINDIR}/cn_ip.txt - else - logger "未找到cn_ip列表,正在下载!" 33 - get_bin ${BINDIR}/cn_ip.txt "bin/geodata/china_ip_list.txt" - [ "$?" = "1" ] && rm -rf ${BINDIR}/cn_ip.txt && logger "列表下载失败!" 31 - fi - } + ckgeo cn_ip.txt china_ip_list.txt [ -f ${BINDIR}/cn_ip.txt -a -z "$(echo $redir_mod|grep 'Nft')" ] && { # see https://raw.githubusercontent.com/Hackl0us/GeoIP2-CN/release/CN-ip-cidr.txt echo "create cn_ip hash:net family inet hashsize 10240 maxelem 10240" > ${TMPDIR}/cn_$USER.ipset @@ -823,15 +827,7 @@ cn_ip_route(){ #CN-IP绕过 } } cn_ipv6_route(){ #CN-IPV6绕过 - [ -z "$(finds ${BINDIR}/cn_ipv6.txt -size +10 2>/dev/null)" ] && { - if [ -f ${CRASHDIR}/cn_ipv6.txt ];then - mv ${CRASHDIR}/cn_ipv6.txt ${BINDIR}/cn_ipv6.txt - else - logger "未找到cn_ipv6列表,正在下载!" 33 - get_bin ${BINDIR}/cn_ipv6.txt "bin/geodata/china_ipv6_list.txt" - [ "$?" = "1" ] && rm -rf ${BINDIR}/cn_ipv6.txt && logger "列表下载失败!" 31 - fi - } + ckgeo cn_ipv6.txt china_ipv6_list.txt [ -f ${BINDIR}/cn_ipv6.txt -a -z "$(echo $redir_mod|grep 'Nft')" ] && { #ipv6 #see https://ispip.clang.cn/all_cn_ipv6.txt @@ -1499,8 +1495,8 @@ core_check(){ #校验内核 mkdir -p ${TMPDIR}/core_tmp tar -zxvf "${TMPDIR}/CrashCore.tar.gz" -C ${TMPDIR}/core_tmp/ &>/dev/null || tar -zxvf "${TMPDIR}/CrashCore.tar.gz" --no-same-owner -C ${TMPDIR}/core_tmp/ - for file in "$(finds ${TMPDIR}/core_tmp -type f -size +4096)" ;do - mv -f $file ${TMPDIR}/core_new + for file in $(find ${TMPDIR}/core_tmp 2>/dev/null);do + [ -s $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new done rm -rf ${TMPDIR}/core_tmp chmod +x ${TMPDIR}/core_new @@ -1554,27 +1550,9 @@ clash_check(){ #clash启动前检查 fi core_check #预下载GeoIP数据库 - if [ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geoip')" ] && [ -z "$(finds ${BINDIR}/Country.mmdb -size +10 2>/dev/null)" ];then - if [ -f ${CRASHDIR}/Country.mmdb ];then - mv -f ${CRASHDIR}/Country.mmdb ${BINDIR}/Country.mmdb - else - logger "未找到Country.mmdb数据库,正在下载!" 33 - get_bin ${BINDIR}/Country.mmdb bin/geodata/cn_mini.mmdb - [ "$?" = "1" ] && rm -rf ${BINDIR}/Country.mmdb && logger "数据库下载失败,已退出,请前往更新界面尝试手动下载!" 31 && exit 1 - setconfig cn_mini_v $(date +"%Y%m%d") - fi - fi + [ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geoip')" ] && ckgeo Country.mmdb cn_mini.mmdb #预下载GeoSite数据库 - if [ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geosite')" ] && [ -z "$(finds ${BINDIR}/GeoSite.dat -size +10 2>/dev/null)" ];then - if [ -f ${CRASHDIR}/GeoSite.dat ];then - mv -f ${CRASHDIR}/GeoSite.dat ${BINDIR}/GeoSite.dat - else - logger "未找到GeoSite.dat数据库,正在下载!" 33 - get_bin ${BINDIR}/GeoSite.dat bin/geodata/geosite.dat - [ "$?" = "1" ] && rm -rf ${BINDIR}/GeoSite.dat && logger "数据库下载失败,已退出,请前往更新界面尝试手动下载!" 31 && exit 1 - setconfig geosite_v $(date +"%Y%m%d") - fi - fi + [ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geosite')" ] && ckgeo GeoSite.dat GeoSite.dat return 0 } singbox_check(){ #singbox启动前检查 @@ -1589,50 +1567,13 @@ singbox_check(){ #singbox启动前检查 fi core_check #预下载geoip-cn.srs数据库 - if [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"rule_set\": \"geoip-cn\"')" ] && [ -z "$(finds ${BINDIR}/geoip-cn.srs -size +10 2>/dev/null)" ];then - if [ -f ${CRASHDIR}/geoip-cn.srs ];then - mv -f ${CRASHDIR}/geoip-cn.srs ${BINDIR}/geoip-cn.srs - else - logger "未找到geoip-cn.srs数据库,正在下载!" 33 - get_bin ${BINDIR}/geoip-cn.srs bin/geodata/srs_geoip_cn.srs - [ "$?" = "1" ] && rm -rf ${BINDIR}/geoip-cn.srs && logger "数据库下载失败,已退出,请前往更新界面尝试手动下载!" 31 && exit 1 - setconfig srs_geoip_cn_v $(date +"%Y%m%d") - fi - fi + [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"rule_set\": \"geoip-cn\"')" ] && ckgeo geoip-cn.srs srs_geoip_cn.srs #预下载geosite-cn.srs数据库 - if [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"rule_set\": \"geosite-cn\"')" -o "$dns_mod" = "mix" ] && \ - [ -z "$(finds ${BINDIR}/geosite-cn.srs -size +10 2>/dev/null)" ];then - if [ -f ${CRASHDIR}/geosite-cn.srs ];then - mv -f ${CRASHDIR}/geosite-cn.srs ${BINDIR}/geosite-cn.srs - else - logger "未找到geosite-cn.srs数据库,正在下载!" 33 - get_bin ${BINDIR}/geosite-cn.srs bin/geodata/srs_geosite_cn.srs - [ "$?" = "1" ] && rm -rf ${BINDIR}/geosite-cn.srs && logger "数据库下载失败,已退出,请前往更新界面尝试手动下载!" 31 && exit 1 - setconfig srs_geosite_cn_v $(date +"%Y%m%d") - fi - fi + [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"rule_set\": \"geosite-cn\"')" -o "$dns_mod" = "mix" ] && ckgeo geosite-cn.srs srs_geosite_cn.srs #预下载GeoIP数据库 - if [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"geoip\":')" ] && [ -z "$(finds ${BINDIR}/geoip.db -size +10 2>/dev/null)" ];then - if [ -f ${CRASHDIR}/geoip.db ];then - mv -f ${CRASHDIR}/geoip.db ${BINDIR}/geoip.db - else - logger "未找到geoip.db数据库,正在下载!" 33 - get_bin ${BINDIR}/geoip.db bin/geodata/geoip_cn.db - [ "$?" = "1" ] && rm -rf ${BINDIR}/geoip.db && logger "数据库下载失败,已退出,请前往更新界面尝试手动下载!" 31 && exit 1 - setconfig geoip_cn_v $(date +"%Y%m%d") - fi - fi + [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"geoip\":')" ] && ckgeo geoip.db geoip_cn.db #预下载GeoSite数据库 - if [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"geosite\":')" ] && [ -z "$(finds ${BINDIR}/geosite.db -size +10 2>/dev/null)" ];then - if [ -f ${CRASHDIR}/geosite.db ];then - mv -f ${CRASHDIR}/geosite.db ${BINDIR}/geosite.db - else - logger "未找到geosite.db数据库,正在下载!" 33 - get_bin ${BINDIR}/geosite.db bin/geodata/geosite_cn.db - [ "$?" = "1" ] && rm -rf ${BINDIR}/geosite.db && logger "数据库下载失败,已退出,请前往更新界面尝试手动下载!" 31 && exit 1 - setconfig geosite_cn_v $(date +"%Y%m%d") - fi - fi + [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"geosite\":')" ] && ckgeo geosite.db geosite_cn.db return 0 } bfstart(){ #启动前 @@ -1772,7 +1713,7 @@ afstart(){ #启动后 } start_error(){ #启动报错 if [ "$start_old" != "已开启" ] && ckcmd journalctl;then - ournalctl -xeu shellcrash > $TMPDIR/core_test.log + journalctl -u shellcrash > $TMPDIR/core_test.log else ${COMMAND} &>${TMPDIR}/core_test.log & sleep 2 ; kill $! &>/dev/null diff --git a/scripts/task.sh b/scripts/task.sh index 475ae43..aa5ab41 100644 --- a/scripts/task.sh +++ b/scripts/task.sh @@ -50,8 +50,8 @@ update_core(){ #自动更新内核 [ -f ${TMPDIR}/core_new.tar.gz ] && { mkdir -p ${TMPDIR}/core_new tar -zxf "${TMPDIR}/core_new.tar.gz" -C ${TMPDIR}/core_new/ &>/dev/null || tar -zxf "${TMPDIR}/core_new.tar.gz" --no-same-owner -C ${TMPDIR}/core_new/ - for file in "$(ls -1 ${TMPDIR}/core_new | grep -iE 'CrashCore|sing-box|clash|mihomo|meta')" ;do - mv -f ${TMPDIR}/core_new/$file ${TMPDIR}/core_new + for file in $(find ${TMPDIR}/core_tmp 2>/dev/null);do + [ -s $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new done rm -rf ${TMPDIR}/core_new }