修改内核压缩方式

This commit is contained in:
juewuy
2024-01-29 15:33:52 +08:00
parent 4d786db332
commit 1581192539
3 changed files with 65 additions and 50 deletions

View File

@@ -801,7 +801,7 @@ getcpucore(){
cputype=$(uname -ms | tr ' ' '_' | tr '[A-Z]' '[a-z]') cputype=$(uname -ms | tr ' ' '_' | tr '[A-Z]' '[a-z]')
[ -n "$(echo $cputype | grep -E "linux.*armv.*")" ] && cpucore="armv5" [ -n "$(echo $cputype | grep -E "linux.*armv.*")" ] && cpucore="armv5"
[ -n "$(echo $cputype | grep -E "linux.*armv7.*")" ] && [ -n "$(cat /proc/cpuinfo | grep vfp)" ] && [ ! -d /jffs/CrashCore ] && cpucore="armv7" [ -n "$(echo $cputype | grep -E "linux.*armv7.*")" ] && [ -n "$(cat /proc/cpuinfo | grep vfp)" ] && [ ! -d /jffs/CrashCore ] && cpucore="armv7"
[ -n "$(echo $cputype | grep -E "linux.*aarch64.*|linux.*armv8.*")" ] && cpucore="armv8" [ -n "$(echo $cputype | grep -E "linux.*aarch64.*|linux.*armv8.*")" ] && cpucore="arm64"
[ -n "$(echo $cputype | grep -E "linux.*86.*")" ] && cpucore="386" [ -n "$(echo $cputype | grep -E "linux.*86.*")" ] && cpucore="386"
[ -n "$(echo $cputype | grep -E "linux.*86_64.*")" ] && cpucore="amd64" [ -n "$(echo $cputype | grep -E "linux.*86_64.*")" ] && cpucore="amd64"
if [ -n "$(echo $cputype | grep -E "linux.*mips.*")" ];then if [ -n "$(echo $cputype | grep -E "linux.*mips.*")" ];then
@@ -811,7 +811,7 @@ getcpucore(){
[ -n "$cpucore" ] && setconfig cpucore $cpucore [ -n "$cpucore" ] && setconfig cpucore $cpucore
} }
setcpucore(){ setcpucore(){
cpucore_list="armv5 armv7 armv8 386 amd64 mipsle-softfloat mipsle-hardfloat mips-softfloat" cpucore_list="armv5 armv7 arm64 386 amd64 mipsle-softfloat mipsle-hardfloat mips-softfloat"
echo ----------------------------------------------- echo -----------------------------------------------
echo -e "\033[31m仅适合脚本无法正确识别核心或核心无法正常运行时使用\033[0m" echo -e "\033[31m仅适合脚本无法正确识别核心或核心无法正常运行时使用\033[0m"
echo -e "当前可供在线下载的处理器架构为:" echo -e "当前可供在线下载的处理器架构为:"
@@ -866,9 +866,9 @@ switch_core(){
} }
} }
if [ "$crashcore" = singbox ];then if [ "$crashcore" = singbox ];then
COMMAND='"$BINDIR/CrashCore run -D $BINDIR -C $TMPDIR/jsons"' COMMAND='"$TMPDIR/CrashCore run -D $BINDIR -C $TMPDIR/jsons"'
else else
COMMAND='"$BINDIR/CrashCore -d $BINDIR -f $TMPDIR/config.yaml"' COMMAND='"$TMPDIR/CrashCore -d $BINDIR -f $TMPDIR/config.yaml"'
fi fi
setconfig COMMAND "$COMMAND" ${CRASHDIR}/configs/command.env && source ${CRASHDIR}/configs/command.env setconfig COMMAND "$COMMAND" ${CRASHDIR}/configs/command.env && source ${CRASHDIR}/configs/command.env
} }
@@ -879,32 +879,41 @@ getcore(){
#获取在线内核文件 #获取在线内核文件
echo ----------------------------------------------- echo -----------------------------------------------
echo 正在在线获取$crashcore核心文件…… echo 正在在线获取$crashcore核心文件……
if [ -z "$custcorelink" ];then if [ -n "$custcorelink" ];then
${CRASHDIR}/start.sh get_bin ${TMPDIR}/core.new bin/${crashcore}/${core_new}-linux-${cpucore} ${CRASHDIR}/start.sh webget ${TMPDIR}/core.tar.gz "$custcorelink"
else else
${CRASHDIR}/start.sh webget ${TMPDIR}/core.new "$custcorelink" ${CRASHDIR}/start.sh get_bin ${TMPDIR}/core.tar.gz bin/${crashcore}/${core_new}-linux-${cpucore}.tar.gz
fi fi
if [ "$?" = "1" ];then if [ "$?" = "1" ];then
echo -e "\033[31m核心文件下载失败\033[0m" echo -e "\033[31m核心文件下载失败\033[0m"
rm -rf ${TMPDIR}/core.new rm -rf ${TMPDIR}/core.tar.gz
[ -z "$custcorelink" ] && error_down [ -z "$custcorelink" ] && error_down
else else
chmod +x ${TMPDIR}/core.new [ -n "$(pidof CrashCore)" ] && ${CRASHDIR}/start.sh stop #停止内核服务防止内存不足
${CRASHDIR}/start.sh stop [ -f ${TMPDIR}/core.tar.gz ] && {
echo -e "\033[31m正在解压……\033[0m"
mkdir -p ${TMPDIR}/core_new
tar -zxvf "${TMPDIR}/core.tar.gz" -C ${TMPDIR}/core_new/ &>/dev/null || tar -zxvf "${TMPDIR}/core.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}/CrashCore
done
rm -rf ${TMPDIR}/core_new
}
chmod +x ${TMPDIR}/CrashCore
[ "$crashcore" = unknow ] && setcoretype [ "$crashcore" = unknow ] && setcoretype
if [ "$crashcore" = singbox ];then if [ "$crashcore" = singbox ];then
core_v=$(${TMPDIR}/core.new version 2>/dev/null | grep version | awk '{print $3}') core_v=$(${TMPDIR}/CrashCore version 2>/dev/null | grep version | awk '{print $3}')
else else
core_v=$(${TMPDIR}/core.new -v 2>/dev/null | head -n 1 | sed 's/ linux.*//;s/.* //') core_v=$(${TMPDIR}/CrashCore -v 2>/dev/null | head -n 1 | sed 's/ linux.*//;s/.* //')
fi fi
if [ -z "$core_v" ];then if [ -z "$core_v" ];then
echo -e "\033[31m核心文件下载成功但校验失败请尝试手动指定CPU版本\033[0m" echo -e "\033[31m核心文件下载成功但校验失败请尝试手动指定CPU版本\033[0m"
rm -rf ${TMPDIR}/core.new rm -rf ${TMPDIR}/CrashCore
rm -rf ${TMPDIR}/core.tar.gz
setcpucore setcpucore
else else
echo -e "\033[32m$crashcore核心下载成功\033[0m" echo -e "\033[32m$crashcore核心下载成功\033[0m"
mv -f ${TMPDIR}/core.new ${BINDIR}/CrashCore mv -f ${TMPDIR}/core.tar.gz ${BINDIR}/core.tar.gz 2>/dev/null
chmod +x ${BINDIR}/CrashCore
setconfig crashcore $crashcore setconfig crashcore $crashcore
setconfig core_v $core_v setconfig core_v $core_v
switch_core switch_core
@@ -916,29 +925,29 @@ setcustcore(){
echo -e "\033[33m请选择需要使用的核心\033[0m" echo -e "\033[33m请选择需要使用的核心\033[0m"
echo -e "1 \033[32m Premium-2023.08.17内核(已停止维护) \033[0m" echo -e "1 \033[32m Premium-2023.08.17内核(已停止维护) \033[0m"
echo -e "2 \033[32m 最新Meta.Alpha内核(每日更新) \033[0m" echo -e "2 \033[32m 最新Meta.Alpha内核(每日更新) \033[0m"
echo -e "3 \033[32m singbox-1.8.2内核(支持rule-set) \033[0m" echo -e "3 \033[32m singbox-1.7.8内核(支持rule-set,部分旧设备可用) \033[0m"
echo -e "4 \033[32m singbox_PuerNya内核(支持SSR、providers、rule-set) \033[0m" #echo -e "4 \033[32m singbox_PuerNya内核(支持SSR、providers、rule-set) \033[0m"
echo -e "9 \033[33m 自定义内核链接 \033[0m" echo -e "9 \033[33m 自定义内核链接 \033[0m"
read -p "请输入对应数字 > " num read -p "请输入对应数字 > " num
case "$num" in case "$num" in
1) 1)
crashcore=clashpre crashcore=clashpre
custcorelink=https://github.com/juewuy/ShellCrash/releases/download/clash.premium.latest/clash-linux-$cpucore custcorelink=https://github.com/juewuy/ShellCrash/releases/download/clash.premium.latest/clash-linux-${cpucore}.tar.gz
getcore getcore
;; ;;
2) 2)
crashcore=meta crashcore=meta
custcorelink=https://github.com/juewuy/ShellCrash/releases/download/clash.meta.alpha/clash-linux-$cpucore custcorelink=https://github.com/juewuy/ShellCrash/releases/download/clash.meta.alpha/clash-linux-${cpucore}.tar.gz
getcore getcore
;; ;;
3) 3)
crashcore=singbox crashcore=singbox
custcorelink=https://github.com/juewuy/ShellCrash/releases/download/singbox_core/singbox-linux-$cpucore custcorelink=https://github.com/juewuy/ShellCrash/releases/download/singbox_core/singbox-linux-${cpucore}.tar.gz
getcore getcore
;; ;;
4) 4)
crashcore=singbox crashcore=singboxp
custcorelink=https://github.com/juewuy/ShellCrash/releases/download/singbox_core_PuerNya/singbox-linux-$cpucore custcorelink=https://github.com/juewuy/ShellCrash/releases/download/singbox_core_PuerNya/singbox-linux-${cpucore}.tar.gz
getcore getcore
;; ;;
9) 9)
@@ -963,21 +972,22 @@ setcore(){
echo -e "当前内核:\033[42;30m $crashcore \033[47;30m$core_v\033[0m" echo -e "当前内核:\033[42;30m $crashcore \033[47;30m$core_v\033[0m"
echo -e "当前系统处理器架构:\033[32m $cpucore \033[0m" echo -e "当前系统处理器架构:\033[32m $cpucore \033[0m"
echo -e "\033[33m请选择需要使用的核心版本\033[0m" echo -e "\033[33m请选择需要使用的核心版本\033[0m"
echo -e "\033[36m如需本地上传请将二进制文件上传至 /tmp 目录后重新运行crash命令\033[0m"
echo ----------------------------------------------- echo -----------------------------------------------
echo -e "1 \033[43;30m Clash \033[0m \033[32m占用低\033[0m" echo -e "1 \033[43;30m Clash \033[0m \033[32m占用低\033[0m"
echo -e " (开源基础内核) \033[33m不支持Tun、Rule-set等\033[0m" echo -e " (开源基础内核) \033[33m不支持Tun、Rule-set等\033[0m"
echo -e " 说明文档: \033[36;4mhttps://lancellc.gitbook.io\033[0m" echo -e " 说明文档: \033[36;4mhttps://lancellc.gitbook.io\033[0m"
echo echo
echo -e "2 \033[43;30m Clashpre \033[0m \033[32m支持Tun、Rule-set\033[0m" echo -e "2 \033[43;30m SingBox \033[0m \033[32m支持全面占用低\033[0m"
echo -e " (官方高级内核) \033[33m不支持vless、hy协议\033[0m" echo -e " (sing-box主干) \033[33m不支持providers\033[0m"
echo -e " 说明文档: \033[36;4mhttps://lancellc.gitbook.io\033[0m" echo -e " 说明文档: \033[36;4mhttps://sing-box.sagernet.org\033[0m"
echo echo
echo -e "3 \033[43;30mClash.Meta\033[0m \033[32m多功能支持全面\033[0m" echo -e "3 \033[43;30m Mihomo \033[0m \033[32m多功能支持全面\033[0m"
echo -e " (Meta稳定内核) \033[33m内存占用较高\033[0m" echo -e " (Meta/Mihomo) \033[33m内存占用较高\033[0m"
echo -e " 说明文档: \033[36;4mhttps://wiki.metacubex.one\033[0m" echo -e " 说明文档: \033[36;4mhttps://wiki.metacubex.one\033[0m"
echo echo
echo -e "4 \033[43;30mSing-Box\033[0m \033[32m支持全面占用低\033[0m" echo -e "4 \033[43;30m SingBoxP\033[0m \033[32m支持ssr、providers、dns并发……\033[0m"
echo -e " (sing-box内核) \033[33m另一个选择\033[0m" echo -e " (sing-box分支) \033[33mPuerNya分支版本\033[0m"
echo -e " 说明文档: \033[36;4mhttps://sing-box.sagernet.org\033[0m" echo -e " 说明文档: \033[36;4mhttps://sing-box.sagernet.org\033[0m"
echo echo
echo -e "5 \033[32m自定义内核\033[0m \033[33m仅限专业用户使用\033[0m" echo -e "5 \033[32m自定义内核\033[0m \033[33m仅限专业用户使用\033[0m"
@@ -993,7 +1003,7 @@ setcore(){
getcore getcore
;; ;;
2) 2)
crashcore=clashpre crashcore=singbox
custcorelink='' custcorelink=''
getcore getcore
;; ;;
@@ -1003,7 +1013,7 @@ setcore(){
getcore getcore
;; ;;
4) 4)
crashcore=singbox crashcore=singboxp
custcorelink='' custcorelink=''
getcore getcore
;; ;;
@@ -1018,7 +1028,7 @@ setcore(){
read -p "我确认遇到问题可以自行解决[1/0] > " res read -p "我确认遇到问题可以自行解决[1/0] > " res
[ "$res" = '1' ] && setcustcore [ "$res" = '1' ] && setcustcore
;; ;;
6) 9)
setcpucore setcpucore
setcore setcore
;; ;;

