@@ -9,7 +9,7 @@ export PATH
99# WebSite: https://about.nange.cn
1010# =================================================
1111
12- sh_ver=" 1.7.2 "
12+ sh_ver=" 1.7.3 "
1313snell_v4_version=" 4.1.1"
1414snell_v5_version=" 5.0.0b2"
1515script_dir=$( cd " $( dirname " $0 " ) " ; pwd)
@@ -143,6 +143,39 @@ checkStatus(){
143143 fi
144144}
145145
146+ # 检查版本更新
147+ checkVersionUpdate (){
148+ if [[ -e ${snell_bin} && -e ${snell_conf} ]]; then
149+ current_ver=$( cat ${snell_conf} | grep ' version = ' | awk -F ' version = ' ' {print $NF}' )
150+
151+ # 只检查 v5 版本的更新
152+ if [[ " $current_ver " == " 5" ]]; then
153+ # 读取当前安装的版本号
154+ if [[ -e ${snell_version_file} ]]; then
155+ installed_version=$( cat ${snell_version_file} | sed ' s/^v//' )
156+ script_version=${snell_v5_version}
157+
158+ if [[ " $installed_version " != " $script_version " ]]; then
159+ echo -e " ${Tip} 检测到 Snell v5 版本不一致:"
160+ echo -e " 当前安装版本: ${Yellow_font_prefix} v${installed_version}${Font_color_suffix} "
161+ echo -e " 脚本最新版本: ${Green_font_prefix} v${script_version}${Font_color_suffix} "
162+ echo -e " 是否立即升级到最新版本?(Y/n)"
163+ read -e -p " (默认: y):" upgrade_confirm
164+ [[ -z " ${upgrade_confirm} " ]] && upgrade_confirm=" y"
165+
166+ if [[ ${upgrade_confirm} == [Nn] ]]; then
167+ echo -e " ${Info} 已跳过版本升级"
168+ else
169+ echo -e " ${Info} 开始升级 Snell v5 到最新版本..."
170+ upgradeSnellV5
171+ return 0
172+ fi
173+ fi
174+ fi
175+ fi
176+ fi
177+ }
178+
146179
147180# 获取 Snell 下载链接
148181getSnellDownloadUrl (){
@@ -169,7 +202,7 @@ downloadSnellV2() {
169202 rm -rf " snell-server-v2.0.6-linux-${arch} .zip"
170203 chmod +x snell-server
171204 mv -f snell-server " ${snell_bin} "
172- echo " v2.0.6" > " ${snell_v4_version_file } "
205+ echo " v2.0.6" > " ${snell_version_file } "
173206 echo -e " ${Info} Snell Server v2 下载安装完毕!"
174207 return 0
175208}
@@ -770,6 +803,61 @@ updateV4toV5(){
770803 startMenu
771804}
772805
806+ # 升级 Snell v5 到最新版本
807+ upgradeSnellV5 (){
808+ checkInstalledStatus
809+ readConfig
810+
811+ # 检查当前版本是否为 v5
812+ if [[ " $ver " != " 5" ]]; then
813+ echo -e " ${Error} 当前版本不是 v5,无法使用此功能!当前版本:v${ver} "
814+ return 1
815+ fi
816+
817+ echo -e " ${Info} 开始升级 Snell v5 到最新版本..."
818+
819+ # 停止服务
820+ echo -e " ${Info} 停止 Snell Server 服务..."
821+ systemctl stop snell-server
822+
823+ # 备份当前二进制文件
824+ if [[ -e " ${snell_bin} " ]]; then
825+ echo -e " ${Info} 备份当前程序文件..."
826+ cp " ${snell_bin} " " ${snell_bin} .v5.backup.$( date +%Y%m%d_%H%M%S) "
827+ fi
828+
829+ # 下载并安装最新 v5
830+ echo -e " ${Info} 开始下载最新 v5 版本..."
831+ downloadSnell " ${snell_v5_version} " " v5 Beta 最新版"
832+
833+ if [[ $? -eq 0 ]]; then
834+ # 重新加载 systemd 并启动服务
835+ echo -e " ${Info} 重启 Snell Server 服务..."
836+ systemctl daemon-reload
837+ systemctl start snell-server
838+
839+ # 检查服务状态
840+ sleep 2
841+ checkStatus
842+ if [[ " $status " == " running" ]]; then
843+ echo -e " ${Info} v5 升级成功!"
844+ echo -e " ${Info} 当前版本:v${snell_v5_version} ${Yellow_font_prefix} Beta${Font_color_suffix} "
845+ else
846+ echo -e " ${Error} 服务启动失败,正在回滚..."
847+ # 回滚到备份版本
848+ backup_file=$( ls -t " ${snell_bin} " .v5.backup.* 2> /dev/null | head -1)
849+ if [[ -n " $backup_file " && -e " $backup_file " ]]; then
850+ cp " $backup_file " " ${snell_bin} "
851+ systemctl start snell-server
852+ echo -e " ${Info} 已回滚到备份版本"
853+ fi
854+ fi
855+ else
856+ echo -e " ${Error} v5 下载失败,启动原版本"
857+ systemctl start snell-server
858+ fi
859+ }
860+
773861# 卸载 Snell
774862uninstallSnell (){
775863 checkInstalledStatus
@@ -932,6 +1020,9 @@ startMenu(){
9321020 sysArch
9331021 action=$1
9341022
1023+ # 检查版本更新(在显示菜单前)
1024+ checkVersionUpdate
1025+
9351026 # 检查是否安装了 v4 版本
9361027 show_v4_to_v5_option=false
9371028 if [[ -e ${snell_bin} && -e ${snell_conf} ]]; then
0 commit comments