#!/bin/bash # ============================================================================ # OpenClaw浏览器环境一键安装脚本 # ============================================================================ # 用途:在Ubuntu/Debian服务器上安装Chromium浏览器,供OpenClaw Gateway使用 # 适用场景:无桌面环境的服务器,需要浏览器进行自动化操作 # ============================================================================ set -e # 遇到错误立即退出 # 颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查是否为root用户 check_root() { if [ "$EUID" -ne 0 ]; then log_error "请使用sudo运行此脚本: sudo $0" exit 1 fi } # 检测系统 detect_os() { if [ -f /etc/os-release ]; then . /etc/os-release OS=$ID OS_VERSION=$VERSION_ID else log_error "无法检测操作系统类型" exit 1 fi log_info "检测到系统: $OS $OS_VERSION" } # 检查snap是否可用 check_snap() { if command -v snap &> /dev/null; then log_info "snap已安装" return 0 else log_warn "snap未安装" return 1 fi } # 安装snap install_snap() { log_info "正在安装snap..." case $OS in ubuntu|debian) apt update apt install -y snapd ;; centos|rhel|fedora) yum install -y snapd ln -s /var/lib/snapd/snap /snap ;; *) log_error "不支持的操作系统: $OS" exit 1 ;; esac # 等待snapd启动 log_info "等待snapd启动..." sleep 5 # 检查snap是否安装成功 if command -v snap &> /dev/null; then log_info "snap安装成功" else log_error "snap安装失败" exit 1 fi } # 安装Chromium(通过snap) install_chromium_snap() { log_info "正在通过snap安装Chromium..." # 安装Chromium snap install chromium --classic # 等待安装完成 log_info "等待Chromium安装完成..." sleep 10 # 验证安装 if snap list | grep -q chromium; then log_info "Chromium安装成功" # 显示Chromium路径 CHROMIUM_PATH=$(which chromium 2>/dev/null || echo "/snap/bin/chromium") log_info "Chromium路径: $CHROMIUM_PATH" return 0 else log_error "Chromium安装失败" return 1 fi } # 安装Chromium(通过apt,备选方案) install_chromium_apt() { log_info "尝试通过apt安装Chromium..." case $OS in ubuntu|debian) apt update apt install -y chromium-browser ;; *) log_error "不支持的操作系统: $OS" return 1 ;; esac # 验证安装 if command -v chromium-browser &> /dev/null || command -v chromium &> /dev/null; then log_info "Chromium安装成功" return 0 else log_error "Chromium安装失败" return 1 fi } # 配置OpenClaw Gateway使用Chromium configure_openclaw() { log_info "配置OpenClaw Gateway..." # 检查OpenClaw配置文件 OPENCLAW_CONFIG="$HOME/.openclaw/openclaw.json" if [ ! -f "$OPENCLAW_CONFIG" ]; then log_warn "未找到OpenClaw配置文件: $OPENCLAW_CONFIG" log_info "跳过Gateway配置" return 0 fi # 获取Chromium路径 CHROMIUM_PATH=$(which chromium 2>/dev/null || echo "/snap/bin/chromium") # 提示用户可能需要更新配置 log_info "Chromium已安装,路径: $CHROMIUM_PATH" log_info "如果OpenClaw Gateway无法自动检测,请手动配置:" echo " executablePath: \"$CHROMIUM_PATH\"" echo " headless: true" echo " noSandbox: true" } # 测试Chromium是否可用 test_chromium() { log_info "测试Chromium是否可用..." CHROMIUM_CMD=$(which chromium 2>/dev/null || which chromium-browser 2>/dev/null || echo "/snap/bin/chromium") if $CHROMIUM_CMD --version &> /dev/null; then VERSION=$($CHROMIUM_CMD --version) log_info "Chromium版本: $VERSION" return 0 else log_warn "Chromium可能需要图形库,无法显示版本(在无头环境中是正常的)" return 0 fi } # 重启OpenClaw Gateway restart_gateway() { log_info "重启OpenClaw Gateway..." if command -v openclaw &> /dev/null; then openclaw gateway restart log_info "OpenClaw Gateway已重启" else log_warn "未找到openclaw命令,请手动重启Gateway" fi } # 主函数 main() { log_info "========================================" log_info "OpenClaw浏览器环境安装脚本" log_info "========================================" check_root detect_os # 安装snap(如果需要) if ! check_snap; then install_snap fi # 尝试安装Chromium if install_chromium_snap; then log_info "Chromium安装成功(snap方式)" else log_warn "snap安装失败,尝试apt方式..." if install_chromium_apt; then log_info "Chromium安装成功(apt方式)" else log_error "所有安装方式都失败了" exit 1 fi fi # 测试Chromium test_chromium # 配置OpenClaw configure_openclaw # 询问是否重启Gateway read -p "是否立即重启OpenClaw Gateway?(y/n) " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then restart_gateway fi log_info "========================================" log_info "安装完成!" log_info "========================================" log_info "Chromium已安装并可以供OpenClaw使用" log_info "" log_info "验证方法:" log_info " 1. 运行: openclaw status" log_info " 2. 检查浏览器状态" log_info " 3. 使用browser工具测试" log_info "========================================" } # 运行主函数 main "$@"