dsh-vps 1.5.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/dsh-vps +23 -8
- package/package.json +1 -1
package/bin/dsh-vps
CHANGED
|
@@ -17,7 +17,10 @@
|
|
|
17
17
|
# install-units 安装浏览器一键升级所需的 systemd 单元(install.sh / update-gate 调用)
|
|
18
18
|
# upgrade-run 执行浏览器发起的升级请求(由 dsh-vps-upgrade.service 以 root 调用)
|
|
19
19
|
|
|
20
|
-
set -
|
|
20
|
+
set -Eeuo pipefail
|
|
21
|
+
# set -e 会让脚本在任何一条命令失败时静默退出;这里把"在哪一行、哪条命令"打出来,
|
|
22
|
+
# 升级日志(state/upgrade.log)里就能直接看到原因,而不是戛然而止。
|
|
23
|
+
trap 'printf "\033[1;31m[dsh-vps]\033[0m 意外退出:第 %s 行 \`%s\` 返回 %s\n" "$LINENO" "$BASH_COMMAND" "$?" >&2' ERR
|
|
21
24
|
|
|
22
25
|
ROOT="${DSHVPS_ROOT:-/opt/dsh-vps}"
|
|
23
26
|
GATE_PORT="${GATE_PORT:-3100}"
|
|
@@ -54,14 +57,25 @@ cmd_backup() {
|
|
|
54
57
|
require_root
|
|
55
58
|
mkdir -p "$ROOT/backups"
|
|
56
59
|
local ts="$ROOT/backups/dsh-vps-$(date +%Y%m%d-%H%M%S).tar.gz"
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
# DSH 运行中仍在写文件:GNU tar 遇到"读取期间文件有变化"返回 1,归档本身完整,只告警;
|
|
61
|
+
# 返回 2 才是真失败
|
|
62
|
+
local rc=0
|
|
63
|
+
tar -czf "$ts" -C / "${DSH_HOME_DIR#/}" "${ROOT#/}/state" 2>/dev/null || rc=$?
|
|
64
|
+
if [[ $rc -eq 1 ]]; then
|
|
65
|
+
warn "部分文件在备份期间有变动(DSH 运行中属正常),备份仍可用"
|
|
66
|
+
elif [[ $rc -ne 0 ]]; then
|
|
67
|
+
die "备份失败(tar 返回 $rc)"
|
|
68
|
+
fi
|
|
59
69
|
chmod 600 "$ts"
|
|
60
70
|
log "备份完成: $ts"
|
|
61
|
-
# 保留最近 3
|
|
71
|
+
# 保留最近 3 份。写成 if:`[[ ]] && ...` 作为函数最后一行时,条件不成立会让函数返回 1,
|
|
72
|
+
# 调用方在 set -e 下直接静默退出——首次升级(备份不足 4 份)就曾因此在备份后中止
|
|
62
73
|
local old
|
|
63
|
-
old=$(ls -1t "$ROOT"/backups/dsh-vps-*.tar.gz 2>/dev/null | tail -n +4)
|
|
64
|
-
[[ -n "$old" ]]
|
|
74
|
+
old=$(ls -1t "$ROOT"/backups/dsh-vps-*.tar.gz 2>/dev/null | tail -n +4 || true)
|
|
75
|
+
if [[ -n "$old" ]]; then
|
|
76
|
+
rm -f $old
|
|
77
|
+
log "已清理旧备份"
|
|
78
|
+
fi
|
|
65
79
|
}
|
|
66
80
|
|
|
67
81
|
## endregion
|
|
@@ -328,7 +342,7 @@ console.log(c.sort(cmp).pop());
|
|
|
328
342
|
|
|
329
343
|
# 5. 清理:保留最近 2 个版本目录
|
|
330
344
|
local old_dirs
|
|
331
|
-
old_dirs=$(ls -1d "$ROOT"/dsh/*/ 2>/dev/null | grep -v current | sed 's|/$||' | sort -V | head -n -2)
|
|
345
|
+
old_dirs=$(ls -1d "$ROOT"/dsh/*/ 2>/dev/null | grep -v current | sed 's|/$||' | sort -V | head -n -2 || true)
|
|
332
346
|
for d in $old_dirs; do
|
|
333
347
|
[[ "$(basename "$d")" == "$cur" ]] && continue # 保底:至少留一个可回滚目标
|
|
334
348
|
rm -rf "$d" && log "已清理旧版本目录: $d"
|
|
@@ -341,7 +355,7 @@ cmd_rollback() {
|
|
|
341
355
|
cur=$(current_version)
|
|
342
356
|
local prev
|
|
343
357
|
prev=$(ls -1d "$ROOT"/dsh/*/ 2>/dev/null | grep -v current | sed 's|/$||' | xargs -n1 basename 2>/dev/null \
|
|
344
|
-
| grep -vx "$cur" | sort -V | tail -1)
|
|
358
|
+
| grep -vx "$cur" | sort -V | tail -1 || true)
|
|
345
359
|
[[ -n "$prev" ]] || die "没有可回滚的版本目录"
|
|
346
360
|
log "回滚: $cur -> $prev"
|
|
347
361
|
switch_version "$prev"
|
|
@@ -998,6 +1012,7 @@ cmd_upgrade_run() {
|
|
|
998
1012
|
chmod 600 "$UPGRADE_LOG"
|
|
999
1013
|
# 独立进程执行:写在 `|| rc=$?` 里的函数/子 shell 会让 set -e 失效,出错也不停
|
|
1000
1014
|
"$ROOT/bin/dsh-vps" upgrade --latest --yes >>"$UPGRADE_LOG" 2>&1 || rc=$?
|
|
1015
|
+
[[ $rc -eq 0 ]] || printf '[dsh-vps] 升级进程退出码 %s(原因见上一行)\n' "$rc" >>"$UPGRADE_LOG"
|
|
1001
1016
|
to=$(current_version)
|
|
1002
1017
|
if [[ $rc -eq 0 ]]; then
|
|
1003
1018
|
write_upgrade_status success "$from" "$to"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-vps",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "Ship DeepSeek Harness to your own VPS: one command installs a zero-dependency login gateway, automatic HTTPS through Caddy, systemd supervision, and optional WireGuard-only access.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek-harness",
|