Skip to content

Commit de7ea4e

Browse files
aaajiaoclaude
andcommitted
fix: update/sandbox-rebuild robustness — trap, hash gating, auto-repair
- Add EXIT trap in update.sh to restart Gateway if build fails mid-update - Track all 3 sandbox build results; only save hash when ALL succeed - Replace 30-line hardcoded auto-repair with refresh-mac-commands.sh call - Add post-update refresh-mac-commands.sh to pick up wrapper changes - Gate sandbox-rebuild.sh hash save on all builds succeeding - Warn on openclaw-orbstack self-pull failure instead of silent || true - Add 6 new i18n variables to both en.sh and zh-CN.sh Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 2b81b3a commit de7ea4e

File tree

5 files changed

+52
-41
lines changed

5 files changed

+52
-41
lines changed

lang/en.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ MSG_CMD_UPDATE_STARTING=" Starting service..."
116116
MSG_CMD_UPDATE_DONE="✅ Update complete!"
117117
MSG_CMD_UPDATE_SANDBOX_HINT="💡 To rebuild sandbox images: openclaw-update --sandbox"
118118
MSG_CMD_UPDATE_NPM_REINSTALL="npm missing, reinstalling Node.js package..."
119+
MSG_CMD_UPDATE_RECOVER=" ⚠ Build failed, restarting service with previous version..."
120+
MSG_CMD_UPDATE_SANDBOX_COMMON_FAIL=" ✗ common image build failed"
121+
MSG_CMD_UPDATE_SANDBOX_BROWSER_FAIL=" ✗ browser image build failed"
122+
MSG_CMD_UPDATE_SANDBOX_PARTIAL=" ⚠ Some sandbox images failed to build. Next update will retry."
123+
MSG_CMD_UPDATE_PULL_WARN=" ⚠ Failed to update openclaw-orbstack repo, using cached version"
119124

120125
# openclaw-sandbox-rebuild
121126
MSG_CMD_REBUILD_START="🔨 Rebuilding sandbox Docker images..."
@@ -132,6 +137,7 @@ MSG_CMD_REBUILD_BROWSER_OK_DF=" ✓ sandbox-browser image built (Dockerfile)"
132137
MSG_CMD_REBUILD_BROWSER_FAIL=" ✗ sandbox-browser image build failed"
133138
MSG_CMD_REBUILD_DONE="✅ Sandbox image rebuild complete!"
134139
MSG_CMD_REBUILD_NOTE="💡 Running containers still use old images, run openclaw-restart to apply"
140+
MSG_CMD_REBUILD_PARTIAL=" ⚠ Some images failed. Hash not saved, next update will retry."
135141

136142
# openclaw-telegram
137143
MSG_CMD_TG_ADD_USAGE="Usage: openclaw-telegram add <bot_token>"

lang/zh-CN.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ MSG_CMD_UPDATE_STARTING=" 启动服务..."
116116
MSG_CMD_UPDATE_DONE="✅ 更新完成!"
117117
MSG_CMD_UPDATE_SANDBOX_HINT="💡 如需重建沙箱镜像: openclaw-update --sandbox"
118118
MSG_CMD_UPDATE_NPM_REINSTALL="npm 缺失,正在重新安装 Node.js 软件包..."
119+
MSG_CMD_UPDATE_RECOVER=" ⚠ 构建失败,正在使用上一版本重启服务..."
120+
MSG_CMD_UPDATE_SANDBOX_COMMON_FAIL=" ✗ common 镜像构建失败"
121+
MSG_CMD_UPDATE_SANDBOX_BROWSER_FAIL=" ✗ 浏览器镜像构建失败"
122+
MSG_CMD_UPDATE_SANDBOX_PARTIAL=" ⚠ 部分沙箱镜像构建失败,下次更新将重试。"
123+
MSG_CMD_UPDATE_PULL_WARN=" ⚠ 更新 openclaw-orbstack 仓库失败,使用缓存版本"
119124

