#!/bin/bash # ============================================================ # codebase-memory-mcp 静默安装脚本 # 功能:安装并配置 stderr 重定向,避免日志刷屏 # 用法:curl -fsSL https://raw.githubusercontent.com/.../install.sh | bash # 然后执行本脚本 # ============================================================ set -e BIN_DIR="${HOME}/.local/bin" WRAPPER="${BIN_DIR}/cbm-mcp-wrapper" REAL_BIN="${BIN_DIR}/codebase-memory-mcp.real" DEFAULT_BIN="${BIN_DIR}/codebase-memory-mcp" LOG_FILE="/tmp/cbm-error.log" GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' info() { echo -e "${GREEN}[cbm]${NC} $1"; } warn() { echo -e "${YELLOW}[cbm]${NC} $1"; } # ------------------------------------------ # 1. 安装 codebase-memory-mcp(如未安装) # ------------------------------------------ if [ ! -f "$DEFAULT_BIN" ] && [ ! -f "$REAL_BIN" ]; then info "正在安装 codebase-memory-mcp..." curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash echo "" fi # ------------------------------------------ # 2. 备份原始二进制 # ------------------------------------------ if [ -f "$DEFAULT_BIN" ] && [ ! -f "$REAL_BIN" ]; then info "备份原始二进制 -> ${REAL_BIN}" cp "$DEFAULT_BIN" "$REAL_BIN" fi # ------------------------------------------ # 3. 创建独立 wrapper(不会被更新覆盖) # ------------------------------------------ info "创建 stderr 重定向 wrapper -> ${WRAPPER}" cat >"$WRAPPER" <<'WRAPPER_EOF' #!/bin/bash # codebase-memory-mcp wrapper — redirect stderr to log file # This file is at a dedicated path and won't be overwritten by reinstall BIN_DIR="$(cd "$(dirname "$0")" && pwd)" exec -a "codebase-memory-mcp" "${BIN_DIR}/codebase-memory-mcp.real" 2>/tmp/cbm-error.log WRAPPER_EOF chmod +x "$WRAPPER" # ------------------------------------------ # 4. 恢复原始二进制到默认路径(允许更新覆盖) # ------------------------------------------ if [ -f "$REAL_BIN" ]; then info "恢复原始二进制到默认路径" cp "$REAL_BIN" "$DEFAULT_BIN" fi # ------------------------------------------ # 5. 设置 CBM_MCP_BIN 环境变量 # ------------------------------------------ ENV_VAR='CBM_MCP_BIN='"${WRAPPER}" # 写入 /etc/environment(需 root) if [ "$(id -u)" = "0" ]; then if ! grep -q "CBM_MCP_BIN" /etc/environment 2>/dev/null; then info "写入 /etc/environment(系统级)" echo "$ENV_VAR" >>/etc/environment else warn "/etc/environment 已存在 CBM_MCP_BIN,跳过" fi else warn "非 root 用户,跳过 /etc/environment" fi # 写入 ~/.bashrc(用户级,兜底) if ! grep -q "CBM_MCP_BIN" "${HOME}/.bashrc" 2>/dev/null; then info "写入 ~/.bashrc" echo "export ${ENV_VAR}" >>"${HOME}/.bashrc" else warn "~/.bashrc 已存在 CBM_MCP_BIN,跳过" fi # ------------------------------------------ # 6. 输出结果 # ------------------------------------------ echo "" echo "======================================" echo " 安装完成" echo "======================================" echo "" echo " 二进制: ${DEFAULT_BIN}" echo " 原始备份: ${REAL_BIN}" echo " Wrapper: ${WRAPPER}" echo " 日志文件: ${LOG_FILE}" echo " 环境变量: CBM_MCP_BIN=${WRAPPER}" echo "" echo " 使用方式:" echo " 1. 重启 pi 后自动生效" echo " 2. 或立即生效: export CBM_MCP_BIN=${WRAPPER}" echo " 3. 查看日志: tail -f ${LOG_FILE}" echo "" echo "======================================"