View File

@@ -113,7 +113,8 @@ ckstatus(){
[ -z "$core_v" ] && core_v=$($file version 2>/dev/null | grep -Eo 'version .*' | sed 's/version //') [ -z "$core_v" ] && core_v=$($file version 2>/dev/null | grep -Eo 'version .*' | sed 's/version //')
if [ -n "$core_v" ];then if [ -n "$core_v" ];then
source ${CRASHDIR}/getdate.sh && setcoretype && \ source ${CRASHDIR}/getdate.sh && setcoretype && \
mv -f $file ${CRASHDIR}/CrashCore && \ mv -f $file ${TMPDIR}/CrashCore && \
tar --no-same-owner -zcvf ${BINDIR}/core.tar.gz ${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 && \
@@ -129,7 +130,6 @@ ckstatus(){
echo ----------------------------------------------- echo -----------------------------------------------
done done
#检查/tmp配置文件 #检查/tmp配置文件
[ -x ${BINDIR}/CrashCore ] && \
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 "

View File

@@ -737,13 +737,13 @@ EOF
mkdir -p ${TMPDIR}/jsons_base mkdir -p ${TMPDIR}/jsons_base
for char in log dns ntp experimental;do for char in log dns ntp experimental;do
[ -s ${CRASHDIR}/jsons/${char}.json ] && { [ -s ${CRASHDIR}/jsons/${char}.json ] && {
ln -s ${CRASHDIR}/jsons/${char}.json ${TMPDIR}/jsons/cust_${char}.json ln -sf ${CRASHDIR}/jsons/${char}.json ${TMPDIR}/jsons/cust_${char}.json
mv -f ${TMPDIR}/jsons/${char}.json ${TMPDIR}/jsons_base #如果重复则临时备份 mv -f ${TMPDIR}/jsons/${char}.json ${TMPDIR}/jsons_base #如果重复则临时备份
} }
done done
for char in inbounds outbounds outbound_providers route rule-set;do for char in others inbounds outbounds outbound_providers route rule-set;do
[ -s ${CRASHDIR}/jsons/${char}.json ] && { [ -s ${CRASHDIR}/jsons/${char}.json ] && {
ln -s ${CRASHDIR}/jsons/${char}.json ${TMPDIR}/jsons/cust_${char}.json ln -sf ${CRASHDIR}/jsons/${char}.json ${TMPDIR}/jsons/cust_${char}.json
} }
done done
#测试自定义配置文件 #测试自定义配置文件
@@ -1437,37 +1437,43 @@ EOF
} }
core_check(){ core_check(){
#检查及下载内核文件 #检查及下载内核文件
if [ ! -f ${BINDIR}/CrashCore ];then if [ ! -f ${TMPDIR}/CrashCore ];then
if [ -f ${CRASHDIR}/CrashCore ];then if [ -f ${CRASHDIR}/CrashCore ];then
mv ${CRASHDIR}/CrashCore ${BINDIR}/CrashCore ln -sf ${CRASHDIR}/CrashCore ${TMPDIR}/CrashCore
elif [ -f ${CRASHDIR}/clash ];then elif [ -f ${CRASHDIR}/core.tar.gz ];then
mv ${CRASHDIR}/clash ${BINDIR}/CrashCore tar -zxvf "${CRASHDIR}/core.tar.gz" -C ${TMPDIR}/ &>/dev/null || tar -zxvf "${CRASHDIR}/core.tar.gz" --no-same-owner -C ${TMPDIR}/
else else
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}/core.new "bin/$crashcore/${target}-linux-$cpucore" get_bin ${TMPDIR}/core.tar.gz "bin/$crashcore/${target}-linux-${cpucore}.tar.gz"
#校验内核 #校验内核
chmod +x ${TMPDIR}/core.new 2>/dev/null mkdir -p ${TMPDIR}/core_new
tar -zxvf "${TMPDIR}/core.tar.gz" -C ${TMPDIR}/core_new/ &>/dev/null || tar -zxvf "${TMPDIR}/core.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}/CrashCore
done
rm -rf ${TMPDIR}/core_new
if [ "$crashcore" = singbox ];then if [ "$crashcore" = singbox ];then
core_v=$(${TMPDIR}/core.new version 2>/dev/null | grep version | awk '{print $3}') core_v=$(${TMPDIR}/CrashCore version 2>/dev/null | grep version | awk '{print $3}')
COMMAND='"$BINDIR/CrashCore run -D $BINDIR -C $TMPDIR/jsons"' COMMAND='"$TMPDIR/CrashCore run -D $BINDIR -C $TMPDIR/jsons"'
else else
core_v=$(${TMPDIR}/core.new -v 2>/dev/null | head -n 1 | sed 's/ linux.*//;s/.* //') core_v=$(${TMPDIR}/CrashCore -v 2>/dev/null | head -n 1 | sed 's/ linux.*//;s/.* //')
COMMAND='"$BINDIR/CrashCore -d $BINDIR -f $TMPDIR/config.yaml"' COMMAND='"$TMPDIR/CrashCore -d $BINDIR -f $TMPDIR/config.yaml"'
fi fi
if [ -z "$core_v" ];then if [ -z "$core_v" ];then
rm -rf ${TMPDIR}/core.new rm -rf ${TMPDIR}/CrashCore
logger "核心下载失败,请重新运行或更换安装源!" 31 logger "核心下载失败,请重新运行或更换安装源!" 31
exit 1 exit 1
else else
mv -f ${TMPDIR}/core.new ${BINDIR}/CrashCore mv -f ${TMPDIR}/core.tar.gz ${BINDIR}/core.tar.gz
setconfig COMMAND "$COMMAND" ${CRASHDIR}/configs/command.env && source ${CRASHDIR}/configs/command.env setconfig COMMAND "$COMMAND" ${CRASHDIR}/configs/command.env && source ${CRASHDIR}/configs/command.env
setconfig crashcore $crashcore setconfig crashcore $crashcore
setconfig core_v $core_v setconfig core_v $core_v
fi fi
fi fi
fi fi
[ ! -x ${TMPDIR}/CrashCore ] && chmod +x ${TMPDIR}/CrashCore 2>/dev/null #自动授权
} }
clash_check(){ #clash启动前检查 clash_check(){ #clash启动前检查
#检测vless/hysteria协议 #检测vless/hysteria协议
@@ -1567,7 +1573,6 @@ bfstart(){ #启动前
[ ! -s ${BINDIR}/ui/index.html ] && makehtml #如没有面板则创建跳转界面 [ ! -s ${BINDIR}/ui/index.html ] && makehtml #如没有面板则创建跳转界面
catpac #生成pac文件 catpac #生成pac文件
#内核及内核配置文件检查 #内核及内核配置文件检查
[ ! -x ${BINDIR}/CrashCore ] && chmod +x ${BINDIR}/CrashCore 2>/dev/null #检测可执行权限
if [ "$crashcore" = singbox ];then if [ "$crashcore" = singbox ];then
singbox_check singbox_check
[ -d ${TMPDIR}/jsons ] && rm -rf ${TMPDIR}/jsons/* || mkdir -p ${TMPDIR}/jsons #准备目录 [ -d ${TMPDIR}/jsons ] && rm -rf ${TMPDIR}/jsons/* || mkdir -p ${TMPDIR}/jsons #准备目录