120125
# openclaw-sandbox-rebuild
121126
MSG_CMD_REBUILD_START="🔨 正在重建沙箱 Docker 镜像..."
@@ -132,6 +137,7 @@ MSG_CMD_REBUILD_BROWSER_OK_DF=" ✓ sandbox-browser 镜像构建完成 (Dockerf
132137
MSG_CMD_REBUILD_BROWSER_FAIL=" ✗ sandbox-browser 镜像构建失败"
133138
MSG_CMD_REBUILD_DONE="✅ 沙箱镜像重建完成!"
134139
MSG_CMD_REBUILD_NOTE="💡 已运行的容器仍使用旧镜像,运行 openclaw-restart 使新镜像生效"
140+
MSG_CMD_REBUILD_PARTIAL=" ⚠ 部分镜像构建失败,未保存哈希,下次更新将重试。"
135141

136142
# openclaw-telegram
137143
MSG_CMD_TG_ADD_USAGE="用法: openclaw-telegram add <bot_token>"

scripts/commands/sandbox-rebuild.sh

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,23 @@
66
source "$(dirname "$0")/_common.sh"
77

88
echo "$MSG_CMD_REBUILD_START"
9+
REBUILD_OK=true
910

1011
echo "$MSG_CMD_REBUILD_BASE"
1112
if orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c './scripts/sandbox-setup.sh'" 2>/dev/null; then
1213
echo "$MSG_CMD_REBUILD_BASE_OK"
1314
elif orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c 'docker build -t openclaw-sandbox:bookworm-slim -f Dockerfile.sandbox .'" 2>/dev/null; then
1415
echo "$MSG_CMD_REBUILD_BASE_OK_DF"
1516
else
17+
REBUILD_OK=false
1618
echo "$MSG_CMD_REBUILD_BASE_FAIL"
1719
fi
1820

1921
echo "$MSG_CMD_REBUILD_COMMON"
2022
if orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c './scripts/sandbox-common-setup.sh'" 2>/dev/null; then
2123
echo "$MSG_CMD_REBUILD_COMMON_OK"
2224
else
25+
REBUILD_OK=false
2326
echo "$MSG_CMD_REBUILD_COMMON_FAIL"
2427
fi
2528

@@ -29,11 +32,16 @@ if orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c './scripts
2932
elif orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c 'docker build -t openclaw-sandbox-browser:bookworm-slim -f Dockerfile.sandbox-browser .'" 2>/dev/null; then
3033
echo "$MSG_CMD_REBUILD_BROWSER_OK_DF"
3134
else
35+
REBUILD_OK=false
3236
echo "$MSG_CMD_REBUILD_BROWSER_FAIL"
3337
fi
3438

35-
# Save new sandbox build hash
36-
orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && cat Dockerfile.sandbox Dockerfile.sandbox-browser scripts/sandbox-setup.sh scripts/sandbox-common-setup.sh scripts/sandbox-browser-setup.sh 2>/dev/null | sha256sum | cut -d' ' -f1 > ~/.openclaw/.sandbox-build-hash"
39+
# Save new sandbox build hash only if all builds succeeded
40+
if [ "$REBUILD_OK" = true ]; then
41+
orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && cat Dockerfile.sandbox Dockerfile.sandbox-browser scripts/sandbox-setup.sh scripts/sandbox-common-setup.sh scripts/sandbox-browser-setup.sh 2>/dev/null | sha256sum | cut -d' ' -f1 > ~/.openclaw/.sandbox-build-hash"
42+
else
43+
echo "$MSG_CMD_REBUILD_PARTIAL"
44+
fi
3745

3846
echo ""
3947
echo "$MSG_CMD_REBUILD_DONE"

scripts/commands/update.sh

