openclawsetup 1.0.10 → 1.0.12
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/install.sh +257 -11
- package/package.json +1 -1
package/install.sh
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# OpenClaw 一键安装脚本
|
|
3
|
-
# 用法: curl -fsSL https://
|
|
3
|
+
# 用法: curl -fsSL https://unpkg.com/openclawsetup/install.sh | bash
|
|
4
4
|
|
|
5
5
|
set -e
|
|
6
6
|
|
|
@@ -9,7 +9,7 @@ RED='\033[0;31m'
|
|
|
9
9
|
GREEN='\033[0;32m'
|
|
10
10
|
YELLOW='\033[0;33m'
|
|
11
11
|
CYAN='\033[0;36m'
|
|
12
|
-
NC='\033[0m'
|
|
12
|
+
NC='\033[0m'
|
|
13
13
|
|
|
14
14
|
log_info() { echo -e "${CYAN}$1${NC}"; }
|
|
15
15
|
log_success() { echo -e "${GREEN}✓ $1${NC}"; }
|
|
@@ -69,7 +69,6 @@ install_node() {
|
|
|
69
69
|
log_info "正在安装 Node.js 22..."
|
|
70
70
|
|
|
71
71
|
if [ "$OS" == "macos" ]; then
|
|
72
|
-
# macOS - 使用 Homebrew 或 nvm
|
|
73
72
|
if command -v brew &> /dev/null; then
|
|
74
73
|
brew install node@22
|
|
75
74
|
brew link --overwrite --force node@22
|
|
@@ -82,7 +81,6 @@ install_node() {
|
|
|
82
81
|
nvm alias default 22
|
|
83
82
|
fi
|
|
84
83
|
elif [ "$OS" == "linux" ]; then
|
|
85
|
-
# Linux - 根据包管理器安装
|
|
86
84
|
case "$PM" in
|
|
87
85
|
apt)
|
|
88
86
|
log_info "使用 NodeSource 安装..."
|
|
@@ -145,6 +143,236 @@ check_npm() {
|
|
|
145
143
|
fi
|
|
146
144
|
}
|
|
147
145
|
|
|
146
|
+
# 检测 OpenClaw 安装状态
|
|
147
|
+
check_openclaw() {
|
|
148
|
+
if [ -d "$HOME/.openclaw" ] || [ -d "$HOME/.clawdbot" ]; then
|
|
149
|
+
return 0
|
|
150
|
+
fi
|
|
151
|
+
if command -v openclaw &> /dev/null || command -v clawdbot &> /dev/null; then
|
|
152
|
+
return 0
|
|
153
|
+
fi
|
|
154
|
+
return 1
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
# 获取 CLI 名称
|
|
158
|
+
get_cli_name() {
|
|
159
|
+
if command -v openclaw &> /dev/null; then
|
|
160
|
+
echo "openclaw"
|
|
161
|
+
elif command -v clawdbot &> /dev/null; then
|
|
162
|
+
echo "clawdbot"
|
|
163
|
+
else
|
|
164
|
+
echo "openclaw"
|
|
165
|
+
fi
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
# 读取配置信息
|
|
169
|
+
read_config() {
|
|
170
|
+
local config_dir=""
|
|
171
|
+
local config_file=""
|
|
172
|
+
|
|
173
|
+
if [ -d "$HOME/.openclaw" ]; then
|
|
174
|
+
config_dir="$HOME/.openclaw"
|
|
175
|
+
config_file="$config_dir/openclaw.json"
|
|
176
|
+
elif [ -d "$HOME/.clawdbot" ]; then
|
|
177
|
+
config_dir="$HOME/.clawdbot"
|
|
178
|
+
config_file="$config_dir/clawdbot.json"
|
|
179
|
+
fi
|
|
180
|
+
|
|
181
|
+
if [ -f "$config_file" ]; then
|
|
182
|
+
TOKEN=$(grep -o '"token"[[:space:]]*:[[:space:]]*"[^"]*"' "$config_file" | head -1 | sed 's/.*"token"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
|
|
183
|
+
PORT=$(grep -o '"port"[[:space:]]*:[[:space:]]*[0-9]*' "$config_file" | head -1 | sed 's/.*"port"[[:space:]]*:[[:space:]]*\([0-9]*\).*/\1/')
|
|
184
|
+
PORT=${PORT:-18789}
|
|
185
|
+
fi
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
# 显示已安装信息
|
|
189
|
+
show_installed_info() {
|
|
190
|
+
local cli_name=$(get_cli_name)
|
|
191
|
+
read_config
|
|
192
|
+
|
|
193
|
+
echo ""
|
|
194
|
+
echo -e "${GREEN}========================================"
|
|
195
|
+
echo -e "✅ OpenClaw 已安装"
|
|
196
|
+
echo -e "========================================${NC}"
|
|
197
|
+
|
|
198
|
+
echo -e "${CYAN}\n配置信息:${NC}"
|
|
199
|
+
if [ -d "$HOME/.openclaw" ]; then
|
|
200
|
+
echo " 配置目录: $HOME/.openclaw"
|
|
201
|
+
elif [ -d "$HOME/.clawdbot" ]; then
|
|
202
|
+
echo " 配置目录: $HOME/.clawdbot"
|
|
203
|
+
fi
|
|
204
|
+
|
|
205
|
+
if command -v $cli_name &> /dev/null; then
|
|
206
|
+
echo " 版本: $($cli_name --version 2>/dev/null || echo '未知')"
|
|
207
|
+
fi
|
|
208
|
+
|
|
209
|
+
echo " Gateway 端口: ${PORT:-18789}"
|
|
210
|
+
if [ -n "$TOKEN" ]; then
|
|
211
|
+
echo " Gateway Token: $TOKEN"
|
|
212
|
+
fi
|
|
213
|
+
|
|
214
|
+
# 检测是否在 VPS 上
|
|
215
|
+
IS_VPS=false
|
|
216
|
+
if [ -d "/etc/cloud" ] || [ -d "/var/lib/cloud" ] || [ -d "/sys/hypervisor" ]; then
|
|
217
|
+
IS_VPS=true
|
|
218
|
+
fi
|
|
219
|
+
|
|
220
|
+
# 获取服务器公网 IP
|
|
221
|
+
SERVER_IP=""
|
|
222
|
+
if [ "$IS_VPS" = true ]; then
|
|
223
|
+
# 尝试多种方式获取公网 IP
|
|
224
|
+
SERVER_IP=$(curl -s --connect-timeout 2 ifconfig.me 2>/dev/null || \
|
|
225
|
+
curl -s --connect-timeout 2 icanhazip.com 2>/dev/null || \
|
|
226
|
+
curl -s --connect-timeout 2 ipinfo.io/ip 2>/dev/null || \
|
|
227
|
+
hostname -I 2>/dev/null | awk '{print $1}' || \
|
|
228
|
+
echo "<服务器IP>")
|
|
229
|
+
fi
|
|
230
|
+
|
|
231
|
+
if [ "$IS_VPS" = true ]; then
|
|
232
|
+
echo -e "${CYAN}\n📡 Dashboard 访问 (云服务器):${NC}"
|
|
233
|
+
echo -e "\033[90m Gateway 默认绑定 127.0.0.1,外部无法直接访问(安全设计)\033[0m"
|
|
234
|
+
echo ""
|
|
235
|
+
echo -e "${YELLOW} 方式一:SSH 隧道(推荐,安全)${NC}"
|
|
236
|
+
echo -e "\033[90m 在本地电脑执行以下命令,保持终端窗口打开:\033[0m"
|
|
237
|
+
echo " ssh -N -L ${PORT:-18789}:127.0.0.1:${PORT:-18789} root@${SERVER_IP}"
|
|
238
|
+
echo -e "\033[90m 然后在本地浏览器访问:\033[0m"
|
|
239
|
+
echo -e " ${GREEN}http://127.0.0.1:${PORT:-18789}/?token=${TOKEN:-<你的token>}${NC}"
|
|
240
|
+
echo ""
|
|
241
|
+
echo -e "${YELLOW} 方式二:直接暴露端口(不推荐,有安全风险)${NC}"
|
|
242
|
+
echo -e "\033[90m 1. 修改配置文件 ~/.openclaw/openclaw.json\033[0m"
|
|
243
|
+
echo -e "\033[90m 将 \"bind\": \"loopback\" 改为 \"bind\": \"all\"\033[0m"
|
|
244
|
+
echo -e "\033[90m 2. 在云服务器控制台开放端口 ${PORT:-18789}\033[0m"
|
|
245
|
+
echo -e "\033[90m - 腾讯云:安全组 → 入站规则 → 添加 TCP ${PORT:-18789}\033[0m"
|
|
246
|
+
echo -e "\033[90m - 阿里云:安全组 → 配置规则 → 添加 TCP ${PORT:-18789}\033[0m"
|
|
247
|
+
echo -e "\033[90m 3. 重启 Gateway:$cli_name gateway restart\033[0m"
|
|
248
|
+
echo -e "\033[90m 4. 访问:http://${SERVER_IP}:${PORT:-18789}/?token=...\033[0m"
|
|
249
|
+
else
|
|
250
|
+
echo -e "${CYAN}\nDashboard 访问:${NC}"
|
|
251
|
+
echo -e " ${YELLOW}http://127.0.0.1:${PORT:-18789}/?token=${TOKEN:-<你的token>}${NC}"
|
|
252
|
+
fi
|
|
253
|
+
|
|
254
|
+
echo -e "${CYAN}\n常用命令:${NC}"
|
|
255
|
+
echo " 查看状态: $cli_name status"
|
|
256
|
+
echo " 查看日志: $cli_name gateway logs"
|
|
257
|
+
echo " 重启服务: $cli_name gateway restart"
|
|
258
|
+
echo " 诊断问题: $cli_name doctor"
|
|
259
|
+
|
|
260
|
+
echo -e "${CYAN}\n配置 AI 模型:${NC}"
|
|
261
|
+
echo " npx openclawapi@latest preset-claude"
|
|
262
|
+
|
|
263
|
+
echo -e "${CYAN}\n配置聊天渠道:${NC}"
|
|
264
|
+
echo " Discord: npx openclawdc"
|
|
265
|
+
echo " 飞书: npx openclawfs"
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
# 显示菜单并获取选择
|
|
269
|
+
show_menu() {
|
|
270
|
+
echo -e "${CYAN}\n请选择操作:${NC}"
|
|
271
|
+
echo -e " ${YELLOW}1${NC}. 检查并更新 OpenClaw"
|
|
272
|
+
echo -e " ${YELLOW}2${NC}. 卸载后重新安装(会清除配置)"
|
|
273
|
+
echo -e " ${YELLOW}0${NC}. 退出"
|
|
274
|
+
echo ""
|
|
275
|
+
|
|
276
|
+
# 从 /dev/tty 读取,支持管道环境
|
|
277
|
+
if [ -t 0 ]; then
|
|
278
|
+
# 标准输入是终端
|
|
279
|
+
read -p "请输入选项编号: " choice
|
|
280
|
+
else
|
|
281
|
+
# 管道环境,从 /dev/tty 读取
|
|
282
|
+
echo -n "请输入选项编号: "
|
|
283
|
+
read choice < /dev/tty
|
|
284
|
+
fi
|
|
285
|
+
echo "$choice"
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
# 更新 OpenClaw
|
|
289
|
+
update_openclaw() {
|
|
290
|
+
local cli_name=$(get_cli_name)
|
|
291
|
+
|
|
292
|
+
echo -e "${CYAN}\n检查更新中...${NC}"
|
|
293
|
+
|
|
294
|
+
local current_version=$($cli_name --version 2>/dev/null || echo "未知")
|
|
295
|
+
echo " 当前版本: $current_version"
|
|
296
|
+
|
|
297
|
+
log_info "正在更新到最新版本..."
|
|
298
|
+
npm install -g ${cli_name}@latest
|
|
299
|
+
|
|
300
|
+
local new_version=$($cli_name --version 2>/dev/null || echo "未知")
|
|
301
|
+
if [ "$new_version" != "$current_version" ]; then
|
|
302
|
+
log_success "更新完成: $current_version → $new_version"
|
|
303
|
+
else
|
|
304
|
+
log_success "已是最新版本: $new_version"
|
|
305
|
+
fi
|
|
306
|
+
|
|
307
|
+
echo -e "${CYAN}\n重启 Gateway 服务...${NC}"
|
|
308
|
+
if $cli_name gateway restart 2>/dev/null; then
|
|
309
|
+
log_success "Gateway 已重启"
|
|
310
|
+
else
|
|
311
|
+
log_warn "Gateway 重启失败,请手动重启: $cli_name gateway restart"
|
|
312
|
+
fi
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
# 卸载 OpenClaw
|
|
316
|
+
uninstall_openclaw() {
|
|
317
|
+
local cli_name=$(get_cli_name)
|
|
318
|
+
|
|
319
|
+
echo -e "${CYAN}\n开始卸载...${NC}"
|
|
320
|
+
|
|
321
|
+
# 停止服务
|
|
322
|
+
log_info "停止 Gateway 服务..."
|
|
323
|
+
$cli_name gateway stop 2>/dev/null || true
|
|
324
|
+
|
|
325
|
+
# 卸载 npm 包
|
|
326
|
+
log_info "卸载 npm 包..."
|
|
327
|
+
npm uninstall -g $cli_name 2>/dev/null || true
|
|
328
|
+
log_success "npm 包已卸载"
|
|
329
|
+
|
|
330
|
+
# 删除配置目录
|
|
331
|
+
if [ -d "$HOME/.openclaw" ]; then
|
|
332
|
+
log_info "删除配置目录..."
|
|
333
|
+
rm -rf "$HOME/.openclaw"
|
|
334
|
+
log_success "配置目录已删除"
|
|
335
|
+
fi
|
|
336
|
+
if [ -d "$HOME/.clawdbot" ]; then
|
|
337
|
+
rm -rf "$HOME/.clawdbot"
|
|
338
|
+
fi
|
|
339
|
+
|
|
340
|
+
# 删除服务持久化配置
|
|
341
|
+
if [ "$OS" == "macos" ]; then
|
|
342
|
+
local plist="$HOME/Library/LaunchAgents/com.openclaw.gateway.plist"
|
|
343
|
+
if [ -f "$plist" ]; then
|
|
344
|
+
launchctl unload "$plist" 2>/dev/null || true
|
|
345
|
+
rm -f "$plist"
|
|
346
|
+
log_success "macOS 服务配置已删除"
|
|
347
|
+
fi
|
|
348
|
+
elif [ "$OS" == "linux" ]; then
|
|
349
|
+
systemctl --user stop openclaw 2>/dev/null || true
|
|
350
|
+
systemctl --user disable openclaw 2>/dev/null || true
|
|
351
|
+
local service="$HOME/.config/systemd/user/openclaw.service"
|
|
352
|
+
if [ -f "$service" ]; then
|
|
353
|
+
rm -f "$service"
|
|
354
|
+
systemctl --user daemon-reload 2>/dev/null || true
|
|
355
|
+
log_success "Linux 服务配置已删除"
|
|
356
|
+
fi
|
|
357
|
+
fi
|
|
358
|
+
|
|
359
|
+
log_success "卸载完成"
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
# 安装 OpenClaw
|
|
363
|
+
install_openclaw() {
|
|
364
|
+
echo ""
|
|
365
|
+
log_info "开始安装 OpenClaw..."
|
|
366
|
+
echo ""
|
|
367
|
+
|
|
368
|
+
# 清除 npm 缓存确保获取最新版本
|
|
369
|
+
log_info "清除 npm 缓存..."
|
|
370
|
+
npm cache clean --force 2>/dev/null || true
|
|
371
|
+
|
|
372
|
+
# 运行安装
|
|
373
|
+
npx --yes openclawsetup@latest
|
|
374
|
+
}
|
|
375
|
+
|
|
148
376
|
# 主流程
|
|
149
377
|
main() {
|
|
150
378
|
# 1. 检查/安装 Node.js
|
|
@@ -162,15 +390,33 @@ main() {
|
|
|
162
390
|
exit 1
|
|
163
391
|
fi
|
|
164
392
|
|
|
165
|
-
# 3.
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
393
|
+
# 3. 检测 OpenClaw 安装状态
|
|
394
|
+
if check_openclaw; then
|
|
395
|
+
# 已安装:显示信息和菜单
|
|
396
|
+
show_installed_info
|
|
169
397
|
|
|
170
|
-
|
|
171
|
-
npm cache clean --force openclawsetup 2>/dev/null || true
|
|
398
|
+
choice=$(show_menu)
|
|
172
399
|
|
|
173
|
-
|
|
400
|
+
case "$choice" in
|
|
401
|
+
1)
|
|
402
|
+
update_openclaw
|
|
403
|
+
;;
|
|
404
|
+
2)
|
|
405
|
+
uninstall_openclaw
|
|
406
|
+
echo ""
|
|
407
|
+
echo -e "${GREEN}✓ 卸载完成,开始重新安装...${NC}"
|
|
408
|
+
echo ""
|
|
409
|
+
install_openclaw
|
|
410
|
+
;;
|
|
411
|
+
*)
|
|
412
|
+
echo -e "\033[90m\n已退出\033[0m"
|
|
413
|
+
exit 0
|
|
414
|
+
;;
|
|
415
|
+
esac
|
|
416
|
+
else
|
|
417
|
+
# 未安装:直接安装
|
|
418
|
+
install_openclaw
|
|
419
|
+
fi
|
|
174
420
|
}
|
|
175
421
|
|
|
176
422
|
main "$@"
|