~重写Geo文件检测逻辑
~优化singbox内核本机hosts功能 ~修复部分grep相关报错 ~优化tar.gz格式内核解压流程
This commit is contained in:
@@ -902,8 +902,7 @@ getcore(){ #下载内核文件
|
|||||||
[ -f ${TMPDIR}/core_new.tar.gz ] && {
|
[ -f ${TMPDIR}/core_new.tar.gz ] && {
|
||||||
mkdir -p ${TMPDIR}/core_tmp
|
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/
|
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 $(find ${TMPDIR}/core_tmp 2>/dev/null);do
|
||||||
for file in $files ;do
|
|
||||||
[ -s $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new
|
[ -s $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new
|
||||||
done
|
done
|
||||||
rm -rf ${TMPDIR}/core_tmp
|
rm -rf ${TMPDIR}/core_tmp
|
||||||
|
|||||||
@@ -102,7 +102,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 '^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 "
|
||||||
@@ -130,7 +130,7 @@ ckstatus(){
|
|||||||
echo -----------------------------------------------
|
echo -----------------------------------------------
|
||||||
done
|
done
|
||||||
#检查/tmp配置文件
|
#检查/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
|
file=/tmp/$file
|
||||||
echo -e "发现内核配置文件: \033[36m$file\033[0m "
|
echo -e "发现内核配置文件: \033[36m$file\033[0m "
|
||||||
read -p "是否加载为$crashcore的配置文件?(1/0) > " res
|
read -p "是否加载为$crashcore的配置文件?(1/0) > " res
|
||||||
|
|||||||
119
scripts/start.sh
119
scripts/start.sh
@@ -51,8 +51,19 @@ setconfig(){ #脚本配置工具
|
|||||||
ckcmd(){ #检查命令是否存在
|
ckcmd(){ #检查命令是否存在
|
||||||
command -v sh &>/dev/null && command -v $1 &>/dev/null || type $1 &>/dev/null
|
command -v sh &>/dev/null && command -v $1 &>/dev/null || type $1 &>/dev/null
|
||||||
}
|
}
|
||||||
finds(){ #find命令兼容
|
ckgeo(){ #查找及下载Geo数据文件
|
||||||
[ -n "$(find --help 2>&1|grep size)" ] && find $1 $2 $3 $4 $5 || find $1
|
[ -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(){ #对比文件
|
compare(){ #对比文件
|
||||||
if [ ! -f $1 -o ! -f $2 ];then
|
if [ ! -f $1 -o ! -f $2 ];then
|
||||||
@@ -549,9 +560,13 @@ EOF
|
|||||||
cat > ${TMPDIR}/jsons/add_hosts.json <<EOF
|
cat > ${TMPDIR}/jsons/add_hosts.json <<EOF
|
||||||
{
|
{
|
||||||
"dns": {
|
"dns": {
|
||||||
|
"servers": [{
|
||||||
|
"tag": "hosts_local",
|
||||||
|
"address": "local"
|
||||||
|
}],
|
||||||
"rules": [{
|
"rules": [{
|
||||||
"domain": [$hosts_domain],
|
"domain": [$hosts_domain],
|
||||||
"server": "local"
|
"server": "hosts_local"
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -607,9 +622,6 @@ EOF
|
|||||||
"tag": "dns_resolver",
|
"tag": "dns_resolver",
|
||||||
"address": "223.5.5.5",
|
"address": "223.5.5.5",
|
||||||
"detour": "DIRECT"
|
"detour": "DIRECT"
|
||||||
}, {
|
|
||||||
"tag": "local",
|
|
||||||
"address": "local"
|
|
||||||
}, {
|
}, {
|
||||||
"tag": "block",
|
"tag": "block",
|
||||||
"address": "rcode://success"
|
"address": "rcode://success"
|
||||||
@@ -804,15 +816,7 @@ EOF
|
|||||||
|
|
||||||
#设置路由规则
|
#设置路由规则
|
||||||
cn_ip_route(){ #CN-IP绕过
|
cn_ip_route(){ #CN-IP绕过
|
||||||
[ -z "$(finds ${BINDIR}/cn_ip.txt -size +10 2>/dev/null)" ] && {
|
ckgeo cn_ip.txt china_ip_list.txt
|
||||||
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
|
|
||||||
}
|
|
||||||
[ -f ${BINDIR}/cn_ip.txt -a -z "$(echo $redir_mod|grep 'Nft')" ] && {
|
[ -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
|
# 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
|
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绕过
|
cn_ipv6_route(){ #CN-IPV6绕过
|
||||||
[ -z "$(finds ${BINDIR}/cn_ipv6.txt -size +10 2>/dev/null)" ] && {
|
ckgeo cn_ipv6.txt china_ipv6_list.txt
|
||||||
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
|
|
||||||
}
|
|
||||||
[ -f ${BINDIR}/cn_ipv6.txt -a -z "$(echo $redir_mod|grep 'Nft')" ] && {
|
[ -f ${BINDIR}/cn_ipv6.txt -a -z "$(echo $redir_mod|grep 'Nft')" ] && {
|
||||||
#ipv6
|
#ipv6
|
||||||
#see https://ispip.clang.cn/all_cn_ipv6.txt
|
#see https://ispip.clang.cn/all_cn_ipv6.txt
|
||||||
@@ -1499,8 +1495,8 @@ core_check(){
|
|||||||
#校验内核
|
#校验内核
|
||||||
mkdir -p ${TMPDIR}/core_tmp
|
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/
|
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
|
for file in $(find ${TMPDIR}/core_tmp 2>/dev/null);do
|
||||||
mv -f $file ${TMPDIR}/core_new
|
[ -s $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new
|
||||||
done
|
done
|
||||||
rm -rf ${TMPDIR}/core_tmp
|
rm -rf ${TMPDIR}/core_tmp
|
||||||
chmod +x ${TMPDIR}/core_new
|
chmod +x ${TMPDIR}/core_new
|
||||||
@@ -1554,27 +1550,9 @@ clash_check(){ #clash启动前检查
|
|||||||
fi
|
fi
|
||||||
core_check
|
core_check
|
||||||
#预下载GeoIP数据库
|
#预下载GeoIP数据库
|
||||||
if [ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geoip')" ] && [ -z "$(finds ${BINDIR}/Country.mmdb -size +10 2>/dev/null)" ];then
|
[ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geoip')" ] && ckgeo Country.mmdb cn_mini.mmdb
|
||||||
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
|
|
||||||
#预下载GeoSite数据库
|
#预下载GeoSite数据库
|
||||||
if [ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geosite')" ] && [ -z "$(finds ${BINDIR}/GeoSite.dat -size +10 2>/dev/null)" ];then
|
[ -n "$(cat ${CRASHDIR}/yamls/*.yaml | grep -oEi 'geosite')" ] && ckgeo GeoSite.dat GeoSite.dat
|
||||||
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
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
singbox_check(){ #singbox启动前检查
|
singbox_check(){ #singbox启动前检查
|
||||||
@@ -1589,50 +1567,13 @@ singbox_check(){ #singbox启动前检查
|
|||||||
fi
|
fi
|
||||||
core_check
|
core_check
|
||||||
#预下载geoip-cn.srs数据库
|
#预下载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
|
[ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"rule_set\": \"geoip-cn\"')" ] && ckgeo geoip-cn.srs srs_geoip_cn.srs
|
||||||
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
|
|
||||||
#预下载geosite-cn.srs数据库
|
#预下载geosite-cn.srs数据库
|
||||||
if [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"rule_set\": \"geosite-cn\"')" -o "$dns_mod" = "mix" ] && \
|
[ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"rule_set\": \"geosite-cn\"')" -o "$dns_mod" = "mix" ] && ckgeo geosite-cn.srs srs_geosite_cn.srs
|
||||||
[ -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
|
|
||||||
#预下载GeoIP数据库
|
#预下载GeoIP数据库
|
||||||
if [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"geoip\":')" ] && [ -z "$(finds ${BINDIR}/geoip.db -size +10 2>/dev/null)" ];then
|
[ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"geoip\":')" ] && ckgeo geoip.db geoip_cn.db
|
||||||
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
|
|
||||||
#预下载GeoSite数据库
|
#预下载GeoSite数据库
|
||||||
if [ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"geosite\":')" ] && [ -z "$(finds ${BINDIR}/geosite.db -size +10 2>/dev/null)" ];then
|
[ -n "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"geosite\":')" ] && ckgeo geosite.db geosite_cn.db
|
||||||
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
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
bfstart(){ #启动前
|
bfstart(){ #启动前
|
||||||
@@ -1772,7 +1713,7 @@ afstart(){ #启动后
|
|||||||
}
|
}
|
||||||
start_error(){ #启动报错
|
start_error(){ #启动报错
|
||||||
if [ "$start_old" != "已开启" ] && ckcmd journalctl;then
|
if [ "$start_old" != "已开启" ] && ckcmd journalctl;then
|
||||||
ournalctl -xeu shellcrash > $TMPDIR/core_test.log
|
journalctl -u shellcrash > $TMPDIR/core_test.log
|
||||||
else
|
else
|
||||||
${COMMAND} &>${TMPDIR}/core_test.log &
|
${COMMAND} &>${TMPDIR}/core_test.log &
|
||||||
sleep 2 ; kill $! &>/dev/null
|
sleep 2 ; kill $! &>/dev/null
|
||||||
|
|||||||
@@ -50,8 +50,8 @@ update_core(){ #自动更新内核
|
|||||||
[ -f ${TMPDIR}/core_new.tar.gz ] && {
|
[ -f ${TMPDIR}/core_new.tar.gz ] && {
|
||||||
mkdir -p ${TMPDIR}/core_new
|
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/
|
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
|
for file in $(find ${TMPDIR}/core_tmp 2>/dev/null);do
|
||||||
mv -f ${TMPDIR}/core_new/$file ${TMPDIR}/core_new
|
[ -s $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new
|
||||||
done
|
done
|
||||||
rm -rf ${TMPDIR}/core_new
|
rm -rf ${TMPDIR}/core_new
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user