Lines changed: 29 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -32,38 +32,9 @@ if grep -q "systemctl status openclaw" ~/bin/openclaw-status 2>/dev/null; then
3232
orb -m "$OPENCLAW_VM_NAME" bash -lc "sudo rm -f /etc/systemd/system/openclaw.service && sudo systemctl daemon-reload"
3333
orb -m "$OPENCLAW_VM_NAME" bash -lc "sudo loginctl enable-linger \$(whoami)"
3434
orb -m "$OPENCLAW_VM_NAME" bash -lc "systemctl --user enable openclaw-gateway.service 2>/dev/null || true"
35-
# Mac: fix stale commands
36-
cat > ~/bin/openclaw-status << 'FIXEOF'
37-
#!/bin/bash
38-
set -e
39-
_VM="openclaw-vm"; [ -f "$HOME/bin/.openclaw-vm" ] && source "$HOME/bin/.openclaw-vm" && _VM="${OPENCLAW_VM:-$_VM}"
40-
orb -m "$_VM" bash -lc "openclaw gateway status"
41-
FIXEOF
42-
cat > ~/bin/openclaw-logs << 'FIXEOF'
43-
#!/bin/bash
44-
set -e
45-
_VM="openclaw-vm"; [ -f "$HOME/bin/.openclaw-vm" ] && source "$HOME/bin/.openclaw-vm" && _VM="${OPENCLAW_VM:-$_VM}"
46-
orb -m "$_VM" bash -lc "openclaw logs --follow"
47-
FIXEOF
48-
cat > ~/bin/openclaw-restart << 'FIXEOF'
49-
#!/bin/bash
50-
set -e
51-
_VM="openclaw-vm"; [ -f "$HOME/bin/.openclaw-vm" ] && source "$HOME/bin/.openclaw-vm" && _VM="${OPENCLAW_VM:-$_VM}"
52-
orb -m "$_VM" bash -lc "openclaw gateway restart"
53-
FIXEOF
54-
cat > ~/bin/openclaw-stop << 'FIXEOF'
55-
#!/bin/bash
56-
set -e
57-
_VM="openclaw-vm"; [ -f "$HOME/bin/.openclaw-vm" ] && source "$HOME/bin/.openclaw-vm" && _VM="${OPENCLAW_VM:-$_VM}"
58-
orb -m "$_VM" bash -lc "openclaw gateway stop"
59-
FIXEOF
60-
cat > ~/bin/openclaw-start << 'FIXEOF'
61-
#!/bin/bash
62-
set -e
63-
_VM="openclaw-vm"; [ -f "$HOME/bin/.openclaw-vm" ] && source "$HOME/bin/.openclaw-vm" && _VM="${OPENCLAW_VM:-$_VM}"
64-
orb -m "$_VM" bash -lc "openclaw gateway start"
65-
FIXEOF
66-
chmod +x ~/bin/openclaw-status ~/bin/openclaw-logs ~/bin/openclaw-restart ~/bin/openclaw-stop ~/bin/openclaw-start
35+
# Mac: regenerate all commands
36+
OPENCLAW_LANG="$_OPENCLAW_LANG" OPENCLAW_VM_NAME="$OPENCLAW_VM_NAME" \
37+
bash "$OPENCLAW_REPO_DIR/scripts/refresh-mac-commands.sh" 2>/dev/null || true
6738
echo "$MSG_UPDATE_AUTO_UPGRADE_DONE"
6839
fi
6940

@@ -77,6 +48,11 @@ echo "$MSG_CMD_UPDATE_UPDATING"
7748

7849
echo "$MSG_CMD_UPDATE_STOPPING"
7950
orb -m "$OPENCLAW_VM_NAME" bash -lc "openclaw gateway stop"
51+
GATEWAY_STOPPED=true
52+
trap 'if [ "$GATEWAY_STOPPED" = true ]; then
53+
echo "$MSG_CMD_UPDATE_RECOVER"
54+
orb -m "$OPENCLAW_VM_NAME" bash -lc "openclaw gateway start" 2>/dev/null || true
55+
fi' EXIT
8056

