118 lines
4.4 KiB
Bash
Executable File
118 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# ============================================
|
|
# HYC下载站 v2.3 - ARMv7 / 低内存设备 安装脚本
|
|
#
|
|
# 电视盒子(1G 内存)上很多带 C 扩展的包没有预编译 wheel,
|
|
# 一次性 pip install -r requirements.txt 会在编译某个包时整体失败。
|
|
# 本脚本按"核心必装 / 可选按需"分开安装,单个失败不连累其他。
|
|
#
|
|
# 用法:
|
|
# bash scripts/install-armv7.sh # 只装核心
|
|
# bash scripts/install-armv7.sh --with-postgresql # 加 PostgreSQL
|
|
# bash scripts/install-armv7.sh --with-mysql # 加 MySQL
|
|
# bash scripts/install-armv7.sh --with-sftp # 加 SFTP 同步(paramiko)
|
|
#
|
|
# 环境变量:
|
|
# PYTHON=python3.11 指定 Python(默认 python3)
|
|
# VENV_DIR=./venv 虚拟环境目录(默认 ./venv)
|
|
# ============================================
|
|
set -e
|
|
|
|
PYTHON=${PYTHON:-python3}
|
|
VENV_DIR=${VENV_DIR:-./venv}
|
|
|
|
echo "=========================================="
|
|
echo " HYC下载站 v2.3 - ARMv7 安装"
|
|
echo "=========================================="
|
|
|
|
# ---------- 1. 检查 Python ----------
|
|
echo ""
|
|
echo "==> [1/5] 检查 Python 版本"
|
|
if ! command -v "$PYTHON" >/dev/null 2>&1; then
|
|
echo "错误: 找不到 $PYTHON"
|
|
echo "提示: 电视盒子 Debian 系可用: apt install python3 python3-venv"
|
|
exit 1
|
|
fi
|
|
$PYTHON --version
|
|
python_ok=$($PYTHON -c 'import sys; print(1 if sys.version_info >= (3, 8) else 0)')
|
|
if [ "$python_ok" != "1" ]; then
|
|
echo "警告: Python 版本过低(需要 3.8+),建议 python3.11"
|
|
fi
|
|
|
|
# ---------- 2. 创建虚拟环境 ----------
|
|
echo ""
|
|
echo "==> [2/5] 创建虚拟环境: $VENV_DIR"
|
|
if ! $PYTHON -m venv "$VENV_DIR" 2>/dev/null; then
|
|
echo "错误: 创建虚拟环境失败"
|
|
echo "提示: 需要先安装 python3-venv: apt install python3-venv"
|
|
exit 1
|
|
fi
|
|
# shellcheck disable=SC1091
|
|
source "$VENV_DIR/bin/activate"
|
|
pip install --upgrade pip 2>/dev/null || echo " (pip 升级跳过)"
|
|
|
|
# ---------- 3. 核心依赖(必装) ----------
|
|
echo ""
|
|
echo "==> [3/5] 安装核心依赖"
|
|
CORE_PKGS="psutil requests croniter sqlalchemy python-multipart"
|
|
for pkg in $CORE_PKGS; do
|
|
if pip install "$pkg" >/dev/null 2>&1; then
|
|
echo " ✓ $pkg"
|
|
else
|
|
echo " ✗ $pkg 安装失败(继续,不影响其他)"
|
|
fi
|
|
done
|
|
|
|
# bcrypt: armv7 可能需要编译;装不上则走 PBKDF2 回退(认证仍可用,但建议装上)
|
|
echo " ... bcrypt(密码哈希)"
|
|
if pip install bcrypt >/dev/null 2>&1; then
|
|
echo " ✓ bcrypt"
|
|
else
|
|
echo " ⚠ bcrypt 安装失败 → 将使用 PBKDF2 回退(功能可用;建议装 gcc 后重试)"
|
|
fi
|
|
|
|
# ---------- 4. 可选依赖(按参数) ----------
|
|
echo ""
|
|
echo "==> [4/5] 可选依赖"
|
|
if [[ "$*" == *"--with-postgresql"* ]]; then
|
|
echo " ... psycopg2-binary(PostgreSQL)"
|
|
pip install psycopg2-binary >/dev/null 2>&1 && echo " ✓ psycopg2" \
|
|
|| echo " ⚠ psycopg2 编译失败 → PostgreSQL 不可用(可先用 SQLite)"
|
|
fi
|
|
if [[ "$*" == *"--with-mysql"* ]]; then
|
|
echo " ... pymysql / cryptography(MySQL)"
|
|
pip install pymysql cryptography >/dev/null 2>&1 && echo " ✓ pymysql" \
|
|
|| echo " ⚠ MySQL 依赖失败(可先用 SQLite)"
|
|
fi
|
|
if [[ "$*" == *"--with-sftp"* ]]; then
|
|
echo " ... paramiko(SFTP 同步)"
|
|
pip install paramiko >/dev/null 2>&1 && echo " ✓ paramiko" \
|
|
|| echo " ⚠ paramiko 失败 → SFTP 同步不可用"
|
|
fi
|
|
|
|
# ---------- 5. 目录与收尾 ----------
|
|
echo ""
|
|
echo "==> [5/5] 创建数据目录"
|
|
mkdir -p downloads data logs
|
|
echo " ✓ downloads/ data/ logs/ 已就绪"
|
|
|
|
echo ""
|
|
echo "=========================================="
|
|
echo " 安装完成!"
|
|
echo "=========================================="
|
|
echo " 启动服务器:"
|
|
echo " source $VENV_DIR/bin/activate"
|
|
echo " python main.py --memory-limit 256M --workers 2"
|
|
echo ""
|
|
echo " 1G 内存建议(电视盒子):"
|
|
echo " - 已适配 settings.json(show_hash 关闭、max_workers=2、缓存 64MB)"
|
|
echo " - 强烈建议加 swap,否则大文件同步/上传易 OOM:"
|
|
echo " fallocate -l 1G /swapfile && chmod 600 /swapfile"
|
|
echo " mkswap /swapfile && swapon /swapfile"
|
|
echo " echo '/swapfile none swap sw 0 0' >> /etc/fstab"
|
|
echo " - 存储路径已指向 /mnt/sda1 (base_dir=downloads/, 数据库=hyc-data/)"
|
|
echo " 若外接盘格式是 vfat/exfat,请把 settings.json 的 database.sqlite.path"
|
|
echo " 改回 ./data/hyc.db (SQLite 需要 POSIX 文件锁, vfat/exfat 不支持)"
|
|
echo " 检测: lsblk -f /dev/sda1"
|
|
echo "=========================================="
|