This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw/skills/kb_workflow/install-env.sh
T

322 lines
11 KiB
Bash

#!/bin/bash
# =============================================================================
# KB Workflow 环境一键安装脚本
# =============================================================================
# 功能: 检查并安装 kb-workflow 技能所需的全部环境依赖
# 支持: Ubuntu/Debian 系统
#
# 使用方法:
# ./install-env.sh # 检查环境并提示安装命令(检查模式)
# ./install-env.sh --auto # 自动安装所有缺失依赖(自动模式)
# =============================================================================
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 日志函数
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_section() {
echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}========================================${NC}"
}
# 获取脚本目录
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
DEFAULT_KB_PATH="${HOME}/work/knowledge-base"
# 解析参数
AUTO_MODE=false
if [ "$1" = "--auto" ]; then
AUTO_MODE=true
log_info "自动安装模式"
fi
# 检测 Linux 发行版
detect_distro() {
if [ -f /etc/os-release ]; then
. /etc/os-release
echo "$ID"
elif [ -f /etc/debian_version ]; then
echo "debian"
elif [ -f /etc/redhat-release ]; then
echo "rhel"
fi
}
DISTRO=$(detect_distro)
# 检查命令是否存在
command_exists() {
command -v "$1" > /dev/null 2>&1
}
# 检查 Python 包
check_python_package() {
python3 -c "import $1" 2>/dev/null
}
# =============================================================================
# 1. 检查系统依赖
# =============================================================================
log_section "第一步: 检查系统依赖"
MISSING_DEPS=()
# 检查 Python3
if command_exists python3; then
PYTHON_VERSION=$(python3 --version | cut -d' ' -f2)
log_success "Python3 已安装: $PYTHON_VERSION"
else
log_warn "Python3 未安装"
MISSING_DEPS+=("python3")
fi
# 检查 pip3
if python3 -m pip --version > /dev/null 2>&1 || command_exists pip3; then
log_success "pip3 已安装"
else
log_warn "pip3 未安装"
MISSING_DEPS+=("python3-pip")
fi
# 检查 ffmpeg
if command_exists ffmpeg; then
log_success "ffmpeg 已安装"
else
log_warn "ffmpeg 未安装"
MISSING_DEPS+=("ffmpeg")
fi
# 检查 tesseract
if command_exists tesseract; then
log_success "Tesseract OCR 已安装"
else
log_warn "Tesseract OCR 未安装"
MISSING_DEPS+=("tesseract-ocr")
fi
# 检查 git
if command_exists git; then
log_success "Git 已安装"
else
log_warn "Git 未安装"
MISSING_DEPS+=("git")
fi
# =============================================================================
# 2. 自动安装系统依赖(自动模式)
# =============================================================================
if [ ${#MISSING_DEPS[@]} -gt 0 ]; then
if [ "$AUTO_MODE" = true ]; then
log_section "自动安装系统依赖"
log_info "检测到系统: $DISTRO"
case "$DISTRO" in
ubuntu|debian)
log_info "更新包列表..."
sudo apt-get update -qq
log_info "安装依赖: ${MISSING_DEPS[*]}"
sudo apt-get install -y -qq "${MISSING_DEPS[@]}" tesseract-ocr-chi-sim tesseract-ocr-eng
;;
fedora|rhel|centos)
log_info "更新包列表..."
sudo dnf check-update -y || true
log_info "安装依赖: ${MISSING_DEPS[*]}"
sudo dnf install -y "${MISSING_DEPS[@]}" tesseract-langpack-chi_sim tesseract-langpack-eng
;;
arch)
log_info "安装依赖: ${MISSING_DEPS[*]}"
sudo pacman -S --noconfirm "${MISSING_DEPS[@]}" tesseract-data-chi_sim tesseract-data-eng
;;
*)
log_error "不支持的系统: $DISTRO"
exit 1
;;
esac
log_success "系统依赖安装完成"
MISSING_DEPS=()
else
log_section "需要安装的系统依赖"
echo ""
echo "检测到以下依赖未安装:"
for dep in "${MISSING_DEPS[@]}"; do
echo " - $dep"
done
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "请运行以下命令安装:"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo -e "${YELLOW}sudo apt-get update${NC}"
echo -e "${YELLOW}sudo apt-get install -y ${MISSING_DEPS[*]} tesseract-ocr-chi-sim tesseract-ocr-eng${NC}"
echo ""
fi
fi
# =============================================================================
# 3. 检查 Python 依赖
# =============================================================================
log_section "第二步: 检查 Python 依赖"
PYTHON_PACKAGES=(
"httpx:httpx"
"aiohttp:aiohttp"
"requests:requests"
"Pillow:PIL"
)
MISSING_PY_PKGS=()
for pkg_info in "${PYTHON_PACKAGES[@]}"; do
pkg_name=$(echo "$pkg_info" | cut -d':' -f1)
import_name=$(echo "$pkg_info" | cut -d':' -f2)
if check_python_package "$import_name" 2>/dev/null; then
log_success "$pkg_name 已安装"
else
log_warn "$pkg_name 未安装"
MISSING_PY_PKGS+=("$pkg_name")
fi
done
# 检查特殊包
check_python_package "playwright" 2>/dev/null && log_success "playwright 已安装" || MISSING_PY_PKGS+=("playwright")
check_python_package "easyocr" 2>/dev/null && log_success "easyocr 已安装" || MISSING_PY_PKGS+=("easyocr")
check_python_package "pytesseract" 2>/dev/null && log_success "pytesseract 已安装" || MISSING_PY_PKGS+=("pytesseract")
# =============================================================================
# 4. 自动安装 Python 依赖(自动模式)
# =============================================================================
if [ ${#MISSING_PY_PKGS[@]} -gt 0 ]; then
if [ "$AUTO_MODE" = true ]; then
log_section "自动安装 Python 包"
log_info "安装: ${MISSING_PY_PKGS[*]}"
pip3 install --user "${MISSING_PY_PKGS[@]}" -q
log_success "Python 包安装完成"
# 安装 Playwright 浏览器
if [[ " ${MISSING_PY_PKGS[*]} " =~ " playwright " ]]; then
log_info "安装 Playwright Chromium 浏览器..."
python3 -m playwright install chromium
log_success "Chromium 浏览器安装完成"
fi
MISSING_PY_PKGS=()
else
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "需要安装以下 Python 包:"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
for pkg in "${MISSING_PY_PKGS[@]}"; do
echo " - $pkg"
done
echo ""
echo "请运行以下命令安装:"
echo ""
echo -e "${YELLOW}pip3 install --user ${MISSING_PY_PKGS[*]}${NC}"
if [[ " ${MISSING_PY_PKGS[*]} " =~ " playwright " ]]; then
echo ""
echo -e "${YELLOW}安装完 playwright 后,还需要运行:${NC}"
echo -e "${YELLOW} python3 -m playwright install chromium${NC}"
fi
echo ""
fi
fi
# =============================================================================
# 5. 创建知识库目录结构
# =============================================================================
log_section "第三步: 创建知识库目录结构"
KB_BASE_PATH="${KB_BASE_PATH:-$DEFAULT_KB_PATH}"
log_info "知识库路径: $KB_BASE_PATH"
mkdir -p "$KB_BASE_PATH"/{archive/{subscriptions,pending},metadata,content/{downloads,subtitles},analyzed}
log_success "目录结构创建完成"
# =============================================================================
# 6. 环境变量配置提示
# =============================================================================
log_section "第四步: 环境变量配置"
if [ -z "$KB_BASE_PATH_SET" ]; then
log_warn "KB_BASE_PATH 环境变量未设置"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "建议添加到 ~/.bashrc 或 ~/.zshrc:"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo -e "${YELLOW}export KB_BASE_PATH=\"$KB_BASE_PATH\"${NC}"
echo ""
else
log_success "KB_BASE_PATH 已设置: $KB_BASE_PATH"
fi
# 创建环境变量示例文件
ENV_FILE="${SCRIPT_DIR}/.env.example"
cat > "$ENV_FILE" << 'EOF'
# KB Workflow 环境变量配置
export KB_BASE_PATH="~/work/knowledge-base"
# 可选: B站 Cookie(用于下载会员视频)
# export BILIBILI_COOKIE="SESSDATA=xxx; bili_jct=xxx"
# 可选: AI 分析配置
# export AI_API_KEY="your-api-key"
# export AI_PROVIDER="openai" # 或 zhipu, minimax
# export AI_MODEL="gpt-4"
# 可选: Git 配置
# export KB_GIT_USER="Your Name"
# export KB_GIT_EMAIL="your@email.com"
EOF
log_info "环境变量示例已保存到: $ENV_FILE"
# =============================================================================
# 7. 完成总结
# =============================================================================
log_section "安装完成"
echo ""
if [ ${#MISSING_DEPS[@]} -eq 0 ] && [ ${#MISSING_PY_PKGS[@]} -eq 0 ]; then
echo -e "${GREEN}✅ 所有依赖已安装完成!${NC}"
else
echo -e "${YELLOW}⚠️ 部分依赖需要手动安装${NC}"
echo ""
if [ ${#MISSING_DEPS[@]} -gt 0 ]; then
echo "系统依赖:"
echo -e "${YELLOW}sudo apt-get install -y ${MISSING_DEPS[*]} tesseract-ocr-chi-sim tesseract-ocr-eng${NC}"
fi
if [ ${#MISSING_PY_PKGS[@]} -gt 0 ]; then
echo ""
echo "Python 包:"
echo -e "${YELLOW}pip3 install --user ${MISSING_PY_PKGS[*]}${NC}"
fi
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "使用方法:"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " export KB_BASE_PATH=\"~/work/knowledge-base\"
echo " python3 kb_workflow.py --check --url \"[URL]\""
echo ""