~重写tar解压相关逻辑,修复tar相关报错

~修复signbox内核的dns和ntp相关问题
This commit is contained in:
juewuy
2024-02-04 09:03:39 +08:00
parent 91eaea5daf
commit 5ef5717a12
4 changed files with 38 additions and 27 deletions

View File

@@ -767,7 +767,7 @@ gettar(){
echo ----------------------------------------------- echo -----------------------------------------------
echo 开始解压文件! echo 开始解压文件!
mkdir -p ${CRASHDIR} > /dev/null mkdir -p ${CRASHDIR} > /dev/null
tar -zxf "${TMPDIR}/update.tar.gz" -C ${CRASHDIR}/ 2>/dev/null || tar -zxf "${TMPDIR}/update.tar.gz" --no-same-owner -C ${CRASHDIR}/ tar -zxf "${TMPDIR}/update.tar.gz" ${tar_para} -C ${CRASHDIR}/
if [ $? -ne 0 ];then if [ $? -ne 0 ];then
echo -e "\033[33m文件解压失败\033[0m" echo -e "\033[33m文件解压失败\033[0m"
error_down error_down
@@ -901,7 +901,7 @@ getcore(){ #下载内核文件
[ -n "$(pidof CrashCore)" ] && ${CRASHDIR}/start.sh stop #停止内核服务防止内存不足 [ -n "$(pidof CrashCore)" ] && ${CRASHDIR}/start.sh stop #停止内核服务防止内存不足
[ -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" ${tar_para} -C ${TMPDIR}/core_tmp/
for file in $(find ${TMPDIR}/core_tmp 2>/dev/null);do for file in $(find ${TMPDIR}/core_tmp 2>/dev/null);do
[ -f $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new [ -f $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new
done done
@@ -927,7 +927,7 @@ getcore(){ #下载内核文件
if [ -f ${TMPDIR}/core_new.tar.gz ];then if [ -f ${TMPDIR}/core_new.tar.gz ];then
mv -f ${TMPDIR}/core_new.tar.gz ${BINDIR}/CrashCore.tar.gz mv -f ${TMPDIR}/core_new.tar.gz ${BINDIR}/CrashCore.tar.gz
else else
tar -zcf ${BINDIR}/CrashCore.tar.gz -C ${TMPDIR} CrashCore tar -zcf ${BINDIR}/CrashCore.tar.gz ${tar_para} -C ${TMPDIR} CrashCore
fi fi
setconfig crashcore $crashcore setconfig crashcore $crashcore
setconfig core_v $core_v setconfig core_v $core_v
@@ -1397,11 +1397,8 @@ getdb(){
else else
echo -e "\033[33m下载成功正在解压文件\033[0m" echo -e "\033[33m下载成功正在解压文件\033[0m"
mkdir -p $dbdir > /dev/null mkdir -p $dbdir > /dev/null
tar -zxf "${TMPDIR}/clashdb.tar.gz" -C $dbdir > /dev/null tar -zxf "${TMPDIR}/clashdb.tar.gz" ${tar_para} -C $dbdir > /dev/null
if [ $? -ne 0 ];then [ $? -ne 0 ] && echo "文件解压失败!" && rm -rf ${TMPDIR}/clashfm.tar.gz && exit 1
tar -zxf "${TMPDIR}/clashdb.tar.gz" --no-same-permissions -C $dbdir > /dev/null
[ $? -ne 0 ] && echo "文件解压失败!" && rm -rf ${TMPDIR}/clashfm.tar.gz && exit 1
fi
#修改默认host和端口 #修改默认host和端口
if [ "$db_type" = "clashdb" -o "$db_type" = "meta_db" -o "$db_type" = "meta_xd" ];then if [ "$db_type" = "clashdb" -o "$db_type" = "meta_db" -o "$db_type" = "meta_xd" ];then
sed -i "s/127.0.0.1/${host}/g" $dbdir/assets/*.js sed -i "s/127.0.0.1/${host}/g" $dbdir/assets/*.js

View File

@@ -8,6 +8,7 @@ JSONSDIR=${CRASHDIR}/jsons
source ${CRASHDIR}/configs/command.env &>/dev/null source ${CRASHDIR}/configs/command.env &>/dev/null
[ -z "$BINDIR" -o -z "$TMPDIR" -o -z "$COMMAND" ] && source ${CRASHDIR}/init.sh &>/dev/null [ -z "$BINDIR" -o -z "$TMPDIR" -o -z "$COMMAND" ] && source ${CRASHDIR}/init.sh &>/dev/null
[ ! -f ${TMPDIR} ] && mkdir -p ${TMPDIR} [ ! -f ${TMPDIR} ] && mkdir -p ${TMPDIR}
[ -n "$(tar --help 2>&1|grep -o 'no-same-owner')" ] && tar_para='--no-same-owner' #tar命令兼容
#读取配置相关 #读取配置相关
setconfig(){ setconfig(){
@@ -114,7 +115,7 @@ ckstatus(){
if [ -n "$core_v" ];then if [ -n "$core_v" ];then
source ${CRASHDIR}/getdate.sh && setcoretype && \ source ${CRASHDIR}/getdate.sh && setcoretype && \
mv -f $file ${TMPDIR}/CrashCore && \ mv -f $file ${TMPDIR}/CrashCore && \
tar -zcf ${BINDIR}/CrashCore.tar.gz -C ${TMPDIR} CrashCore && \ tar -zcf ${BINDIR}/CrashCore.tar.gz ${tar_para} -C ${TMPDIR} CrashCore && \
echo -e "\033[32m内核加载完成\033[0m " && \ echo -e "\033[32m内核加载完成\033[0m " && \
setconfig crashcore $crashcore && \ setconfig crashcore $crashcore && \
setconfig core_v $core_v && \ setconfig core_v $core_v && \

View File

@@ -559,7 +559,7 @@ EOF
{ {
"dns": { "dns": {
"servers": [ "servers": [
{ "tag": "hosts_local", "address": "local", "detour": "direct" } { "tag": "hosts_local", "address": "local", "detour": "DIRECT" }
], ],
"rules": [ "rules": [
{ {
@@ -617,12 +617,12 @@ EOF
"address": "$dns_direct", "address": "$dns_direct",
"strategy": "$strategy", "strategy": "$strategy",
"address_resolver": "dns_resolver", "address_resolver": "dns_resolver",
"detour": "direct" "detour": "DIRECT"
}, },
{ "tag": "dns_fakeip", "address": "fakeip" }, { "tag": "dns_fakeip", "address": "fakeip" },
{ "tag": "dns_resolver", "address": "223.5.5.5", "detour": "direct" }, { "tag": "dns_resolver", "address": "223.5.5.5", "detour": "DIRECT" },
{ "tag": "block", "address": "rcode://success" }, { "tag": "block", "address": "rcode://success" },
{ "tag": "local", "address": "local", "detour": "direct" } { "tag": "local", "address": "local", "detour": "DIRECT" }
], ],
"rules": [ "rules": [
{ "outbound": ["any"], "server": "dns_resolver" }, { "outbound": ["any"], "server": "dns_resolver" },
@@ -649,13 +649,14 @@ EOF
} }
EOF EOF
#生成ntp.json #生成ntp.json
[ -z "$(grep '自动同步ntp时间' $CRASHDIR/task/afstart )" ] && cat > ${TMPDIR}/jsons/ntp.json <<EOF [ -z "$(grep '自动同步ntp时间' $CRASHDIR/task/afstart 2>/dev/null)" ] && cat > ${TMPDIR}/jsons/ntp.json <<EOF
{ {
"ntp": { "ntp": {
"enabled": true, "enabled": true,
"server": "203.107.6.88", "server": "203.107.6.88",
"server_port": 123, "server_port": 123,
"interval": "30m0s" "interval": "30m0s",
"detour": "DIRECT"
} }
} }
EOF EOF
@@ -717,6 +718,14 @@ EOF
} }
EOF EOF
fi fi
#生成add_outbounds.json
[ -z "$(cat ${CRASHDIR}/jsons/*.json | grep -oEi '\"tag\": *\"DIRECT\"')" ] && cat > ${TMPDIR}/jsons/add_outbounds.json <<EOF
{
"outbounds": [
{ "type": "direct", "tag": "DIRECT" }
]
}
EOF
#生成experimental.json #生成experimental.json
cat > ${TMPDIR}/jsons/experimental.json <<EOF cat > ${TMPDIR}/jsons/experimental.json <<EOF
{ {
@@ -1476,24 +1485,27 @@ EOF
compare ${TMPDIR}/shellcrash_pac ${BINDIR}/ui/pac compare ${TMPDIR}/shellcrash_pac ${BINDIR}/ui/pac
[ "$?" = 0 ] && rm -rf ${TMPDIR}/shellcrash_pac || mv -f ${TMPDIR}/shellcrash_pac ${BINDIR}/ui/pac [ "$?" = 0 ] && rm -rf ${TMPDIR}/shellcrash_pac || mv -f ${TMPDIR}/shellcrash_pac ${BINDIR}/ui/pac
} }
core_check(){ core_check(){ #检查及下载内核文件
#检查及下载内核文件 [ -n "$(tar --help 2>&1|grep -o 'no-same-owner')" ] && tar_para='--no-same-owner' #tar命令兼容
[ -n "$(find --help 2>&1|grep -o size)" ] && find_para=' -size +2000' #find命令兼容 [ -n "$(find --help 2>&1|grep -o size)" ] && find_para=' -size +2000' #find命令兼容
tar_core(){
mkdir -p ${TMPDIR}/core_tmp
tar -zxf ${1} ${tar_para} -C ${TMPDIR}/core_tmp/
for file in $(find ${TMPDIR}/core_tmp $find_para 2>/dev/null);do
[ -f $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|pre)')" ] && mv -f $file ${TMPDIR}/${2}
done
rm -rf ${TMPDIR}/core_tmp
}
[ -z "$(find ${TMPDIR}/CrashCore $find_para 2>/dev/null)" ] && [ -n "$(find ${BINDIR}/CrashCore $find_para 2>/dev/null)" ] && mv ${BINDIR}/CrashCore ${TMPDIR}/CrashCore [ -z "$(find ${TMPDIR}/CrashCore $find_para 2>/dev/null)" ] && [ -n "$(find ${BINDIR}/CrashCore $find_para 2>/dev/null)" ] && mv ${BINDIR}/CrashCore ${TMPDIR}/CrashCore
[ -z "$(find ${TMPDIR}/CrashCore $find_para 2>/dev/null)" ] && [ -n "$(find ${BINDIR}/CrashCore.tar.gz $find_para 2>/dev/null)" ] && \ [ -z "$(find ${TMPDIR}/CrashCore $find_para 2>/dev/null)" ] && [ -n "$(find ${BINDIR}/CrashCore.tar.gz $find_para 2>/dev/null)" ] && \
tar -zxf "${BINDIR}/CrashCore.tar.gz" -C ${TMPDIR}/ &>/dev/null || tar -zxf "${BINDIR}/CrashCore.tar.gz" --no-same-owner -C ${TMPDIR}/ tar_core ${BINDIR}/CrashCore.tar.gz CrashCore
[ -z "$(find ${TMPDIR}/CrashCore $find_para 2>/dev/null)" ] && { [ -z "$(find ${TMPDIR}/CrashCore $find_para 2>/dev/null)" ] && {
logger "未找到【$crashcore】核心,正在下载!" 33 logger "未找到【$crashcore】核心,正在下载!" 33
[ -z "$cpucore" ] && source ${CRASHDIR}/getdate.sh && getcpucore [ -z "$cpucore" ] && source ${CRASHDIR}/getdate.sh && getcpucore
[ -z "$cpucore" ] && logger 找不到设备的CPU信息请手动指定处理器架构类型 31 && exit 1 [ -z "$cpucore" ] && logger 找不到设备的CPU信息请手动指定处理器架构类型 31 && exit 1
get_bin ${TMPDIR}/CrashCore.tar.gz "bin/$crashcore/${target}-linux-${cpucore}.tar.gz" get_bin ${TMPDIR}/CrashCore.tar.gz "bin/$crashcore/${target}-linux-${cpucore}.tar.gz"
#校验内核 #校验内核
mkdir -p ${TMPDIR}/core_tmp tar_core ${TMPDIR}/CrashCore.tar.gz core_new
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 $(find ${TMPDIR}/core_tmp $find_para 2>/dev/null);do
[ -f $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|pre)')" ] && mv -f $file ${TMPDIR}/core_new
done
rm -rf ${TMPDIR}/core_tmp
chmod +x ${TMPDIR}/core_new chmod +x ${TMPDIR}/core_new
if [ "$crashcore" = singbox -o "$crashcore" = singboxp ];then if [ "$crashcore" = singbox -o "$crashcore" = singboxp ];then
core_v=$(${TMPDIR}/core_new version 2>/dev/null | grep version | awk '{print $3}') core_v=$(${TMPDIR}/core_new version 2>/dev/null | grep version | awk '{print $3}')

View File

@@ -7,6 +7,7 @@
CFG_PATH=${CRASHDIR}/configs/ShellCrash.cfg CFG_PATH=${CRASHDIR}/configs/ShellCrash.cfg
TMPDIR=/tmp/ShellCrash && [ ! -f ${TMPDIR} ] && mkdir -p ${TMPDIR} TMPDIR=/tmp/ShellCrash && [ ! -f ${TMPDIR} ] && mkdir -p ${TMPDIR}
source $CFG_PATH &> /dev/null source $CFG_PATH &> /dev/null
[ -n "$(tar --help 2>&1|grep -o 'no-same-owner')" ] && tar_para='--no-same-owner' #tar命令兼容
setconfig(){ setconfig(){
#参数1代表变量名参数2代表变量值,参数3即文件路径 #参数1代表变量名参数2代表变量值,参数3即文件路径
@@ -49,7 +50,7 @@ update_core(){ #自动更新内核
[ -n "$(pidof CrashCore)" ] && ${CRASHDIR}/start.sh stop #停止内核服务防止内存不足 [ -n "$(pidof CrashCore)" ] && ${CRASHDIR}/start.sh stop #停止内核服务防止内存不足
[ -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" ${tar_para} -C ${TMPDIR}/core_new/
for file in $(find ${TMPDIR}/core_tmp 2>/dev/null);do for file in $(find ${TMPDIR}/core_tmp 2>/dev/null);do
[ -f $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new [ -f $file ] && [ -n "$(echo $file | sed 's#.*/##' | grep -iE '(CrashCore|sing|meta|mihomo|clash|premium)')" ] && mv -f $file ${TMPDIR}/core_new
done done
@@ -74,7 +75,7 @@ update_core(){ #自动更新内核
if [ -f ${TMPDIR}/core_new.tar.gz ];then if [ -f ${TMPDIR}/core_new.tar.gz ];then
mv -f ${TMPDIR}/core_new.tar.gz ${BINDIR}/CrashCore.tar.gz mv -f ${TMPDIR}/core_new.tar.gz ${BINDIR}/CrashCore.tar.gz
else else
tar -zcf ${BINDIR}/CrashCore.tar.gz -C ${TMPDIR} CrashCore tar -zcf ${BINDIR}/CrashCore.tar.gz ${tar_para} -C ${TMPDIR} CrashCore
fi fi
logger "任务【自动更新内核】下载完成,正在重启服务!" logger "任务【自动更新内核】下载完成,正在重启服务!"
setconfig core_v $core_v setconfig core_v $core_v
@@ -98,7 +99,7 @@ update_shellcrash(){ #自动更新脚本
return 1 return 1
else else
#解压 #解压
tar -zxf "${TMPDIR}/update.tar.gz" -C ${CRASHDIR}/ || tar -zxf "${TMPDIR}/update.tar.gz" --no-same-owner -C ${CRASHDIR}/ tar -zxf "${TMPDIR}/update.tar.gz" ${tar_para} -C ${CRASHDIR}/
if [ $? -ne 0 ];then if [ $? -ne 0 ];then
rm -rf ${TMPDIR}/update.tar.gz rm -rf ${TMPDIR}/update.tar.gz
logger "任务【自动更新内核】出错-解压失败!" logger "任务【自动更新内核】出错-解压失败!"