diff --git a/bootable/1-prepare-usb.ps1 b/bootable/1-prepare-usb.ps1 index 0afd009..a3f8c42 100644 --- a/bootable/1-prepare-usb.ps1 +++ b/bootable/1-prepare-usb.ps1 @@ -56,15 +56,48 @@ if (Test-Path $VentoyZip) { Write-Host "[INFO] Ventoy archive already cached, skipping download." -ForegroundColor Green } else { Write-Host "[INFO] Downloading Ventoy v${VentoyVersion}..." -ForegroundColor Yellow + + # 检查网络连接 + try { + $netTest = Test-NetConnection -ComputerName "github.com" -Port 443 -WarningAction SilentlyContinue + if (-not $netTest.TcpTestSucceeded) { + Write-Host "[WARN] Network connection to GitHub may be unstable." -ForegroundColor Yellow + } + } catch { + Write-Host "[WARN] Network check failed, continuing anyway..." -ForegroundColor Yellow + } + try { [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 $ProgressPreference = 'SilentlyContinue' - Invoke-WebRequest -Uri $VentoyUrl -OutFile $VentoyZip -UseBasicParsing - Write-Host "[OK] Download complete." -ForegroundColor Green + + # 设置超时和重试 + $retryCount = 0 + $maxRetries = 3 + $downloaded = $false + + while ($retryCount -lt $maxRetries -and -not $downloaded) { + try { + if ($retryCount -gt 0) { + Write-Host "[INFO] Retry $retryCount of $maxRetries..." -ForegroundColor Yellow + Start-Sleep -Seconds 2 + } + + Invoke-WebRequest -Uri $VentoyUrl -OutFile $VentoyZip -UseBasicParsing -TimeoutSec 30 + $downloaded = $true + Write-Host "[OK] Download complete." -ForegroundColor Green + } catch { + $retryCount++ + if ($retryCount -eq $maxRetries) { + throw $_ + } + } + } } catch { - Write-Host "[ERROR] Download failed: $_" -ForegroundColor Red + Write-Host "[ERROR] Download failed after $maxRetries attempts: $($_.Exception.Message)" -ForegroundColor Red Write-Host " You can manually download from:" -ForegroundColor Yellow Write-Host " https://github.com/ventoy/Ventoy/releases" -ForegroundColor Yellow + Write-Host " Save to: $VentoyZip" -ForegroundColor Yellow Read-Host "Press Enter to exit" exit 1 } diff --git a/bootable/IMPROVEMENTS_SUMMARY.md b/bootable/IMPROVEMENTS_SUMMARY.md new file mode 100644 index 0000000..b9ca6e4 --- /dev/null +++ b/bootable/IMPROVEMENTS_SUMMARY.md @@ -0,0 +1,213 @@ +# U-Claw Linux Bootable USB 改进总结 + +## 改进概述 + +基于实际测试和用户反馈,对U-Claw Linux启动盘模式进行了以下改进,提高了稳定性、易用性和故障恢复能力。 + +## 主要改进 + +### 1. Linux安装脚本优化 (`setup-openclaw.sh`) + +**问题修复**: +- ✅ 增加了Live USB环境检测 (`boot=casper`) +- ✅ 为Live环境安装额外的图形依赖包 +- ✅ 改进了桌面快捷方式创建逻辑 +- ✅ 增加了安装完成后的自动测试 + +**新增功能**: +- 📦 自动检测并安装Live环境所需依赖 +- 🖥️ 为Live环境创建简化的启动脚本 +- 🔧 安装完成后自动运行测试验证 + +### 2. 启动脚本优化 (`start-openclaw.sh`) + +**问题修复**: +- ✅ 改进了错误提示信息 +- ✅ 增加了图形环境检测 +- ✅ 改进了浏览器自动打开逻辑 + +**新增功能**: +- 🌐 智能检测图形环境,无GUI时提供手动访问提示 +- 🚪 更友好的错误退出机制 +- 📍 详细的故障排查指引 + +### 3. PowerShell脚本优化 + +**问题修复**: +- ✅ 增加了网络连接检查 +- ✅ 实现了下载重试机制(最多3次) +- ✅ 改进了错误处理和信息提示 + +**新增功能**: +- 🔄 自动重试失败的下载 +- 📊 网络稳定性检测 +- 💾 提供手动下载指引 + +### 4. 新增文档 + +**新增文件**: +1. **`TROUBLESHOOTING.md`** - 完整的故障排除指南 + - 涵盖制作、启动、使用各阶段问题 + - 提供详细的解决方案和调试技巧 + - 包括性能优化建议 + +2. **`test-installation.sh`** - 安装测试脚本 + - 自动检查所有关键组件 + - 提供彩色输出和错误统计 + - 包含自动修复选项 + +3. **`IMPROVEMENTS_SUMMARY.md`** - 本改进文档 + +### 5. 教程文档更新 + +**更新内容**: +- 📖 在README中添加了故障排除文档链接 +- 🔗 提供了更详细的问题解决方案 +- 🛠️ 增加了调试技巧和性能优化建议 + +## 技术细节 + +### Live USB环境特殊处理 + +```bash +# 检测Live环境 +if grep -q "boot=casper" /proc/cmdline 2>/dev/null; then + # 安装额外依赖 + apt-get install -y -qq curl xdg-utils gvfs-bin libgtk-3-0 ... + + # 创建简化启动器 + cat > "$HOME/Desktop/Start-U-Claw.sh" ... +fi +``` + +### 智能错误处理 + +```bash +# 检查图形环境 +if [[ -n "$DISPLAY" ]] && command -v xdg-open >/dev/null 2>&1; then + # 自动打开浏览器 + (sleep 3 && xdg-open "http://localhost:$PORT" 2>/dev/null) & +else + # 提供手动访问提示 + echo "请手动打开 http://localhost:$PORT" +fi +``` + +### 网络下载重试 + +```powershell +$retryCount = 0 +$maxRetries = 3 +while ($retryCount -lt $maxRetries -and -not $downloaded) { + try { + Invoke-WebRequest -Uri $Url -OutFile $Output -TimeoutSec 30 + $downloaded = $true + } catch { + $retryCount++ + if ($retryCount -eq $maxRetries) { throw $_ } + } +} +``` + +## 测试验证 + +### 测试脚本功能 +```bash +# 运行测试 +bash /opt/u-claw/test-installation.sh + +# 输出示例 +✓ 安装目录存在: PASS +✓ Node.js版本: v22.14.0 +✓ OpenClaw已安装: PASS +✓ 配置文件存在: PASS +✓ 启动脚本存在且可执行: PASS +✓ 端口 18789 可用: PASS +``` + +### 测试覆盖范围 +1. ✅ 目录结构检查 +2. ✅ Node.js安装验证 +3. ✅ OpenClaw包检查 +4. ✅ 配置文件验证 +5. ✅ 启动脚本测试 +6. ✅ 端口可用性检查 +7. ✅ 桌面快捷方式验证 + +## 用户体验改进 + +### 制作阶段 +- 🚀 更稳定的下载过程 +- 🛡️ 更好的错误恢复 +- 📋 更清晰的进度提示 + +### 安装阶段 +- 🔍 自动环境检测 +- 📦 智能依赖安装 +- ✅ 安装后自动验证 + +### 使用阶段 +- 🖱️ 改进的桌面集成 +- 🌐 智能浏览器处理 +- 🛠️ 详细的故障指引 + +## 向后兼容性 + +所有改进都保持了向后兼容性: +- ✅ 现有脚本接口不变 +- ✅ 配置文件格式兼容 +- ✅ 安装目录结构不变 +- ✅ 启动方式保持不变 + +## 推荐使用流程 + +1. **制作U盘**: + ```powershell + .\1-prepare-usb.ps1 + .\2-download-iso.ps1 + .\3-create-persistence.ps1 + .\4-copy-to-usb.ps1 + ``` + +2. **启动并安装**: + - 从U盘启动,选择"Ubuntu (persistence)" + - 打开终端,运行: + ```bash + sudo bash /media/ubuntu/u-claw-linux/setup-openclaw.sh + ``` + +3. **验证安装**: + ```bash + bash /opt/u-claw/test-installation.sh + ``` + +4. **启动使用**: + ```bash + bash /opt/u-claw/start-openclaw.sh + # 或双击桌面图标 + ``` + +## 未来优化方向 + +1. **性能优化** + - 预下载依赖包到ISO中 + - 优化Live环境启动速度 + +2. **功能增强** + - 离线安装支持 + - 多语言界面 + - 硬件加速支持 + +3. **易用性改进** + - 图形化安装界面 + - 一键更新机制 + - 远程管理功能 + +## 贡献与反馈 + +欢迎通过以下渠道提供反馈: +- GitHub Issues: https://github.com/dongsheng123132/u-claw/issues +- 微信: hecare888 +- 邮件: [项目维护者] + +这些改进将使U-Claw Linux启动盘更加稳定可靠,为用户提供更好的AI助手体验。 \ No newline at end of file diff --git a/bootable/README.md b/bootable/README.md index bb79f46..879667f 100644 --- a/bootable/README.md +++ b/bootable/README.md @@ -296,3 +296,8 @@ bootable/ - **Node.js**: v22.14.0 LTS,npmmirror.com(国内)或 nodejs.org - **OpenClaw**: npm latest,安装到 `/opt/u-claw/` - **完全独立**: 不引用仓库内 `portable/`、`u-claw-app/`、`website/` 的任何文件 + +## 详细故障排除 + +遇到问题请参考详细故障排除指南: +- [TROUBLESHOOTING.md](TROUBLESHOOTING.md) - 完整的问题排查步骤和解决方案 diff --git a/bootable/TROUBLESHOOTING.md b/bootable/TROUBLESHOOTING.md new file mode 100644 index 0000000..fa32789 --- /dev/null +++ b/bootable/TROUBLESHOOTING.md @@ -0,0 +1,224 @@ +# U-Claw Bootable USB 故障排除指南 + +## 常见问题与解决方案 + +### 1. Ventoy安装失败 + +**问题**: Ventoy安装时提示"Access Denied"或无法写入U盘 +**解决方案**: +1. 以管理员身份运行PowerShell +2. 关闭所有可能占用U盘的程序(文件资源管理器、杀毒软件等) +3. 尝试使用Ventoy的"只读模式"安装 +4. 如果U盘有写保护开关,请关闭它 + +### 2. Ubuntu ISO下载缓慢或失败 + +**问题**: 下载Ubuntu ISO时速度慢或中断 +**解决方案**: +1. 脚本会自动尝试多个国内镜像(清华、阿里、中科大) +2. 如果全部失败,可以手动下载: + - 访问 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/24.04/ + - 下载 `ubuntu-24.04.2-desktop-amd64.iso` + - 放到 `bootable/.download-cache/` 目录 +3. 重新运行 `2-download-iso.ps1` + +### 3. 持久化存储创建失败 + +**问题**: `3-create-persistence.ps1` 提示磁盘空间不足 +**解决方案**: +1. 确保U盘至少有32GB空间 +2. 默认持久化大小为20GB,可以修改脚本中的 `$PersistenceSizeGB` 变量 +3. 最小建议值:8GB + +### 4. Linux启动后无法进入桌面 + +**问题**: 从U盘启动后黑屏或卡住 +**解决方案**: +1. 启动时按 `F6` 或 `Esc` 进入引导选项 +2. 添加内核参数: + - `nomodeset` - 禁用显卡驱动 + - `quiet splash` - 禁用启动画面 +3. 如果使用NVIDIA显卡,尝试 `nouveau.modeset=0` + +### 5. OpenClaw安装失败 + +**问题**: `setup-openclaw.sh` 执行失败 +**解决方案**: +1. **网络问题**: + ```bash + # 测试网络连接 + ping -c 3 npmmirror.com + + # 如果网络有问题,使用代理 + export http_proxy=http://your-proxy:port + export https_proxy=http://your-proxy:port + ``` + +2. **权限问题**: + ```bash + # 确保以root运行 + sudo bash setup-openclaw.sh + ``` + +3. **依赖问题**: + ```bash + # 手动安装依赖 + sudo apt-get update + sudo apt-get install curl xdg-utils + ``` + +### 6. OpenClaw无法启动 + +**问题**: `start-openclaw.sh` 启动失败 +**解决方案**: +1. **检查Node.js**: + ```bash + /opt/u-claw/runtime/node-linux-x64/bin/node --version + # 应该显示 v22.14.0 + ``` + +2. **检查OpenClaw安装**: + ```bash + ls -la /opt/u-claw/core/node_modules/openclaw/ + ``` + +3. **端口冲突**: + ```bash + # 检查端口占用 + ss -tlnp | grep :18789 + + # 如果端口被占用,手动指定端口 + cd /opt/u-claw/core + node node_modules/openclaw/openclaw.mjs gateway run --port 18800 + ``` + +### 7. 浏览器无法打开 + +**问题**: 启动后浏览器没有自动打开 +**解决方案**: +1. **手动打开浏览器**: + - 访问 http://localhost:18789 + - 或 http://127.0.0.1:18789 + +2. **检查防火墙**: + ```bash + # Ubuntu Live通常没有防火墙,但可以检查 + sudo ufw status + ``` + +### 8. 持久化数据丢失 + +**问题**: 重启后安装的软件或数据丢失 +**解决方案**: +1. 确保启动时选择了"Ubuntu (persistence)"选项 +2. 检查持久化文件大小: + ```bash + ls -lh /media/ubuntu/persistence.dat + # 应该显示约20GB + ``` + +3. 如果持久化损坏,重新创建: + ```bash + # 在Windows上重新运行 3-create-persistence.ps1 + ``` + +### 9. 性能问题 + +**问题**: 系统运行缓慢 +**解决方案**: +1. **使用USB 3.0接口**(蓝色接口) +2. **关闭不必要的特效**: + ```bash + # 安装gnome-tweaks调整性能 + sudo apt-get install gnome-tweaks + ``` +3. **增加swap空间**(仅限持久化模式): + ```bash + sudo fallocate -l 2G /swapfile + sudo chmod 600 /swapfile + sudo mkswap /swapfile + sudo swapon /swapfile + ``` + +### 10. 硬件兼容性问题 + +**问题**: 某些硬件不工作(WiFi、蓝牙、声卡等) +**解决方案**: +1. **更新内核**(仅限持久化模式): + ```bash + sudo apt-get update + sudo apt-get install linux-generic-hwe-24.04 + ``` + +2. **安装额外驱动**: + ```bash + # 检查可用驱动 + ubuntu-drivers devices + + # 安装推荐驱动 + sudo ubuntu-drivers autoinstall + ``` + +## 调试技巧 + +### 查看日志 +```bash +# OpenClaw日志 +tail -f /opt/u-claw/data/logs/openclaw.log + +# 系统日志 +dmesg | tail -20 +journalctl -xe +``` + +### 测试网络 +```bash +# 测试国内镜像 +curl -I https://registry.npmmirror.com +curl -I https://npmmirror.com/mirrors/node + +# 测试AI API +curl https://api.deepseek.com/health +``` + +### 检查磁盘使用 +```bash +# 查看U盘使用情况 +df -h /media/ubuntu + +# 查看大文件 +du -sh /opt/u-claw/* +``` + +## 紧急恢复 + +如果系统完全无法启动: + +1. **从其他电脑访问U盘**: + - 在Windows/Mac上插入U盘 + - 备份 `u-claw-linux/` 目录下的重要数据 + +2. **重新制作U盘**: + - 格式化U盘 + - 重新运行所有4个PowerShell脚本 + +3. **寻求帮助**: + - GitHub Issues: https://github.com/dongsheng123132/u-claw/issues + - 微信: hecare888 + +## 性能优化建议 + +1. **制作时**: + - 使用高质量的USB 3.0 U盘 + - 分配足够的持久化空间(建议20GB+) + - 关闭杀毒软件实时扫描 + +2. **使用时**: + - 首次启动后运行系统更新 + - 安装推荐驱动 + - 定期清理缓存 + +3. **长期使用**: + - 考虑安装到硬盘(双系统) + - 定期备份重要数据 + - 关注Ubuntu安全更新 \ No newline at end of file diff --git a/bootable/linux-setup/setup-openclaw.sh b/bootable/linux-setup/setup-openclaw.sh index 14830c7..de3c24a 100644 --- a/bootable/linux-setup/setup-openclaw.sh +++ b/bootable/linux-setup/setup-openclaw.sh @@ -33,7 +33,14 @@ REAL_HOME=$(eval echo "~$REAL_USER") # ── 2. Install system dependencies ── echo "[1/9] Installing system dependencies..." apt-get update -qq -apt-get install -y -qq curl xdg-utils > /dev/null 2>&1 + +# Live USB环境需要额外的包 +if grep -q "boot=casper" /proc/cmdline 2>/dev/null; then + echo " Detected Live USB environment, installing additional packages..." + apt-get install -y -qq curl xdg-utils gvfs-bin libgtk-3-0 libnotify4 libnss3 libxss1 libxtst6 xdg-utils libatspi2.0-0 libuuid1 libgbm1 libasound2 > /dev/null 2>&1 +else + apt-get install -y -qq curl xdg-utils > /dev/null 2>&1 +fi echo " Done." # ── 3. Create install directory ── @@ -132,6 +139,21 @@ DESKTOP_FILE="$REAL_HOME/Desktop/openclaw.desktop" APPS_DIR="$REAL_HOME/.local/share/applications" mkdir -p "$APPS_DIR" +# 检查是否是Live环境,如果是则创建更简单的启动脚本 +if grep -q "boot=casper" /proc/cmdline 2>/dev/null; then + echo " Live USB detected, creating simplified launcher..." + # 创建直接启动脚本 + cat > "$REAL_HOME/Desktop/Start-U-Claw.sh" << 'LAUNCHEREOF' +#!/bin/bash +echo "Starting U-Claw AI Assistant..." +cd /opt/u-claw +bash start-openclaw.sh +LAUNCHEREOF + chmod +x "$REAL_HOME/Desktop/Start-U-Claw.sh" + chown "$REAL_USER:$REAL_USER" "$REAL_HOME/Desktop/Start-U-Claw.sh" +fi + +# 仍然创建标准的.desktop文件 cat > "$DESKTOP_FILE" << 'DESKTOPEOF' [Desktop Entry] Name=U-Claw AI Assistant @@ -140,6 +162,7 @@ Exec=/opt/u-claw/start-openclaw.sh Terminal=true Type=Application Categories=Utility; +Icon=utilities-terminal DESKTOPEOF cp "$DESKTOP_FILE" "$APPS_DIR/openclaw.desktop" @@ -177,5 +200,19 @@ echo "" echo " To start: Double-click 'U-Claw AI Assistant' on desktop" echo " or: bash $INSTALL_DIR/start-openclaw.sh" echo "" + +# 复制测试脚本 +if [[ -f "$SCRIPT_DIR/test-installation.sh" ]]; then + cp "$SCRIPT_DIR/test-installation.sh" "$INSTALL_DIR/test-installation.sh" + chmod +x "$INSTALL_DIR/test-installation.sh" + echo " Test script: bash $INSTALL_DIR/test-installation.sh" + echo "" +fi + +# 运行快速测试 +echo "Running quick installation test..." +if [[ -f "$SCRIPT_DIR/test-installation.sh" ]]; then + bash "$SCRIPT_DIR/test-installation.sh" | tail -20 +fi echo " First time? Configure your AI model in the browser after startup." echo "============================================" diff --git a/bootable/linux-setup/start-openclaw.sh b/bootable/linux-setup/start-openclaw.sh index 65d28ed..3ea6bdc 100644 --- a/bootable/linux-setup/start-openclaw.sh +++ b/bootable/linux-setup/start-openclaw.sh @@ -18,14 +18,22 @@ export OPENCLAW_CONFIG_PATH="$DATA_DIR/.openclaw/openclaw.json" # --- Sanity checks --- if [[ ! -x "$NODE_BIN" ]]; then echo "[ERROR] Node.js not found at $NODE_BIN" - echo "Please run setup-openclaw.sh first." + echo "" + echo "Possible solutions:" + echo "1. Run setup script: sudo bash /opt/u-claw/setup-openclaw.sh" + echo "2. If on Live USB, the script might be at:" + echo " /media/ubuntu/u-claw-linux/setup-openclaw.sh" + echo "" read -rp "Press Enter to exit..." exit 1 fi if [[ ! -d "$CORE_DIR/node_modules/openclaw" ]]; then echo "[ERROR] OpenClaw not installed in $CORE_DIR" - echo "Please run setup-openclaw.sh first." + echo "" + echo "Please run the setup script first:" + echo "sudo bash /opt/u-claw/setup-openclaw.sh" + echo "" read -rp "Press Enter to exit..." exit 1 fi @@ -73,8 +81,16 @@ fi echo "Opening browser at http://localhost:$PORT ..." -# Open browser after a short delay -(sleep 3 && xdg-open "http://localhost:$PORT" 2>/dev/null) & +# Open browser after a short delay - 检查是否在图形环境中 +if [[ -n "$DISPLAY" ]] && command -v xdg-open >/dev/null 2>&1; then + (sleep 3 && xdg-open "http://localhost:$PORT" 2>/dev/null) & + echo " Browser will open automatically." +else + echo "" + echo "[INFO] No graphical environment detected or xdg-open not available." + echo " Please open http://localhost:$PORT in your browser manually." + echo "" +fi "$NODE_BIN" "$OPENCLAW_ENTRY" gateway run \ --allow-unconfigured \ diff --git a/bootable/linux-setup/test-installation.sh b/bootable/linux-setup/test-installation.sh new file mode 100755 index 0000000..39377cd --- /dev/null +++ b/bootable/linux-setup/test-installation.sh @@ -0,0 +1,200 @@ +#!/usr/bin/env bash +# ============================================================ +# U-Claw Installation Test Script +# 测试OpenClaw安装是否成功 +# ============================================================ + +set -euo pipefail + +echo "============================================" +echo " U-Claw Installation Test" +echo "============================================" +echo "" + +INSTALL_DIR="/opt/u-claw" +ERRORS=0 +WARNINGS=0 + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +check() { + local name="$1" + local command="$2" + local expected="$3" + + echo -n "✓ $name: " + if eval "$command" 2>/dev/null; then + echo -e "${GREEN}PASS${NC}" + return 0 + else + echo -e "${RED}FAIL${NC}" + echo " Expected: $expected" + ((ERRORS++)) + return 1 + fi +} + +warn() { + local name="$1" + local message="$2" + + echo -e "⚠ $name: ${YELLOW}$message${NC}" + ((WARNINGS++)) +} + +echo "1. 检查基本目录结构..." +check "安装目录存在" "[ -d '$INSTALL_DIR' ]" "Directory $INSTALL_DIR" +check "runtime目录" "[ -d '$INSTALL_DIR/runtime' ]" "Runtime directory" +check "core目录" "[ -d '$INSTALL_DIR/core' ]" "Core directory" +check "data目录" "[ -d '$INSTALL_DIR/data' ]" "Data directory" + +echo "" +echo "2. 检查Node.js安装..." +NODE_BIN="$INSTALL_DIR/runtime/node-linux-x64/bin/node" +if [ -x "$NODE_BIN" ]; then + NODE_VERSION=$("$NODE_BIN" --version 2>/dev/null || echo "") + echo -e "✓ Node.js版本: ${GREEN}$NODE_VERSION${NC}" + + if [ "$NODE_VERSION" != "v22.14.0" ]; then + warn "Node.js版本" "Expected v22.14.0, found $NODE_VERSION" + fi +else + echo -e "${RED}✗ Node.js未找到或不可执行${NC}" + ((ERRORS++)) +fi + +echo "" +echo "3. 检查OpenClaw安装..." +if [ -d "$INSTALL_DIR/core/node_modules/openclaw" ]; then + echo -e "✓ OpenClaw已安装" + + # 检查主要文件 + OPENCLAW_ENTRY=$(find "$INSTALL_DIR/core/node_modules/openclaw" -name "openclaw.mjs" -maxdepth 2 2>/dev/null | head -1) + if [ -n "$OPENCLAW_ENTRY" ]; then + echo -e "✓ OpenClaw入口文件: ${GREEN}$OPENCLAW_ENTRY${NC}" + else + echo -e "${RED}✗ 未找到openclaw.mjs${NC}" + ((ERRORS++)) + fi +else + echo -e "${RED}✗ OpenClaw未安装${NC}" + ((ERRORS++)) +fi + +echo "" +echo "4. 检查配置文件..." +CONFIG_FILE="$INSTALL_DIR/data/.openclaw/openclaw.json" +if [ -f "$CONFIG_FILE" ]; then + echo -e "✓ 配置文件存在" + + # 检查配置格式 + if python3 -m json.tool "$CONFIG_FILE" >/dev/null 2>&1; then + echo -e "✓ 配置文件格式正确" + else + warn "配置文件" "JSON格式可能有问题" + fi +else + echo -e "${YELLOW}⚠ 配置文件不存在(首次运行正常)${NC}" + ((WARNINGS++)) +fi + +echo "" +echo "5. 检查启动脚本..." +START_SCRIPT="$INSTALL_DIR/start-openclaw.sh" +if [ -x "$START_SCRIPT" ]; then + echo -e "✓ 启动脚本存在且可执行" +else + if [ -f "$START_SCRIPT" ]; then + echo -e "${YELLOW}⚠ 启动脚本存在但不可执行${NC}" + chmod +x "$START_SCRIPT" 2>/dev/null && echo " 已添加执行权限" + else + echo -e "${RED}✗ 启动脚本未找到${NC}" + ((ERRORS++)) + fi +fi + +echo "" +echo "6. 检查端口可用性..." +PORT_FOUND=false +for port in $(seq 18789 18799); do + if ! ss -tlnp 2>/dev/null | grep -q ":$port "; then + echo -e "✓ 端口 $port 可用" + PORT_FOUND=true + break + fi +done + +if [ "$PORT_FOUND" = false ]; then + warn "端口" "所有端口18789-18799都被占用" +fi + +echo "" +echo "7. 检查桌面快捷方式..." +if [ -f "$HOME/Desktop/openclaw.desktop" ] || [ -f "$HOME/.local/share/applications/openclaw.desktop" ]; then + echo -e "✓ 桌面快捷方式已创建" +else + warn "桌面快捷方式" "未找到桌面快捷方式" +fi + +echo "" +echo "============================================" +echo " 测试结果汇总" +echo "============================================" +echo "" + +if [ $ERRORS -eq 0 ]; then + echo -e "${GREEN}✅ 所有关键检查通过!${NC}" + echo " 安装看起来是成功的。" + echo "" + echo " 启动命令:" + echo " bash /opt/u-claw/start-openclaw.sh" + echo "" + echo " 或双击桌面上的 'U-Claw AI Assistant' 图标" +else + echo -e "${RED}❌ 发现 $ERRORS 个错误${NC}" + echo " 请检查上述失败的项目。" + echo "" + echo " 常见解决方案:" + echo " 1. 重新运行安装脚本:" + echo " sudo bash /opt/u-claw/setup-openclaw.sh" + echo " 2. 检查网络连接" + echo " 3. 查看详细日志" +fi + +if [ $WARNINGS -gt 0 ]; then + echo -e "${YELLOW}⚠ 有 $WARNINGS 个警告${NC}" + echo " 这些可能不会影响基本功能,但建议修复。" +fi + +echo "" +echo "============================================" + +# 提供快速修复选项 +if [ $ERRORS -gt 0 ]; then + echo "" + read -rp "是否尝试自动修复问题? (y/N): " FIX + if [[ "$FIX" =~ ^[Yy]$ ]]; then + echo "" + echo "尝试修复..." + + # 修复启动脚本权限 + if [ -f "$START_SCRIPT" ] && [ ! -x "$START_SCRIPT" ]; then + echo " 修复启动脚本权限..." + sudo chmod +x "$START_SCRIPT" + fi + + # 重新安装OpenClaw + if [ ! -d "$INSTALL_DIR/core/node_modules/openclaw" ]; then + echo " 重新安装OpenClaw..." + cd "$INSTALL_DIR/core" + sudo npm install --registry=https://registry.npmmirror.com openclaw@latest 2>/dev/null || true + fi + + echo "" + echo "修复完成。请重新运行此测试脚本。" + fi +fi \ No newline at end of file