#!/bin/bash # ============================================ # Claude AI Installer Linux 构建脚本 # Build script for Linux using Tauri # 此脚本作为 scripts/build.js 的简单入口 # ============================================ # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[0;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' # No Color # 切换到脚本所在目录 cd "$(dirname "$0")" # 显示帮助信息 show_help() { echo "" echo " Claude AI Installer Linux 构建脚本 (Tauri)" echo "" echo " 用法:" echo " ./build-linux.sh [参数]" echo "" echo " 参数:" echo " --debug, -d 以调试模式构建" echo " --skip-frontend, -s 跳过前端构建" echo " --help, -h 显示此帮助信息" echo "" echo " 示例:" echo " ./build-linux.sh 完整发布构建" echo " ./build-linux.sh --debug 调试构建" echo " ./build-linux.sh -s 跳过前端,仅构建 Tauri" echo "" echo " 输出 (发布模式):" echo " src-tauri/target/release/bundle/deb/*.deb (Debian 包)" echo " src-tauri/target/release/bundle/appimage/*.AppImage (AppImage)" echo " src-tauri/target/release/claude-ai-installer (可执行文件)" echo "" echo " 输出 (调试模式):" echo " src-tauri/target/debug/claude-ai-installer (调试版可执行文件)" echo "" echo " 前置要求:" echo " - Rust (https://rustup.rs/)" echo " - Node.js (https://nodejs.org/)" echo " - Linux 依赖: libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev" echo "" echo " 注意: 此脚本调用 scripts/build.js 执行实际构建" echo "" } # 检查是否请求帮助 if [[ "$1" == "--help" || "$1" == "-h" ]]; then show_help exit 0 fi echo "" echo " ========================================" echo " Claude AI Installer - Linux 构建" echo " 使用 Tauri 2.0" echo " ========================================" echo "" # 检查 Rust 是否安装 if ! command -v rustc &> /dev/null; then echo -e " ${RED}✖${NC} 未找到 Rust,请先安装 Rust" echo -e " ${BLUE}ℹ${NC} 访问: https://rustup.rs/" exit 1 fi # 显示 Rust 版本 RUST_VERSION=$(rustc --version) echo -e " ${GREEN}✔${NC} Rust: $RUST_VERSION" # 检查 Node.js if ! command -v node &> /dev/null; then echo -e " ${RED}✖${NC} 未找到 Node.js,请先安装 Node.js" exit 1 fi # 显示 Node.js 版本 NODE_VERSION=$(node --version) echo -e " ${GREEN}✔${NC} Node.js: $NODE_VERSION" # 检查 Linux 依赖 check_linux_deps() { local missing_deps=() # 检查 webkit2gtk if ! pkg-config --exists webkit2gtk-4.1 2>/dev/null; then missing_deps+=("libwebkit2gtk-4.1-dev") fi # 检查 appindicator if ! pkg-config --exists ayatana-appindicator3-0.1 2>/dev/null && ! pkg-config --exists appindicator3-0.1 2>/dev/null; then missing_deps+=("libayatana-appindicator3-dev 或 libappindicator3-dev") fi if [ ${#missing_deps[@]} -gt 0 ]; then echo -e " ${YELLOW}!${NC} 可能缺少以下依赖:" for dep in "${missing_deps[@]}"; do echo -e " - $dep" done echo -e " ${BLUE}ℹ${NC} 在 Ubuntu/Debian 上安装: sudo apt-get install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libgtk-3-dev" else echo -e " ${GREEN}✔${NC} Linux 依赖已安装" fi } check_linux_deps # 设置 Tauri 签名密钥环境变量 if [ -f ".keys/tauri-signing.key" ]; then echo -e " ${GREEN}✔${NC} 找到签名密钥" export TAURI_SIGNING_PRIVATE_KEY=$(cat .keys/tauri-signing.key) export TAURI_SIGNING_PRIVATE_KEY_PASSWORD="" else echo -e " ${YELLOW}!${NC} 未找到签名密钥 (.keys/tauri-signing.key)" echo -e " ${BLUE}ℹ${NC} 更新功能将不可用,构建将继续..." fi # 检查 node_modules if [ ! -d "node_modules" ]; then echo "" echo -e " ${YELLOW}!${NC} 未找到 node_modules,正在安装依赖..." npm install if [ $? -ne 0 ]; then echo -e " ${RED}✖${NC} 安装依赖失败" exit 1 fi fi # 解析参数 NODE_ARGS="" while [[ $# -gt 0 ]]; do case $1 in --debug|-d) NODE_ARGS="$NODE_ARGS --debug" shift ;; --skip-frontend|-s) NODE_ARGS="$NODE_ARGS --skip-frontend" shift ;; *) shift ;; esac done echo "" echo -e " ${CYAN}▶ 调用 Node.js 构建脚本...${NC}" echo -e " ${BLUE}ℹ${NC} 执行: node scripts/build.js $NODE_ARGS" echo "" node scripts/build.js $NODE_ARGS BUILD_RESULT=$? if [ $BUILD_RESULT -ne 0 ]; then echo "" echo -e " ${RED}✖${NC} 构建失败!" echo "" exit 1 fi echo ""