📜 一键脚本:install-openclaw-gpt-linux.sh
#!/bin/bash# ====================================================# OpenClaw + GPT系列模型 Linux 一键部署脚本# 作者:AI Assistant# 版本:2.0# 说明:本脚本将自动安装OpenClaw并配置GPT模型# 支持:OpenAI API (GPT-4.5/5.4) 和 本地 GPT-OSS 模型# 支持发行版:Ubuntu/Debian/CentOS/Fedora/RHEL/Arch# ====================================================# 严格模式set -e# 颜色定义RED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[1;33m'BLUE='\033[0;34m'CYAN='\033[0;36m'PURPLE='\033[0;35m'NC='\033[0m' # No ColorBOLD='\033[1m'# 全局变量SCRIPT_VERSION="2.0.0"INSTALL_LOG="/tmp/openclaw-gpt-install-$(date +%Y%m%d-%H%M%S).log"OPENCLAW_TOKEN=""OPENAI_API_KEY=""OS_TYPE=""OS_VERSION=""CPU_ARCH=""TOTAL_RAM=0GPU_AVAILABLE=falseINSTALL_DIR="$HOME/openclaw-gpt"USE_SYSTEMD=falseUSE_PM2=falseGPT_MODE="" # "openai" 或 "local"SELECTED_MODEL=""# ==================== 工具函数 ====================# 打印彩色信息print_info() { echo -e "${BLUE}[信息]${NC}$1"}print_success() { echo -e "${GREEN}[成功]${NC}$1"}print_warning() { echo -e "${YELLOW}[警告]${NC}$1"}print_error() { echo -e "${RED}[错误]${NC}$1"}print_step() { echo "" echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════${NC}" echo -e "${BOLD}${CYAN} 步骤 $1 : $2${NC}" echo -e "${BOLD}${CYAN}════════════════════════════════════════════════════════════${NC}"}print_banner() { clear echo -e "${PURPLE}${BOLD}" echo '╔════════════════════════════════════════════════════════════╗' echo '║ ║' echo '║ 🚀 OpenClaw + GPT系列模型 Linux 一键部署脚本 ║' echo '║ ║' echo '║ 版本: '"$SCRIPT_VERSION"' ║' echo '║ 支持: OpenAI API (GPT-4.5/5.4) 和 本地 GPT-OSS ║' echo '║ 发行版: Ubuntu/Debian/CentOS/Fedora/Arch ║' echo '║ ║' echo '╚════════════════════════════════════════════════════════════╝' echo -e "${NC}" echo ""}# 记录日志log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$INSTALL_LOG"}# 检查命令是否存在check_command() { if command -v $1 &> /dev/null; then return 0 else return 1 fi}# 检查上一步是否成功check_error() { if [ $? -ne 0 ]; then print_error "$1" log "错误: $1" print_warning "是否继续? (y/n) " read -r continue_choice if [[ ! "$continue_choice" =~ ^[Yy]$ ]]; then print_error "安装已中止" exit 1 fi fi}# 等待用户确认wait_for_user() { echo "" print_info "按回车键继续..." read -r}# 获取系统信息detect_os() { if [ -f /etc/os-release ]; then . /etc/os-release OS_TYPE=$ID OS_VERSION=$VERSION_ID elif [ -f /etc/redhat-release ]; then OS_TYPE="rhel" OS_VERSION=$(cat /etc/redhat-release | grep -oE '[0-9]+\.[0-9]+') elif [ -f /etc/arch-release ]; then OS_TYPE="arch" OS_VERSION="rolling" else OS_TYPE="linux" OS_VERSION="unknown" fi log "系统类型: $OS_TYPE$OS_VERSION"}# 检测系统信息detect_system() { print_step "0" "系统环境检测" # 检测操作系统 detect_os print_success "操作系统: $OS_TYPE$OS_VERSION" # 检测CPU架构 CPU_ARCH=$(uname -m) print_success "CPU架构: $CPU_ARCH" # 检测内存 if [ -f /proc/meminfo ]; then TOTAL_RAM=$(awk '/MemTotal/ {printf "%.0f\n", $2/1024/1024}' /proc/meminfo) print_success "物理内存: ${TOTAL_RAM}GB" log "内存: ${TOTAL_RAM}GB" else TOTAL_RAM=0 print_warning "无法检测内存大小" fi # 检测网络连接 print_info "检测网络连接..." if ping -c 1 8.8.8.8 &> /dev/null; then print_success "网络连接正常" else print_warning "网络连接异常,可能影响API调用" fi # 检测是否有图形界面 if [ -n "$DISPLAY" ] || [ -n "$WAYLAND_DISPLAY" ]; then HAS_GUI=true print_info "检测到图形界面" else HAS_GUI=false print_info "无图形界面(服务器环境)" fi wait_for_user}# ==================== 安装系统依赖 ====================install_system_deps() { print_step "1" "安装系统依赖" print_info "检测到系统: $OS_TYPE" case $OS_TYPE in ubuntu|debian|linuxmint) print_info "使用 apt 包管理器" sudo apt update sudo apt install -y curl git build-essential python3 python3-pip ;; centos|rhel|fedora) print_info "使用 yum/dnf 包管理器" if [ "$OS_TYPE" == "fedora" ]; then sudo dnf update -y sudo dnf install -y curl git gcc-c++ make python3 python3-pip else sudo yum update -y sudo yum install -y curl git gcc-c++ make python3 python3-pip epel-release fi ;; arch|manjaro) print_info "使用 pacman 包管理器" sudo pacman -Syu --noconfirm sudo pacman -S --noconfirm curl git base-devel python python-pip ;; *) print_warning "未知的Linux发行版,尝试安装基础工具" sudo apt update 2>/dev/null || sudo yum update 2>/dev/null || true sudo apt install -y curl git build-essential 2>/dev/null || \ sudo yum install -y curl git gcc-c++ make 2>/dev/null || true ;; esac check_error "系统依赖安装失败" print_success "系统依赖安装完成" log "系统依赖安装完成" wait_for_user}# ==================== 安装 Node.js ====================install_node() { print_step "2" "安装 Node.js 环境" if check_command node; then NODE_VERSION=$(node --version) NODE_MAJOR_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1) print_success "Node.js 已安装: $NODE_VERSION" if [ "$NODE_MAJOR_VERSION" -lt 22 ]; then print_warning "Node.js 版本过低 (需要 ≥22),准备升级..." install_node_from_scratch else log "Node.js已安装: $NODE_VERSION" fi else install_node_from_scratch fi # 验证安装 node --version npm --version # 配置npm镜像(可选) read -p "是否配置npm国内镜像(加速下载)?(y/n) " -r if [[ $REPLY =~ ^[Yy]$ ]]; then npm config set registry https://registry.npmmirror.com print_success "npm镜像已配置" fi print_success "Node.js 环境就绪" wait_for_user}install_node_from_scratch() { print_info "正在安装 Node.js 22..." case $OS_TYPE in ubuntu|debian) curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt install -y nodejs ;; centos|rhel|fedora) curl -fsSL https://rpm.nodesource.com/setup_22.x | sudo bash - if check_command dnf; then sudo dnf install -y nodejs else sudo yum install -y nodejs fi ;; arch) sudo pacman -S --noconfirm nodejs npm ;; *) # 使用nvm安装 print_info "使用 nvm 安装 Node.js" curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" nvm install 22 nvm use 22 ;; esac check_error "Node.js安装失败" print_success "Node.js 安装完成" log "Node.js安装完成"}# ==================== 选择GPT接入方式 ====================select_gpt_mode() { print_step "3" "选择GPT接入方式" echo -e "${CYAN}请选择GPT模型接入方式:${NC}" echo "" echo " 1) OpenAI官方API (推荐,性能最强)" echo " - 支持 GPT-4.5 / GPT-5.4 / GPT-4o 等最新模型" echo " - 需要API密钥和付费账户" echo " - 硬件要求低,仅需2GB内存" echo "" echo " 2) 本地GPT-OSS开源模型 (完全免费,离线可用)" echo " - 支持 gpt-oss:20b / gpt-oss:120b" echo " - 无需API密钥,数据完全本地化" echo " - 需要16GB+内存" echo "" read -p "请输入数字 (1-2,默认: 1): " mode_choice case $mode_choice in 2) GPT_MODE="local" print_info "已选择: 本地GPT-OSS模型" ;; *) GPT_MODE="openai" print_info "已选择: OpenAI官方API" ;; esac log "选择接入方式: $GPT_MODE" wait_for_user}# ==================== 配置OpenAI API ====================configure_openai() { print_step "4" "配置 OpenAI API" echo -e "${CYAN}您需要从 OpenAI 获取 API Key:${NC}" echo " 1. 访问 https://platform.openai.com/" echo " 2. 注册/登录 OpenAI 账号" echo " 3. 进入 API Keys 页面,点击 Create new secret key" echo " 4. 复制生成的密钥(以 sk- 开头)" echo "" echo -e "${YELLOW}注意:OpenAI API 是付费服务,请确保账户有余额${NC}" echo "" # 尝试从环境变量读取 if [ -n "$OPENAI_API_KEY" ]; then print_info "从环境变量检测到 API Key" OPENAI_API_KEY=$OPENAI_API_KEY fi # 如果环境变量没有,则提示输入 if [ -z "$OPENAI_API_KEY" ]; then read -p "请输入您的 OpenAI API Key (以 sk- 开头): " OPENAI_API_KEY if [[ ! "$OPENAI_API_KEY" =~ ^sk- ]]; then print_warning "API Key 格式可能不正确,应以 'sk-' 开头" read -p "确认继续使用此 Key?(y/n) " -r if [[ ! $REPLY =~ ^[Yy]$ ]]; then configure_openai return fi fi fi # 验证 API Key print_info "验证 API Key 有效性..." TEST_RESULT=$(curl -s -o /dev/null -w "%{http_code}" \ https://api.openai.com/v1/models \ -H "Authorization: Bearer $OPENAI_API_KEY") if [ "$TEST_RESULT" -eq 200 ]; then print_success "API Key 验证成功" log "OpenAI API Key验证成功" else print_warning "API Key 验证失败 (HTTP $TEST_RESULT)" print_info "可能的原因:" echo " - API Key 不正确" echo " - 账户余额不足" echo " - 网络连接问题(需要海外网络)" echo "" read -p "是否继续安装?(y/n) " -r if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi wait_for_user}# ==================== 配置本地GPT-OSS ====================install_ollama() { print_step "4" "安装 Ollama (本地模型运行环境)" if check_command ollama; then print_success "Ollama 已安装" log "Ollama已安装" else print_info "正在安装 Ollama..." curl -fsSL https://ollama.com/install.sh | sh check_error "Ollama安装失败" # 启动Ollama服务 if check_command systemctl; then sudo systemctl enable ollama sudo systemctl start ollama else ollama serve > /dev/null 2>&1 & fi print_success "Ollama 安装完成" log "Ollama安装完成" fi # 等待服务就绪 print_info "等待 Ollama 服务就绪..." for i in {1..30}; do if curl -s http://localhost:11434/api/tags > /dev/null 2>&1; then print_success "Ollama 服务就绪" break fi sleep 2 echo -n "." done echo "" wait_for_user}select_local_model() { print_step "5" "选择本地 GPT-OSS 模型" # 根据内存推荐模型 if [ $TOTAL_RAM -lt 16 ]; then print_warning "内存不足16GB,运行大型模型可能较慢" RECOMMENDED="1" elif [ $TOTAL_RAM -lt 32 ]; then RECOMMENDED="1" elif [ $TOTAL_RAM -lt 64 ]; then RECOMMENDED="2" else RECOMMENDED="2" fi echo -e "${CYAN}请选择要下载的本地模型:${NC}" echo "" echo " 1) gpt-oss:20b (推荐,16GB+内存,约8GB磁盘)" echo " - 性能均衡,适合大多数场景" echo " - 上下文窗口 32K" echo "" echo " 2) gpt-oss:120b (需要64GB+内存,约48GB磁盘)" echo " - 能力最强,适合高性能服务器" echo " - 上下文窗口 64K" echo "" echo -e "${GREEN}根据您的内存(${TOTAL_RAM}GB),推荐选项 $RECOMMENDED${NC}" echo "" read -p "请输入数字 (1-2,默认: $RECOMMENDED): " model_choice case $model_choice in 2) SELECTED_MODEL="gpt-oss:120b" ;; *) SELECTED_MODEL="gpt-oss:20b" ;; esac print_info "已选择模型: $SELECTED_MODEL" log "选择本地模型: $SELECTED_MODEL" # 下载模型 print_info "正在下载模型,请耐心等待 (约 $(if [ "$SELECTED_MODEL" == "gpt-oss:120b" ]; then echo "48GB"; else echo "8GB"; fi))..." ollama pull $SELECTED_MODEL check_error "模型下载失败" print_success "模型下载完成: $SELECTED_MODEL" wait_for_user}# ==================== 安装 OpenClaw ====================install_openclaw() { print_step "6" "安装 OpenClaw" print_info "正在安装 OpenClaw..." # 使用官方安装脚本 if curl -fsSL https://openclaw.ai/install.sh | bash; then print_success "OpenClaw 安装完成" log "OpenClaw安装完成" else print_warning "官方脚本安装失败,尝试通过npm安装..." npm install -g openclaw@latest check_error "npm安装OpenClaw失败" print_success "OpenClaw npm安装完成" log "OpenClaw npm安装完成" fi # 验证安装 if check_command openclaw; then OPENCLAW_VERSION=$(openclaw --version 2>&1 | head -1) print_success "OpenClaw 版本: $OPENCLAW_VERSION" else print_error "OpenClaw 安装验证失败" exit 1 fi wait_for_user}# ==================== 配置 OpenClaw ====================configure_openclaw() { print_step "7" "配置 OpenClaw" print_info "正在生成配置文件..." # 创建配置目录 mkdir -p ~/.openclaw # 生成随机令牌 if check_command uuidgen; then OPENCLAW_TOKEN=$(uuidgen | tr -d '-') else OPENCLAW_TOKEN=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) fi if [ "$GPT_MODE" == "openai" ]; then # OpenAI API 配置 cat > ~/.openclaw/config.json << EOF{ "provider": "openai", "apiKey": "$OPENAI_API_KEY", "model": "gpt-4.5-turbo", "token": "$OPENCLAW_TOKEN", "daemon": true, "port": 18789, "skills": [], "contextWindow": 128000, "temperature": 0.7, "maxTokens": 4096}EOF # 可选:选择具体GPT模型 echo "" echo -e "${CYAN}可用的 GPT 模型:${NC}" echo " 1) gpt-5.4 (最新版,100万上下文,推荐)" echo " 2) gpt-4.5-turbo (性能均衡)" echo " 3) gpt-4o (多模态)" echo " 4) gpt-4-turbo (快速响应)" echo "" read -p "请选择要使用的模型 (1-4,默认: 1): " model_choice case $model_choice in 2) MODEL="gpt-4.5-turbo" ;; 3) MODEL="gpt-4o" ;; 4) MODEL="gpt-4-turbo" ;; *) MODEL="gpt-5.4" ;; esac # 更新配置文件 sed -i "s/\"model\": \"gpt-4.5-turbo\"/\"model\": \"$MODEL\"/" ~/.openclaw/config.json else # 本地 GPT-OSS 配置 cat > ~/.openclaw/config.json << EOF{ "models": { "providers": { "ollama": { "baseUrl": "http://localhost:11434", "apiKey": "ollama", "api": "openai-completions", "models": [ { "id": "$SELECTED_MODEL", "name": "GPT-OSS", "contextWindow": 32768, "maxTokens": 8192 } ] } } }, "agents": { "defaults": { "model": { "primary": "ollama/$SELECTED_MODEL" } } }, "port": 18789, "token": "$OPENCLAW_TOKEN"}EOF fi print_success "配置文件创建成功" log "配置文件创建成功" wait_for_user}# ==================== 安装基础技能 ====================install_skills() { print_step "8" "安装常用技能" echo -e "${CYAN}请选择要安装的技能:${NC}" echo " 1) 基础技能 (agent-browser, agent-fs)" echo " 2) 全部技能 (包含执行命令和搜索)" echo " 3) 自定义选择" echo " 4) 跳过技能安装" echo "" read -p "请输入数字 (1-4,默认: 1): " skill_choice case $skill_choice in 1) SKILLS=( "@openclaw/agent-browser" "@openclaw/agent-fs" ) ;; 2) SKILLS=( "@openclaw/agent-browser" "@openclaw/agent-fs" "@openclaw/agent-exec" "@openclaw/agent-search" ) ;; 3) echo "请输入要安装的技能名称(多个技能用空格分隔):" echo "可用技能: @openclaw/agent-browser, @openclaw/agent-fs, @openclaw/agent-exec, @openclaw/agent-search" read -r custom_skills SKILLS=($custom_skills) ;; 4) print_info "跳过技能安装" return ;; *) SKILLS=( "@openclaw/agent-browser" "@openclaw/agent-fs" ) ;; esac print_info "正在安装技能..." for skill in "${SKILLS[@]}"; do print_info "安装技能: $skill" if openclaw plugins install "$skill" > /dev/null 2>&1; then print_success "✓ $skill 安装完成" log "技能安装完成: $skill" else print_warning "✗ $skill 安装失败 (可以稍后手动安装)" log "技能安装失败: $skill" fi done wait_for_user}# ==================== 配置进程管理 ====================configure_service() { print_step "9" "配置进程管理" echo -e "${CYAN}请选择进程管理方式:${NC}" echo " 1) Systemd (推荐,适用于有systemd的发行版)" echo " 2) PM2 (Node.js进程管理,适合服务器)" echo " 3) 后台进程 (简单,适合桌面环境)" echo "" read -p "请输入数字 (1-3,默认: 1): " service_choice case $service_choice in 1) if check_command systemctl; then USE_SYSTEMD=true configure_systemd else print_warning "系统不支持systemd,使用PM2替代" configure_pm2 fi ;; 2) USE_PM2=true configure_pm2 ;; *) print_info "使用后台进程模式" ;; esac wait_for_user}configure_systemd() { print_info "配置 Systemd 服务..." # 根据接入方式设置环境变量 if [ "$GPT_MODE" == "openai" ]; then ENV_VARS="Environment=OPENAI_API_KEY=$OPENAI_API_KEY" fi cat > /tmp/openclaw.service << EOF[Unit]Description=OpenClaw AI Agent Service (GPT)After=network.targetWants=network.target[Service]Type=simpleUser=$USERExecStart=$(which openclaw) gateway startRestart=alwaysRestartSec=10Environment=NODE_ENV=production$ENV_VARSStandardOutput=journalStandardError=journal[Install]WantedBy=multi-user.targetEOF sudo mv /tmp/openclaw.service /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable openclaw sudo systemctl start openclaw print_success "Systemd 服务配置完成" log "Systemd服务配置完成"}configure_pm2() { print_info "配置 PM2 进程管理..." if ! check_command pm2; then npm install -g pm2 fi # 设置环境变量 if [ "$GPT_MODE" == "openai" ]; then export OPENAI_API_KEY=$OPENAI_API_KEY fi pm2 start $(which openclaw) --name "openclaw-gpt" -- gateway start pm2 save pm2 startup print_success "PM2 配置完成" log "PM2配置完成"}# ==================== 启动服务 ====================start_service() { print_step "10" "启动 OpenClaw 服务" if [ "$USE_SYSTEMD" = true ]; then print_info "Systemd服务已启动" elif [ "$USE_PM2" = true ]; then pm2 restart openclaw-gpt else print_info "启动后台进程..." if [ "$GPT_MODE" == "openai" ]; then export OPENAI_API_KEY=$OPENAI_API_KEY fi nohup openclaw gateway start > /tmp/openclaw.log 2>&1 & sleep 3 fi # 检查服务状态 for i in {1..10}; do if curl -s http://localhost:18789 > /dev/null 2>&1; then print_success "OpenClaw 服务已启动" break fi if [ $i -eq 10 ]; then print_warning "OpenClaw 服务可能未正常启动,请稍后手动检查" print_info "查看日志: tail -f /tmp/openclaw.log" fi sleep 2 done wait_for_user}# ==================== 修复NO OUTPUT问题(本地模型专用) ====================fix_no_output_issue() { if [ "$GPT_MODE" == "local" ]; then print_step "11" "修复本地模型NO OUTPUT问题" print_info "针对本地Ollama模型的特殊修复..." # 查找provider-utils.js文件 PROVIDER_UTILS=$(find /usr/lib -name "provider-utils.js" 2>/dev/null | head -1) if [ -n "$PROVIDER_UTILS" ]; then print_info "找到文件: $PROVIDER_UTILS" # 备份原文件 sudo cp "$PROVIDER_UTILS" "$PROVIDER_UTILS.bak" # 移除ollama判断(如果存在) if grep -q "ollama" "$PROVIDER_UTILS"; then sudo sed -i 's/if(normalized === "ollama" ||/if(/g' "$PROVIDER_UTILS" print_success "已应用修复补丁" log "应用NO OUTPUT修复" else print_info "无需修复" fi else print_warning "未找到provider-utils.js,可手动修复" fi wait_for_user fi}# ==================== 创建启动脚本 ====================create_launcher() { print_step "12" "创建启动脚本" mkdir -p "$INSTALL_DIR" # 根据接入方式生成不同的启动脚本 if [ "$GPT_MODE" == "openai" ]; then ENV_EXPORT="export OPENAI_API_KEY=\"$OPENAI_API_KEY\"" MODE_NAME="OpenAI GPT" else ENV_EXPORT="# 使用本地Ollama模型" MODE_NAME="Local GPT-OSS" fi # 创建启动脚本 cat > "$INSTALL_DIR/start-openclaw-gpt.sh" << EOF#!/bin/bash$ENV_EXPORTecho "🚀 启动 OpenClaw ($MODE_NAME) 服务..."openclaw gateway startecho "📊 打开控制台..."if command -v xdg-open &> /dev/null; then xdg-open "http://localhost:18789/?token=$OPENCLAW_TOKEN"elif command -v gnome-open &> /dev/null; then gnome-open "http://localhost:18789/?token=$OPENCLAW_TOKEN"else echo "请手动访问: http://localhost:18789/?token=$OPENCLAW_TOKEN"fiEOF chmod +x "$INSTALL_DIR/start-openclaw-gpt.sh" # 创建状态检查脚本 cat > "$INSTALL_DIR/check-status.sh" << EOF#!/bin/bashecho "📊 OpenClaw (GPT) 状态检查"echo "=============================="echo ""echo "OpenClaw 服务状态:"if curl -s http://localhost:18789 > /dev/null; then echo "✅ 运行中" echo " 访问地址: http://localhost:18789/?token=$OPENCLAW_TOKEN"else echo "❌ 未运行"fiecho ""echo "模型状态:"if [ "$GPT_MODE" == "openai" ]; then echo "OpenAI API: 已配置" curl -s https://api.openai.com/v1/models \\ -H "Authorization: Bearer $OPENAI_API_KEY" \\ | grep -o '"id":[^,]*' | head -5else echo "Ollama 本地模型:" curl -s http://localhost:11434/api/tagsfiEOF chmod +x "$INSTALL_DIR/check-status.sh" # 创建配置文件备份 cp ~/.openclaw/config.json "$INSTALL_DIR/config.json.backup" print_success "启动脚本已创建: $INSTALL_DIR/start-openclaw-gpt.sh" print_success "状态检查脚本: $INSTALL_DIR/check-status.sh" print_success "配置文件备份: $INSTALL_DIR/config.json.backup" # 创建桌面快捷方式 if [ "$HAS_GUI" = true ] && [ -d "$HOME/Desktop" ]; then cat > "$HOME/Desktop/openclaw-gpt.desktop" << EOF[Desktop Entry]Name=OpenClaw GPTComment=OpenClaw AI Assistant with GPTExec=$INSTALL_DIR/start-openclaw-gpt.shIcon=utilities-terminalTerminal=trueType=ApplicationCategories=Utility;EOF chmod +x "$HOME/Desktop/openclaw-gpt.desktop" print_success "桌面快捷方式已创建" fi wait_for_user}# ==================== 显示完成信息 ====================show_completion() { print_step "完成" "🎉 所有安装步骤已完成!" echo -e "${GREEN}${BOLD}" echo '╔════════════════════════════════════════════════════════════╗' echo '║ 部署成功! ║' echo '╚════════════════════════════════════════════════════════════╝' echo -e "${NC}" echo "" # 获取本机IP LOCAL_IP=$(hostname -I | awk '{print $1}' 2>/dev/null || echo "127.0.0.1") echo -e "${CYAN}${BOLD}【访问信息】${NC}" echo " • 本地访问: http://localhost:18789/?token=$OPENCLAW_TOKEN" echo " • 远程访问: http://$LOCAL_IP:18789/?token=$OPENCLAW_TOKEN" echo " • 访问令牌: $OPENCLAW_TOKEN" echo "" echo -e "${CYAN}${BOLD}【模型配置】${NC}" if [ "$GPT_MODE" == "openai" ]; then MODEL_NAME=$(grep '"model"' ~/.openclaw/config.json | cut -d'"' -f4) echo " • 提供商: OpenAI API" echo " • 当前模型: $MODEL_NAME" echo " • API Key: ${OPENAI_API_KEY:0:15}... (已隐藏)" else echo " • 提供商: 本地 Ollama" echo " • 当前模型: $SELECTED_MODEL" echo " • 运行模式: 完全本地化,无需API" fi echo "" echo -e "${CYAN}${BOLD}【常用命令】${NC}" echo " • 启动脚本: $INSTALL_DIR/start-openclaw-gpt.sh" echo " • 状态检查: $INSTALL_DIR/check-status.sh" echo " • 查看状态: openclaw gateway status" echo " • 查看日志: openclaw logs follow" echo " • 打开控制台: openclaw dashboard" echo "" if [ "$USE_SYSTEMD" = true ]; then echo -e "${CYAN}${BOLD}【Systemd 命令】${NC}" echo " • 启动: sudo systemctl start openclaw" echo " • 停止: sudo systemctl stop openclaw" echo " • 状态: sudo systemctl status openclaw" echo " • 日志: sudo journalctl -u openclaw -f" echo "" fi if [ "$USE_PM2" = true ]; then echo -e "${CYAN}${BOLD}【PM2 命令】${NC}" echo " • 列表: pm2 list" echo " • 日志: pm2 logs openclaw-gpt" echo " • 监控: pm2 monit" echo "" fi echo -e "${CYAN}${BOLD}【技能列表】${NC}" openclaw plugins list 2>/dev/null || echo " 暂无已安装技能" echo "" echo -e "${YELLOW}${BOLD}【重要提示】${NC}" if [ "$GPT_MODE" == "openai" ]; then echo " 1. OpenAI API 是付费服务,请注意使用量" echo " 2. 查看API用量: https://platform.openai.com/usage" else echo " 1. 本地模型完全免费,数据隐私安全" echo " 2. 如需更好的性能,可考虑升级硬件" fi echo " 3. 请妥善保管访问令牌" echo " 4. 日志文件: /tmp/openclaw.log" echo " 5. 安装日志: $INSTALL_LOG" echo " 6. 配置文件: ~/.openclaw/config.json" echo " 7. 如需远程访问,请配置防火墙放行18789端口" echo "" # 测试连接 echo -e "${CYAN}${BOLD}【连接测试】${NC}" if curl -s http://localhost:18789 > /dev/null; then print_success "✓ OpenClaw 服务正常" else print_warning "✗ OpenClaw 服务未响应" fi echo "" echo -e "${CYAN}是否现在打开控制台?(y/n)${NC} " read -r open_now if [[ "$open_now" =~ ^[Yy]$ ]]; then if command -v xdg-open &> /dev/null; then xdg-open "http://localhost:18789/?token=$OPENCLAW_TOKEN" else echo "请手动访问: http://localhost:18789/?token=$OPENCLAW_TOKEN" fi fi echo "" print_success "安装完成!感谢使用!"}# ==================== 防火墙配置提示 ====================firewall_tip() { if command -v ufw &> /dev/null; then print_info "检测到 UFW 防火墙,如需远程访问请运行:" echo " sudo ufw allow 18789/tcp" echo " sudo ufw reload" elif command -v firewall-cmd &> /dev/null; then print_info "检测到 firewalld,如需远程访问请运行:" echo " sudo firewall-cmd --permanent --add-port=18789/tcp" echo " sudo firewall-cmd --reload" elif command -v iptables &> /dev/null; then print_info "检测到 iptables,如需远程访问请运行:" echo " sudo iptables -A INPUT -p tcp --dport 18789 -j ACCEPT" fi echo ""}# ==================== 清理函数 ====================cleanup() { print_warning "安装被中断,正在清理..." log "安装被中断" exit 1}# ==================== 主函数 ====================main() { print_banner # 记录开始时间 START_TIME=$(date +%s) log "=== OpenClaw + GPT Linux 安装开始 ===" # 执行各步骤 detect_system install_system_deps install_node select_gpt_mode if [ "$GPT_MODE" == "openai" ]; then configure_openai else install_ollama select_local_model fi install_openclaw configure_openclaw install_skills configure_service start_service fix_no_output_issue create_launcher firewall_tip show_completion # 计算总耗时 END_TIME=$(date +%s) DURATION=$((END_TIME - START_TIME)) MINUTES=$((DURATION / 60)) SECONDS=$((DURATION % 60)) log "=== OpenClaw + GPT 安装完成 ===" log "总耗时: ${MINUTES}分${SECONDS}秒" echo "" print_success "总耗时: ${MINUTES}分${SECONDS}秒"}# 捕获中断信号trap cleanup INT TERM# 检查是否为root用户if [ "$EUID" -eq 0 ]; then print_warning "不建议以root用户运行此脚本" print_warning "建议使用普通用户安装,需要sudo时会提示输入密码" read -p "是否继续?(y/n) " -r if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fifi# 运行主函数main# 退出前等待echo ""print_info "按回车键退出..."read -r
📦 使用方法
方法一:直接下载运行(推荐)
# 1. 下载脚本wget -O install-openclaw-gpt-linux.sh https://raw.githubusercontent.com/your-repo/install-openclaw-gpt-linux.sh# 或使用 curlcurl -O https://raw.githubusercontent.com/your-repo/install-openclaw-gpt-linux.sh# 2. 添加执行权限chmod +x install-openclaw-gpt-linux.sh# 3. 运行脚本./install-openclaw-gpt-linux.sh
方法二:一行命令直接运行
# 使用 curlbash <(curl -fsSL https://raw.githubusercontent.com/your-repo/install-openclaw-gpt-linux.sh)# 或使用 wgetbash <(wget -qO- https://raw.githubusercontent.com/your-repo/install-openclaw-gpt-linux.sh)
方法三:通过环境变量传入 API Key
# 设置环境变量,脚本会自动读取export OPENAI_API_KEY="sk-你的-api-key-here"bash <(curl -fsSL https://raw.githubusercontent.com/your-repo/install-openclaw-gpt-linux.sh)
🎯 脚本特性
• 双模式支持:同时支持 OpenAI API 和 本地 GPT-OSS 模型• 智能选择:根据内存自动推荐合适的本地模型• API验证:自动验证 OpenAI API Key 有效性• NO OUTPUT修复:自动修复本地Ollama的常见问题• 多发行版支持:Ubuntu/Debian/CentOS/Fedora/Arch等• 进程管理:支持Systemd、PM2、后台进程三种模式• 环境变量:自动读取 OPENAI_API_KEY 环境变量• 技能安装:可选择安装常用技能• 配置备份:自动备份配置文件• 状态监控:生成状态检查脚本• 防火墙提示:自动检测并提示防火墙设置• 彩色输出:清晰的彩色日志,方便阅读📊 支持的 GPT 模型
OpenAI API 模式
• gpt-5.4:最新版,支持100万上下文,适用于复杂任务和企业级应用• gpt-4.5-turbo:性能均衡,支持128K上下文,适用于通用场景• gpt-4o:具备多模态能力,支持128K上下文,适用于需要图像识别的场景• gpt-4-turbo:响应速度快,支持128K上下文,适用于实时对话本地 GPT-OSS 模式
• gpt-oss:20b:内存需求16GB以上,磁盘空间8GB以上,支持32K上下文,推荐使用,性能均衡• gpt-oss:120b:内存需求64GB以上,磁盘空间48GB以上,支持64K上下文,能力最强,适合服务器环境🔧 运维命令
查看日志
# 安装日志tail -f /tmp/openclaw-gpt-install-*.log# OpenClaw运行日志tail -f /tmp/openclaw.log# Systemd日志sudo journalctl -u openclaw -f# PM2日志pm2 logs openclaw-gpt
服务管理
# Systemdsudo systemctl restart openclawsudo systemctl stop openclawsudo systemctl status openclaw# PM2pm2 restart openclaw-gptpm2 stop openclaw-gptpm2 status# 后台进程pkill -f "openclaw gateway"$INSTALL_DIR/start-openclaw-gpt.sh
配置修改
# 修改配置文件nano ~/.openclaw/config.json# 重启服务生效sudo systemctl restart openclaw # Systemd# 或pm2 restart openclaw-gpt # PM2
查看API用量
# OpenAI用量查询curl https://api.openai.com/v1/dashboard/billing/usage \ -H "Authorization: Bearer $OPENAI_API_KEY"
OpenAI API 价格参考(2026年)
• GPT-5.4 (基础版):输入$2.50,输出$15.00。最新版通用模型,支持高达100万token上下文,适合大多数复杂任务和企业级应用。
• GPT-5.4 Pro (专业版):输入$30.00,输出$180.00。推理性能最强,适用于需要极高精确度和零容错率的专业场景。
• GPT-5.2:输入$1.75,输出$14.00。介于旗舰版和性价比模型之间,提供均衡的性能。
• GPT-5:输入$1.25,输出$10.00。平衡能力与成本,具备广泛的通用智能。
• GPT-4.1:输入$2.00,输出$8.00。针对代码生成和指令跟随进行了优化,支持100万token上下文。
• GPT-4o:输入$2.50,输出$10.00。多模态全能模型,适用于需要图像识别的场景。
• o3 (推理模型):输入$2.00,输出$8.00。完整版推理模型,擅长解决科学、数学和编程等复杂问题。
• o3-mini (推理模型):输入$1.10,输出$4.40。经济高效的推理模型。
• GPT-4o-mini:输入$0.15,输出$0.60。性价比极高的小尺寸模型,适合预算有限的通用场景。
• GPT-5 Mini:输入$0.25,输出$2.00。GPT-5系列的预算版。
• GPT-5 Nano:输入$0.05,输出$0.40。成本极低的模型,非常适合文本分类、信息提取和简单问答等任务。
⚠️ 注意事项
API费用:OpenAI API 是付费服务,请关注使用量
API Key安全:妥善保管,不要提交到代码仓库
网络要求:OpenAI API需要连接海外服务
本地模型资源:GPT-OSS模型需要充足的内存和磁盘空间
NO OUTPUT问题:本地模型已自动修复
🚨 故障排除
问题1:OpenAI API Key 验证失败
解决:检查API Key和网络
# 手动测试API Keycurl https://api.openai.com/v1/models \ -H "Authorization: Bearer 你的-api-key"
问题2:本地模型下载慢
解决:使用代理或镜像
# 设置代理export http_proxy="http://代理地址:端口"export https_proxy="http://代理地址:端口"ollama pull gpt-oss:20b
问题3:持续返回"NO OUTPUT"
解决:脚本已自动修复,如仍出现:
# 手动修复find /usr/lib -name "provider-utils.js" -exec sudo sed -i 's/if(normalized === "ollama" ||/if(/g' {} \;systemctl --user restart openclaw
问题4:内存不足
解决:使用更小的模型或增加Swap
# 创建4GB Swapsudo fallocate -l 4G /swapfilesudo chmod 600 /swapfilesudo mkswap /swapfilesudo swapon /swapfile
现在,开始享受由 GPT 驱动的 AI 智能体吧! 🚀