zzzgydi / clash-verge

A Clash GUI based on tauri. Supports Windows, macOS and Linux.
21.29k stars 3.18k forks source link

[建议] 添加自动更新内核功能 #459

Open AsenHu opened 1 year ago

AsenHu commented 1 year ago

不同版本的内核接受的配置文件不一样 我一般编写配置文件都是按最新的文档来的,旧的内核不一定兼容 我目前写了个 bash 脚本自动检查 clash 和 meta 的更新来做到自动更新内核以暂时解决问题 所以不急(

shallbytwo commented 1 year ago

不同版本的内核接受的配置文件不一样 我一般编写配置文件都是按最新的文档来的,旧的内核不一定兼容 我目前写了个 bash 脚本自动检查 clash 和 meta 的更新来做到自动更新内核以暂时解决问题 所以不急(

能分享一下bash脚本吗 谢谢

sukanka commented 1 year ago

这个的话,我建议添加在 Linux 下使用系统内核的功能。这样内核随着系统一起更新就始终是最新的(包括最新的 bug)

AsenHu commented 1 year ago

不同版本的内核接受的配置文件不一样 我一般编写配置文件都是按最新的文档来的,旧的内核不一定兼容 我目前写了个 bash 脚本自动检查 clash 和 meta 的更新来做到自动更新内核以暂时解决问题 所以不急(

能分享一下bash脚本吗 谢谢

#!/usr/bin/env bash

# Need: wget zip
linkDir="/home/asen/link"

source ./tmp/tmp.sh
mCoreV=$(wget -qO- -t1 -T2 "https://api.github.com/repos/MetaCubeX/Clash.Meta/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
vergeV=$(wget -qO- -t1 -T2 "https://api.github.com/repos/zzzgydi/clash-verge/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
pCoreV=$(wget -qO- -t1 -T2 "https://api.github.com/repos/Dreamacro/clash/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')

mkdir -p ./tmp
update=false

if [ "$loMCoreV" != "$mCoreV" ]
then
rm -rf ./tmp/MCore
mkdir -p ./tmp/MCore
wget -q -O MCore.zip "https://github.com/MetaCubeX/Clash.Meta/releases/download/$mCoreV/clash.meta-windows-amd64-$mCoreV.zip" && unzip MCore.zip -d ./tmp/MCore

filemd5=$(md5sum ./tmp/MCore/clash.meta-windows-amd64.exe | cut -d ' ' -f1)
echo "$(date) MetaCore update completed MD5: $filemd5" >> update.log
echo "$(date) MetaCore update $loMCoreV ---> $mCoreV" >> update.log
update=true
fi

if [ "$lopCoreV" != "$pCoreV" ]
then
rm -rf ./tmp/PCore
mkdir -p ./tmp/PCore
wget -q -O PCore.zip "https://github.com/Dreamacro/clash/releases/download/$pCoreV/clash-windows-amd64-v3-$pCoreV.zip" && unzip PCore.zip -d ./tmp/PCore

filemd5=$(md5sum ./tmp/PCore/clash-windows-amd64-v3.exe | cut -d ' ' -f1)
echo "$(date) PremiumCore update completed MD5: $filemd5" >> update.log
echo "$(date) PremiumCore update $lopCoreV ---> $pCoreV" >> update.log
update=true
fi

if [ "$loVergeV" != "$vergeV" ]
then
rm -rf ./tmp/Verge
mkdir -p ./tmp/Verge
wget -q -O Verge.zip "https://github.com/zzzgydi/clash-verge/releases/download/$vergeV/Clash.Verge_${vergeV#*v}_x64_portable.zip" && unzip Verge.zip -d ./tmp/Verge

echo "$(date) ClashVerge update $loVergeV ---> $vergeV" >> update.log
update=true
fi

if [ "$update" == true ]
then
cp -f -l ./tmp/MCore/clash.meta-windows-amd64.exe ./tmp/Verge/clash-meta.exe
cp -f -l ./tmp/PCore/clash-windows-amd64-v3.exe ./tmp/Verge/clash.exe
echo "packaged in $(date)" > ./tmp/Verge/date.txt
cd ./tmp/Verge || exit
zip -9 -r ../../ClashVerge.zip ./*
cd ../../

mkdir -p $linkDir/MetaVerge/
filemd5=$(md5sum ./ClashVerge.zip | cut -d ' ' -f1)
echo "$(date) CVFW upgrade completed MD5: $filemd5" >> update.log
echo -e "$(date)\n$filemd5" > $linkDir/MetaVerge/ClashVerge.txt
mv -f ./ClashVerge.zip $linkDir/MetaVerge/
echo -e "loMCoreV=$mCoreV\nlopCoreV=$pCoreV\nloVergeV=$vergeV" > ./tmp/tmp.sh
else
echo "$(date) No update" >> update.log
fi

rm -rf MCore.zip PCore.zip Verge.zip
echo Finish.

这个脚本会把换了最新内核的 ClashVerge 打个压缩包放在 linkDir 目录下 还会生成一个 txt 文件存放这个压缩包的 MD5 值 在压缩包的根目录下有一个 data.txt 存放的是开始打包的时间 默认是打包 Windows x86 64 v3 架构的,如果有需要自己改脚本的 wget 那里 脚本会在它所在的目录生成 tmp 文件存放当前打包的程序的版本信息,还会生成 update.log 作为日志,所以建议放在一个文件夹下 你需要安装 wget 和 zip 才能使用这个脚本,否则会出现奇怪的问题 linkDir 变量的结尾不能有反斜杠

AsenHu commented 1 year ago

草 排版变成这样了,将就着看吧 如果脚本运行出问题了,删掉 tmp 文件夹就可以再运行了 本人代码写的也挺烂的,能用就行