build-linux.sh 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #!/bin/bash
  2. # ============================================
  3. # Claude AI Installer Linux 构建脚本
  4. # Build script for Linux using Tauri
  5. # 此脚本作为 scripts/build.js 的简单入口
  6. # ============================================
  7. # 颜色定义
  8. RED='\033[0;31m'
  9. GREEN='\033[0;32m'
  10. YELLOW='\033[0;33m'
  11. BLUE='\033[0;34m'
  12. CYAN='\033[0;36m'
  13. NC='\033[0m' # No Color
  14. # 切换到脚本所在目录
  15. cd "$(dirname "$0")"
  16. # 显示帮助信息
  17. show_help() {
  18. echo ""
  19. echo " Claude AI Installer Linux 构建脚本 (Tauri)"
  20. echo ""
  21. echo " 用法:"
  22. echo " ./build-linux.sh [参数]"
  23. echo ""
  24. echo " 参数:"
  25. echo " --debug, -d 以调试模式构建"
  26. echo " --skip-frontend, -s 跳过前端构建"
  27. echo " --help, -h 显示此帮助信息"
  28. echo ""
  29. echo " 示例:"
  30. echo " ./build-linux.sh 完整发布构建"
  31. echo " ./build-linux.sh --debug 调试构建"
  32. echo " ./build-linux.sh -s 跳过前端,仅构建 Tauri"
  33. echo ""
  34. echo " 输出 (发布模式):"
  35. echo " src-tauri/target/release/bundle/deb/*.deb (Debian 包)"
  36. echo " src-tauri/target/release/bundle/appimage/*.AppImage (AppImage)"
  37. echo " src-tauri/target/release/claude-ai-installer (可执行文件)"
  38. echo ""
  39. echo " 输出 (调试模式):"
  40. echo " src-tauri/target/debug/claude-ai-installer (调试版可执行文件)"
  41. echo ""
  42. echo " 前置要求:"
  43. echo " - Rust (https://rustup.rs/)"
  44. echo " - Node.js (https://nodejs.org/)"
  45. echo " - Linux 依赖: libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev"
  46. echo ""
  47. echo " 注意: 此脚本调用 scripts/build.js 执行实际构建"
  48. echo ""
  49. }
  50. # 检查是否请求帮助
  51. if [[ "$1" == "--help" || "$1" == "-h" ]]; then
  52. show_help
  53. exit 0
  54. fi
  55. echo ""
  56. echo " ========================================"
  57. echo " Claude AI Installer - Linux 构建"
  58. echo " 使用 Tauri 2.0"
  59. echo " ========================================"
  60. echo ""
  61. # 检查 Rust 是否安装
  62. if ! command -v rustc &> /dev/null; then
  63. echo -e " ${RED}✖${NC} 未找到 Rust,请先安装 Rust"
  64. echo -e " ${BLUE}ℹ${NC} 访问: https://rustup.rs/"
  65. exit 1
  66. fi
  67. # 显示 Rust 版本
  68. RUST_VERSION=$(rustc --version)
  69. echo -e " ${GREEN}✔${NC} Rust: $RUST_VERSION"
  70. # 检查 Node.js
  71. if ! command -v node &> /dev/null; then
  72. echo -e " ${RED}✖${NC} 未找到 Node.js,请先安装 Node.js"
  73. exit 1
  74. fi
  75. # 显示 Node.js 版本
  76. NODE_VERSION=$(node --version)
  77. echo -e " ${GREEN}✔${NC} Node.js: $NODE_VERSION"
  78. # 检查 Linux 依赖
  79. check_linux_deps() {
  80. local missing_deps=()
  81. # 检查 webkit2gtk
  82. if ! pkg-config --exists webkit2gtk-4.1 2>/dev/null; then
  83. missing_deps+=("libwebkit2gtk-4.1-dev")
  84. fi
  85. # 检查 appindicator
  86. if ! pkg-config --exists ayatana-appindicator3-0.1 2>/dev/null && ! pkg-config --exists appindicator3-0.1 2>/dev/null; then
  87. missing_deps+=("libayatana-appindicator3-dev 或 libappindicator3-dev")
  88. fi
  89. if [ ${#missing_deps[@]} -gt 0 ]; then
  90. echo -e " ${YELLOW}!${NC} 可能缺少以下依赖:"
  91. for dep in "${missing_deps[@]}"; do
  92. echo -e " - $dep"
  93. done
  94. echo -e " ${BLUE}ℹ${NC} 在 Ubuntu/Debian 上安装: sudo apt-get install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libgtk-3-dev"
  95. else
  96. echo -e " ${GREEN}✔${NC} Linux 依赖已安装"
  97. fi
  98. }
  99. check_linux_deps
  100. # 设置 Tauri 签名密钥环境变量
  101. if [ -f ".keys/tauri-signing.key" ]; then
  102. echo -e " ${GREEN}✔${NC} 找到签名密钥"
  103. export TAURI_SIGNING_PRIVATE_KEY=$(cat .keys/tauri-signing.key)
  104. export TAURI_SIGNING_PRIVATE_KEY_PASSWORD=""
  105. else
  106. echo -e " ${YELLOW}!${NC} 未找到签名密钥 (.keys/tauri-signing.key)"
  107. echo -e " ${BLUE}ℹ${NC} 更新功能将不可用,构建将继续..."
  108. fi
  109. # 检查 node_modules
  110. if [ ! -d "node_modules" ]; then
  111. echo ""
  112. echo -e " ${YELLOW}!${NC} 未找到 node_modules,正在安装依赖..."
  113. npm install
  114. if [ $? -ne 0 ]; then
  115. echo -e " ${RED}✖${NC} 安装依赖失败"
  116. exit 1
  117. fi
  118. fi
  119. # 解析参数
  120. NODE_ARGS=""
  121. while [[ $# -gt 0 ]]; do
  122. case $1 in
  123. --debug|-d)
  124. NODE_ARGS="$NODE_ARGS --debug"
  125. shift
  126. ;;
  127. --skip-frontend|-s)
  128. NODE_ARGS="$NODE_ARGS --skip-frontend"
  129. shift
  130. ;;
  131. *)
  132. shift
  133. ;;
  134. esac
  135. done
  136. echo ""
  137. echo -e " ${CYAN}▶ 调用 Node.js 构建脚本...${NC}"
  138. echo -e " ${BLUE}ℹ${NC} 执行: node scripts/build.js $NODE_ARGS"
  139. echo ""
  140. node scripts/build.js $NODE_ARGS
  141. BUILD_RESULT=$?
  142. if [ $BUILD_RESULT -ne 0 ]; then
  143. echo ""
  144. echo -e " ${RED}✖${NC} 构建失败!"
  145. echo ""
  146. exit 1
  147. fi
  148. echo ""