Trss-Yunzai安装脚本
TRSS-Yunzai QQBot官方协议自动安装脚本(稳定性较低)
可直接运行
bash <(curl -fsSL https://raw.githubusercontent.com/zyhqwq/zyhqwq.github.io/main/Yunzai-install.sh)
#!/bin/bash
# TRSS-Yunzai QQBot官方协议自动安装脚本 (支持 ARM64 和 x64)
# 更新:Redis 8.2.3 + Node.js v24.11.0
# 自动架构检测 + 多版本Chromium支持
set -e
echo "========================================"
echo " TRSS-Yunzai QQBot官方协议安装脚本"
echo " (支持 ARM64 和 x64 架构)"
echo " Redis 8.2.3 + Node.js 24.11.0"
echo " 注意:请在家庭局域网环境使用"
echo " 服务器环境使用可能导致封号!"
echo "========================================"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检测系统架构
detect_architecture() {
local arch
arch=$(uname -m)
case $arch in
"x86_64")
CURRENT_ARCH="x64"
NODE_URL="https://nodejs.org/dist/v24.11.0/node-v24.11.0-linux-x64.tar.xz"
;;
"aarch64"|"arm64")
CURRENT_ARCH="arm64"
NODE_URL="https://nodejs.org/dist/v24.11.0/node-v24.11.0-linux-arm64.tar.xz"
;;
*)
log_error "不支持的架构: $arch"
log_info "支持的架构: x86_64 (x64), aarch64 (arm64)"
exit 1
;;
esac
log_info "检测到系统架构: $arch, 使用 $CURRENT_ARCH 版本"
}
# 检查系统环境
check_system() {
detect_architecture
# 检查是否在桌面环境
if [[ -n "$DISPLAY" ]]; then
log_warn "检测到图形环境,但脚本将按服务器模式配置"
fi
# 检查内存
local total_mem
total_mem=$(free -g | awk 'NR==2{print $2}')
if [[ $total_mem -lt 2 ]]; then
log_warn "系统内存较低(${total_mem}G),建议至少2G内存以顺畅运行"
fi
}
# 安装基础依赖
install_basic_deps() {
log_info "更新软件包和安装基础依赖..."
sudo apt update
sudo apt install -y wget curl unzip screen git lsb-release build-essential tcl dpkg apt-transport-https
}
# Chromium 安装 (多方法支持)
install_chromium() {
log_info "开始安装 Chromium (架构: $CURRENT_ARCH)..."
# 方法1: 尝试使用系统包管理器安装
if install_chromium_apt; then
log_info "✓ 通过APT安装Chromium成功"
return 0
fi
# 方法2: 尝试安装Debian版本
if install_chromium_debian; then
log_info "✓ 通过Debian包安装Chromium成功"
return 0
fi
# 方法3: 尝试Snap安装
if install_chromium_snap; then
log_info "✓ 通过Snap安装Chromium成功"
return 0
fi
log_error "所有Chromium安装方法都失败了"
return 1
}
# 方法1: 使用APT安装Chromium
install_chromium_apt() {
log_info "尝试通过APT安装Chromium..."
if sudo apt install -y chromium-browser chromium-chromedriver; then
# 安装无头模式依赖
sudo apt install -y \
xvfb \
libnss3 \
libxss1 \
libasound2 \
libatk-bridge2.0-0 \
libgtk-3-0 \
libgbm-dev \
libxrandr2 \
libxcomposite1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrender1 \
libxtst6
return 0
else
log_warn "APT安装Chromium失败,尝试其他方法..."
sudo apt install -f -y
return 1
fi
}
# 方法2: 安装Debian版本的Chromium
install_chromium_debian() {
log_info "尝试安装Debian版本的Chromium..."
local temp_dir
temp_dir=$(mktemp -d -t chromium-install-XXXXXX)
cd "$temp_dir"
# 根据架构选择包
if [[ "$CURRENT_ARCH" == "x64" ]]; then
local packages=(
"chromium-codecs-ffmpeg-extra_112.0.5615.49-0ubuntu0.18.04.1_amd64.deb"
"chromium-browser_112.0.5615.49-0ubuntu0.18.04.1_amd64.deb"
"chromium-chromedriver_112.0.5615.49-0ubuntu0.18.04.1_amd64.deb"
)
else
local packages=(
"chromium-codecs-ffmpeg-extra_112.0.5615.49-0ubuntu0.18.04.1_arm64.deb"
"chromium-browser_112.0.5615.49-0ubuntu0.18.04.1_arm64.deb"
"chromium-chromedriver_112.0.5615.49-0ubuntu0.18.04.1_arm64.deb"
)
fi
local base_url="http://ports.ubuntu.com/pool/universe/c/chromium-browser"
for package in "${packages[@]}"; do
log_info "下载: $package"
if ! wget -q --timeout=30 --tries=3 "$base_url/$package"; then
log_warn "下载 $package 失败"
rm -rf "$temp_dir"
return 1
fi
done
# 安装包
for package in "${packages[@]}"; do
if [[ -f "$package" ]]; then
sudo dpkg -i "$package" 2>/dev/null || true
fi
done
sudo apt install -f -y
rm -rf "$temp_dir"
return 0
}
# 方法3: 使用Snap安装Chromium
install_chromium_snap() {
log_info "尝试通过Snap安装Chromium..."
if ! command -v snap &> /dev/null; then
log_info "安装snapd..."
sudo apt install -y snapd
fi
if sudo snap install chromium; then
# 创建符号链接以便系统识别
sudo ln -sf /snap/bin/chromium /usr/local/bin/chromium-browser
return 0
else
log_warn "Snap安装Chromium失败"
return 1
fi
}
# 配置 Chromium 服务器优化
configure_chromium_server() {
log_info "配置 Chromium 服务器优化..."
# 创建无头模式启动脚本
sudo tee /usr/local/bin/chromium-headless > /dev/null << 'EOF'
#!/bin/bash
# Chromium 无头模式启动脚本 - TRSS-Yunzai 优化版
DEFAULT_ARGS="--headless \
--disable-gpu \
--no-sandbox \
--disable-dev-shm-usage \
--disable-software-rasterizer \
--remote-debugging-port=9222 \
--user-data-dir=/tmp/chromium-profile"
if command -v xvfb-run > /dev/null; then
exec xvfb-run -a --server-args="-screen 0 1280x1024x24" chromium-browser $DEFAULT_ARGS "$@"
else
exec chromium-browser $DEFAULT_ARGS "$@"
fi
EOF
sudo chmod +x /usr/local/bin/chromium-headless
log_info "创建无头模式启动脚本: /usr/local/bin/chromium-headless"
}
# 验证 Chromium 安装
verify_chromium_installation() {
log_info "验证 Chromium 安装..."
if command -v chromium-browser &> /dev/null || command -v chromium &> /dev/null; then
local version
if command -v chromium-browser &> /dev/null; then
version=$(chromium-browser --version 2>/dev/null || echo "未知版本")
else
version=$(chromium --version 2>/dev/null || echo "未知版本")
fi
log_info "✓ Chromium 安装成功: $version"
# 测试无头模式
log_info "测试无头模式..."
local test_cmd="chromium-browser"
if ! command -v chromium-browser &> /dev/null; then
test_cmd="chromium"
fi
if timeout 15s $test_cmd --headless --no-sandbox --disable-gpu --dump-dom https://example.com &> /dev/null; then
log_info "✓ 无头模式测试通过"
else
log_warn "⚠ 无头模式测试失败,但安装继续"
fi
return 0
else
log_error "✗ Chromium 安装失败 - 未找到chromium-browser或chromium命令"
return 1
fi
}
# 安装 Redis 8.2.3
install_redis() {
log_info "安装 Redis 8.2.3..."
cd ~
log_info "下载 Redis 8.2.3 源码..."
wget https://download.redis.io/releases/redis-8.2.3.tar.gz
tar -xf redis-8.2.3.tar.gz
cd redis-8.2.3
log_info "编译 Redis..."
make
sudo make install
# 创建 Redis 配置目录
sudo mkdir -p /etc/redis
sudo mkdir -p /var/lib/redis
# 创建 Redis 配置文件
log_info "创建 Redis 配置文件..."
sudo tee /etc/redis/redis.conf > /dev/null << EOF
bind 127.0.0.1
port 6379
daemonize no
pidfile /var/run/redis/redis-server.pid
logfile /var/log/redis/redis-server.log
dir /var/lib/redis
EOF
sudo mkdir -p /var/log/redis
sudo chown redis:redis /var/log/redis
# 创建 Redis 服务文件
log_info "创建 Redis 系统服务..."
sudo tee /etc/systemd/system/redis.service > /dev/null << EOF
[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
User=redis
Group=redis
[Install]
WantedBy=multi-user.target
EOF
# 创建 Redis 用户和设置权限
if ! id "redis" &>/dev/null; then
sudo useradd -r -s /bin/false redis
fi
sudo chown -R redis:redis /var/lib/redis
log_info "启动 Redis 服务..."
sudo systemctl daemon-reload
sudo systemctl enable redis
sudo systemctl start redis
log_info "Redis 8.2.3 已安装并启动 (systemd service: redis)"
}
# 安装 Node.js v24.11.0
install_nodejs() {
log_info "安装 Node.js v24.11.0 (架构: $CURRENT_ARCH)..."
# 检查是否已安装 Node.js
if command -v node &> /dev/null && node -v | grep -q "v24"; then
log_info "Node.js 24 已安装"
return
fi
cd ~
log_info "下载 Node.js v24.11.0 Linux $CURRENT_ARCH 版本..."
wget "$NODE_URL" -O node-v24.11.0-linux-$CURRENT_ARCH.tar.xz
tar -xf node-v24.11.0-linux-$CURRENT_ARCH.tar.xz
# 移动到系统目录
sudo mv node-v24.11.0-linux-$CURRENT_ARCH /usr/local/nodejs
# 创建符号链接
sudo ln -sf /usr/local/nodejs/bin/node /usr/local/bin/node
sudo ln -sf /usr/local/nodejs/bin/npm /usr/local/bin/npm
sudo ln -sf /usr/local/nodejs/bin/npx /usr/local/bin/npx
# 配置环境变量
echo 'export PATH=/usr/local/nodejs/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
log_info "验证 Node.js 安装..."
node -v
npm -v
log_info "配置 npm 淘宝镜像..."
npm config set registry https://registry.npmmirror.com
log_info "Node.js v24.11.0 ($CURRENT_ARCH) 安装完成"
}
# 安装 TRSS-Yunzai
install_yunzai() {
log_info "安装 TRSS-Yunzai..."
cd ~
if [[ -d "Yunzai" ]]; then
log_info "Yunzai 目录已存在,跳过克隆"
else
# 国内镜像
git clone https://gitee.com/TimeRainStarSky/Yunzai
fi
cd Yunzai
log_info "安装 pnpm 和依赖..."
npm i -g pnpm
pnpm i
log_info "TRSS-Yunzai 安装完成"
}
# 启动服务
start_services() {
log_info "启动服务..."
# 确保 Redis 运行
if sudo systemctl is-active --quiet redis; then
log_info "Redis 服务已在运行"
else
sudo systemctl start redis
log_info "Redis 服务已启动"
fi
# 启动 Yunzai
cd ~/Yunzai
if screen -ls | grep -q "yunzai"; then
log_info "Yunzai 已在运行"
else
screen -dmS yunzai node app
log_info "Yunzai 已启动 (screen session: yunzai)"
fi
}
# 显示使用说明
show_usage() {
echo
echo "========================================"
echo " 多架构服务器安装完成!"
echo " 架构: $CURRENT_ARCH"
echo " Redis 8.2.3 + Node.js 24.11.0"
echo "========================================"
echo
echo "🎯 服务状态检查:"
echo " screen -ls # 查看所有服务"
echo " screen -r yunzai # 进入 Yunzai 会话"
echo " sudo systemctl status redis # 检查 Redis 状态"
echo " Ctrl+A+D # 退出 screen 会话"
echo
echo "🔧 版本信息:"
echo " 架构: $CURRENT_ARCH"
echo " Redis: $(redis-server --version 2>/dev/null || echo '8.2.3')"
echo " Node.js: $(node -v)"
echo " npm: $(npm -v)"
echo
echo "📦 Yunzai 插件安装 (在 Yunzai 会话中输入):"
echo " #安装QQBot-Plugin # 安装 QQBot 官方协议插件"
echo " #安装genshin # 安装原神插件"
echo " #安装miao-plugin # 安装喵喵插件"
echo " #安装TRSS-Plugin # 安装 TRSS 插件"
echo
echo "🤖 QQBot 官方协议配置:"
echo " 1. 访问 https://q.qq.com/ 创建机器人"
echo " 2. 获取 AppID, Token, AppSecret"
echo " 3. 在 Yunzai 中输入: #QQBot设置QQ号:AppID:Token:AppSecret:1:1"
echo
echo "🌐 Chromium 支持:"
echo " chromium-headless # 优化无头模式启动"
echo " chromium-browser --version # 验证安装 (如果可用)"
echo " chromium --version # 验证安装 (如果可用)"
echo
echo "⚠️ 重要提醒:"
echo " - 请使用小号测试,避免主号风险"
echo " - 仅在家庭局域网环境使用"
echo " - 官方协议更稳定,风险较低"
echo
echo "🚨 故障排除:"
echo " - Chromium 问题: 使用 --no-sandbox 参数"
echo " - Redis 问题: sudo systemctl restart redis"
echo " - Node.js 问题: 检查 /usr/local/nodejs 权限"
echo
echo "========================================"
}
# 主函数
main() {
log_info "开始 TRSS-Yunzai QQBot官方协议 $CURRENT_ARCH 服务器安装..."
# 检查系统
check_system
# 安装基础依赖
install_basic_deps
# 安装 Chromium (多方法)
if install_chromium; then
configure_chromium_server
verify_chromium_installation
else
log_warn "Chromium 安装失败,但继续其他组件安装"
fi
# 安装 Redis 8.2.3
install_redis
# 安装 Node.js v24.11.0
install_nodejs
# 安装 TRSS-Yunzai
install_yunzai
# 启动服务
start_services
# 显示使用说明
show_usage
log_info "安装完成!请按照上述说明配置 QQBot 官方协议。"
}
# 执行主函数
main "$@"本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 桦哲的博客!
评论