8157
echo "$MSG_CMD_UPDATE_PULLING"
8258
orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && git fetch --tags --force"
@@ -121,25 +97,40 @@ fi
12197

12298
if [ "$SANDBOX" = true ]; then
12399
echo "$MSG_CMD_UPDATE_SANDBOX_REBUILD"
124-
SANDBOX_OK=false
100+
SANDBOX_OK=true
125101
echo "$MSG_CMD_UPDATE_SANDBOX_BASE"
126-
if orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c './scripts/sandbox-setup.sh'" 2>/dev/null; then
127-
SANDBOX_OK=true
102+
if ! orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c './scripts/sandbox-setup.sh'" 2>/dev/null; then
103+
SANDBOX_OK=false
128104
fi
129105
echo "$MSG_CMD_UPDATE_SANDBOX_COMMON"
130-
orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c './scripts/sandbox-common-setup.sh'" 2>/dev/null || true
106+
if ! orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c './scripts/sandbox-common-setup.sh'" 2>/dev/null; then
107+
echo "$MSG_CMD_UPDATE_SANDBOX_COMMON_FAIL"
108+
SANDBOX_OK=false
109+
fi
131110
echo "$MSG_CMD_UPDATE_SANDBOX_BROWSER"
132-
orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c './scripts/sandbox-browser-setup.sh'" 2>/dev/null || true
111+
if ! orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && sg docker -c './scripts/sandbox-browser-setup.sh'" 2>/dev/null; then
112+
echo "$MSG_CMD_UPDATE_SANDBOX_BROWSER_FAIL"
113+
SANDBOX_OK=false
114+
fi
133115
echo "$MSG_CMD_UPDATE_SANDBOX_NOTE"
134-
# Save new sandbox build hash only if base build succeeded
116+
# Save new sandbox build hash only if all builds succeeded
135117
if [ "$SANDBOX_OK" = true ]; then
136118
orb -m "$OPENCLAW_VM_NAME" bash -lc "cd ~/openclaw && cat Dockerfile.sandbox Dockerfile.sandbox-browser scripts/sandbox-setup.sh scripts/sandbox-common-setup.sh scripts/sandbox-browser-setup.sh 2>/dev/null | sha256sum | cut -d' ' -f1 > ~/.openclaw/.sandbox-build-hash"
119+
else
120+
echo "$MSG_CMD_UPDATE_SANDBOX_PARTIAL"
137121
fi
138122
fi
139123

124+
GATEWAY_STOPPED=false
125+
trap - EXIT
126+
140127
echo "$MSG_CMD_UPDATE_STARTING"
141128
orb -m "$OPENCLAW_VM_NAME" bash -lc "openclaw gateway start"
142129

130+
# Refresh Mac commands (picks up any wrapper changes)
131+
OPENCLAW_LANG="$_OPENCLAW_LANG" OPENCLAW_VM_NAME="$OPENCLAW_VM_NAME" \
132+
bash "$OPENCLAW_REPO_DIR/scripts/refresh-mac-commands.sh" 2>/dev/null || true
133+
143134
echo "$MSG_CMD_UPDATE_DONE"
144135
if [ "$SANDBOX" = false ]; then
145136
echo "$MSG_CMD_UPDATE_SANDBOX_HINT"

scripts/refresh-mac-commands.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ if [ -z "$REPO" ] || [ ! -d "$REPO" ]; then
156156
exit 1
157157
fi
158158
# Self-update: pull latest openclaw-orbstack repo before executing
159-
cd "$REPO" && git pull -q 2>/dev/null || true
159+
cd "$REPO" && git pull -q 2>/dev/null || echo "⚠ Failed to update openclaw-orbstack repo, using cached version"
160160
exec bash "$REPO/scripts/commands/update.sh" "$@"
161161
CMDEOF
162162

0 commit comments

Comments
 (0)