Add one-click start scripts for Linux and Windows
- start.sh: Linux/Mac one-click launcher - start.bat: Windows one-click launcher - Both scripts auto-detect/install: - Python 3.13+ - uv package manager - Chrome/Chromium browser - Sync Python dependencies - Create .env/config.json from templates if missing - Default to unlimited accounts (--count 0) - Pass through CLI args for custom runs
This commit is contained in:
1 parent
55f56d27c9
commit
c56d0d240a
6 files changed
+811
-143
No files matched your search
@@ -0,0 +1,243 @@
|
||||
#!/usr/bin/env bash
|
||||
# ============================================================================
|
||||
# Grok 注册机 - 一键启动脚本 (Linux)
|
||||
# 自动检测/安装环境依赖,然后启动 register_cli.py
|
||||
#
|
||||
# 用法:
|
||||
# ./start.sh # 默认不限数量(持续注册)
|
||||
# ./start.sh --count 10 # 跑 10 个
|
||||
# ./start.sh --count 10 --threads 3 # 3 线程跑 10 个
|
||||
# ./start.sh --extra 5 # 在已有基础上再注册 5 个
|
||||
#
|
||||
# 首次运行会自动:
|
||||
# 1. 检测 Python 3.13+
|
||||
# 2. 安装 uv 包管理器
|
||||
# 3. 同步 Python 依赖
|
||||
# 4. 检测 Chrome/Chromium 浏览器
|
||||
# 5. 从模板复制 .env / config.json(如缺失)
|
||||
# ============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
# ── 颜色 ──
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
BOLD='\033[1m'
|
||||
NC='\033[0m'
|
||||
|
||||
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
echo -e "${CYAN}${BOLD}============================================${NC}"
|
||||
echo -e "${CYAN}${BOLD} Grok 注册机 - 一键启动 (Linux)${NC}"
|
||||
echo -e "${CYAN}${BOLD}============================================${NC}"
|
||||
echo ""
|
||||
|
||||
# ── 1. 检测 Python 3.13+ ──
|
||||
step1_check_python() {
|
||||
echo -e "${CYAN}[1/5] 检测 Python 环境...${NC}"
|
||||
|
||||
# 优先使用 mise(如果已安装)
|
||||
if command -v mise &>/dev/null && mise which python &>/dev/null 2>&1; then
|
||||
local py
|
||||
py=$(mise which python 2>/dev/null || true)
|
||||
if [ -n "$py" ] && "$py" -c "import sys; sys.exit(0 if sys.version_info >= (3,13) else 1)" 2>/dev/null; then
|
||||
echo -e " ${GREEN}✓${NC} Python (mise): $($py --version 2>&1) at $py"
|
||||
PYTHON_BIN="$py"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
# 检查系统 Python
|
||||
for candidate in python3.13 python3.14 python3 python; do
|
||||
if command -v "$candidate" &>/dev/null; then
|
||||
local ver
|
||||
ver=$("$candidate" -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')" 2>/dev/null || echo "0")
|
||||
local major
|
||||
major=$(echo "$ver" | cut -d. -f1)
|
||||
if [ "$major" -ge 3 ]; then
|
||||
local minor
|
||||
minor=$(echo "$ver" | cut -d. -f2)
|
||||
if [ "$minor" -ge 13 ]; then
|
||||
echo -e " ${GREEN}✓${NC} Python $ver: $("$candidate" --version 2>&1)"
|
||||
PYTHON_BIN="$candidate"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# 检查 .venv
|
||||
if [ -f "$PROJECT_DIR/.venv/bin/python3" ]; then
|
||||
local py="$PROJECT_DIR/.venv/bin/python3"
|
||||
if "$py" -c "import sys; sys.exit(0 if sys.version_info >= (3,13) else 1)" 2>/dev/null; then
|
||||
echo -e " ${GREEN}✓${NC} Python (.venv): $("$py" --version 2>&1)"
|
||||
PYTHON_BIN="$py"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e " ${RED}✗${NC} 未找到 Python 3.13+"
|
||||
echo ""
|
||||
echo -e " ${YELLOW}请通过以下任一方式安装 Python 3.13:${NC}"
|
||||
echo ""
|
||||
echo " # 方式 1: 使用 mise(推荐,自动管理版本+venv)"
|
||||
echo " curl https://mise.run | sh"
|
||||
echo " mise install python@3.13"
|
||||
echo " mise trust"
|
||||
echo ""
|
||||
echo " # 方式 2: Ubuntu/Debian deadsnakes PPA"
|
||||
echo " sudo add-apt-repository -y ppa:deadsnakes/ppa"
|
||||
echo " sudo apt update && sudo apt install -y python3.13 python3.13-venv"
|
||||
echo ""
|
||||
echo " # 方式 3: 使用 uv 自动获取 Python"
|
||||
echo " curl -LsSf https://astral.sh/uv/install.sh | sh"
|
||||
echo " uv python install 3.13"
|
||||
echo ""
|
||||
echo " # 方式 4: Arch Linux"
|
||||
echo " sudo pacman -S python"
|
||||
echo ""
|
||||
return 1
|
||||
}
|
||||
|
||||
# ── 2. 检测/安装 uv ──
|
||||
step2_check_uv() {
|
||||
echo -e "${CYAN}[2/5] 检测 uv 包管理器...${NC}"
|
||||
|
||||
if command -v uv &>/dev/null; then
|
||||
echo -e " ${GREEN}✓${NC} uv: $(uv --version 2>&1)"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo -e " ${YELLOW}⚠${NC} 未检测到 uv,正在自动安装..."
|
||||
if command -v curl &>/dev/null; then
|
||||
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
elif command -v wget &>/dev/null; then
|
||||
wget -qO- https://astral.sh/uv/install.sh | sh
|
||||
else
|
||||
echo -e " ${RED}✗${NC} 需要 curl 或 wget 来安装 uv"
|
||||
echo " 请手动安装: curl -LsSf https://astral.sh/uv/install.sh | sh"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 重新加载 PATH(uv 安装到 ~/.local/bin 或 ~/.cargo/bin)
|
||||
export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"
|
||||
|
||||
if command -v uv &>/dev/null; then
|
||||
echo -e " ${GREEN}✓${NC} uv 安装成功: $(uv --version 2>&1)"
|
||||
return 0
|
||||
fi
|
||||
|
||||
echo -e " ${RED}✗${NC} uv 安装失败,请手动安装: https://docs.astral.sh/uv/"
|
||||
return 1
|
||||
}
|
||||
|
||||
# ── 3. 同步依赖 ──
|
||||
step3_sync_deps() {
|
||||
echo -e "${CYAN}[3/5] 同步 Python 依赖...${NC}"
|
||||
|
||||
if command -v mise &>/dev/null && [ -f "$PROJECT_DIR/mise.toml" ]; then
|
||||
# mise 管理 venv,直接用 uv sync
|
||||
if [ -n "${PYTHON_BIN:-}" ]; then
|
||||
"$PYTHON_BIN" -m uv sync 2>/dev/null || uv sync
|
||||
else
|
||||
uv sync
|
||||
fi
|
||||
else
|
||||
# 纯 uv 模式
|
||||
uv sync
|
||||
fi
|
||||
|
||||
echo -e " ${GREEN}✓${NC} 依赖同步完成"
|
||||
}
|
||||
|
||||
# ── 4. 检测浏览器 ──
|
||||
step4_check_browser() {
|
||||
echo -e "${CYAN}[4/5] 检测浏览器...${NC}"
|
||||
|
||||
local found=false
|
||||
for candidate in \
|
||||
google-chrome-stable google-chrome chromium chromium-browser \
|
||||
/usr/bin/google-chrome-stable /usr/bin/google-chrome \
|
||||
/snap/bin/chromium /usr/bin/chromium /usr/bin/chromium-browser; do
|
||||
if command -v "$candidate" &>/dev/null || [ -x "$candidate" ] 2>/dev/null; then
|
||||
echo -e " ${GREEN}✓${NC} 浏览器: $(command -v "$candidate" 2>/dev/null || echo "$candidate")"
|
||||
found=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if ! $found; then
|
||||
echo -e " ${YELLOW}⚠${NC} 未检测到 Chrome/Chromium 浏览器"
|
||||
echo ""
|
||||
echo " DrissionPage 需要 Chrome 或 Chromium 才能运行。"
|
||||
echo ""
|
||||
echo " 安装方式:"
|
||||
echo " # Ubuntu/Debian"
|
||||
echo " sudo apt install -y chromium-browser"
|
||||
echo " # 或安装 Google Chrome:"
|
||||
echo " wget -q -O /tmp/chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"
|
||||
echo " sudo dpkg -i /tmp/chrome.deb"
|
||||
echo ""
|
||||
echo " # Arch Linux"
|
||||
echo " sudo pacman -S chromium"
|
||||
echo ""
|
||||
echo " ${YELLOW}脚本将继续,但注册可能因缺少浏览器而失败。${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
# ── 5. 配置文件模板 ──
|
||||
step5_config_templates() {
|
||||
echo -e "${CYAN}[5/5] 检查配置文件...${NC}"
|
||||
|
||||
if [ ! -f "$PROJECT_DIR/.env" ] && [ -f "$PROJECT_DIR/.env.example" ]; then
|
||||
cp "$PROJECT_DIR/.env.example" "$PROJECT_DIR/.env"
|
||||
echo -e " ${YELLOW}⚠${NC} 已从 .env.example 创建 .env,请编辑填入真实配置"
|
||||
elif [ -f "$PROJECT_DIR/.env" ]; then
|
||||
echo -e " ${GREEN}✓${NC} .env 已存在"
|
||||
fi
|
||||
|
||||
if [ ! -f "$PROJECT_DIR/config.json" ] && [ -f "$PROJECT_DIR/config.example.json" ]; then
|
||||
cp "$PROJECT_DIR/config.example.json" "$PROJECT_DIR/config.json"
|
||||
echo -e " ${YELLOW}⚠${NC} 已从 config.example.json 创建 config.json,请编辑填入真实配置"
|
||||
elif [ -f "$PROJECT_DIR/config.json" ]; then
|
||||
echo -e " ${GREEN}✓${NC} config.json 已存在"
|
||||
fi
|
||||
}
|
||||
|
||||
# ── 主流程 ──
|
||||
main() {
|
||||
step1_check_python || exit 1
|
||||
echo ""
|
||||
step2_check_uv || exit 1
|
||||
echo ""
|
||||
step3_sync_deps
|
||||
echo ""
|
||||
step4_check_browser
|
||||
echo ""
|
||||
step5_config_templates
|
||||
echo ""
|
||||
|
||||
echo -e "${CYAN}${BOLD}============================================${NC}"
|
||||
echo -e "${GREEN}${BOLD} 环境就绪,启动 register_cli.py${NC}"
|
||||
echo -e "${CYAN}${BOLD}============================================${NC}"
|
||||
echo ""
|
||||
|
||||
# 默认不限数量(--count 0),除非用户显式传参
|
||||
if [ $# -eq 0 ]; then
|
||||
echo -e "${YELLOW}[*] 默认模式:不限数量,持续注册(Ctrl+C 停止)${NC}"
|
||||
echo ""
|
||||
ARGS="--count 0"
|
||||
else
|
||||
ARGS="$*"
|
||||
fi
|
||||
|
||||
if command -v mise &>/dev/null && [ -f "$PROJECT_DIR/mise.toml" ]; then
|
||||
exec mise run register -- -- $ARGS
|
||||
else
|
||||
exec uv run python -u register_cli.py $ARGS
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in new issue
Block a user