Baseline: pr1 HYC下载站 v2.3 before security/functional fixes

This commit is contained in:
HYC Fixer
2026-08-30 12:12:58 +08:00
commit a8e773839b
77 changed files with 38568 additions and 0 deletions
+93
View File
@@ -0,0 +1,93 @@
#!/bin/bash
# ============================================
# HYC下载站 v2.3 - 多架构 Docker 构建脚本
# 支持: amd64, arm64, arm/v7, i386
# ============================================
set -e
# 颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
VERSION=${1:-v2.3}
REGISTRY=${2:-hyc-download-station}
TAG=${3:-$VERSION}
# 支持的平台
PLATFORMS="linux/amd64,linux/arm64,linux/arm/v7,linux/386"
echo "========================================"
echo " HYC下载站 v2.3 - 多架构构建"
echo "========================================"
echo " 版本: $TAG"
echo " 平台: $PLATFORMS"
echo
# 检查 Docker
if ! command -v docker &> /dev/null; then
echo -e "${RED}✗ Docker 未安装${NC}"
exit 1
fi
# 检查 BuildX
if ! docker buildx version &> /dev/null; then
echo -e "${YELLOW}⚠ Docker BuildX 未安装,尝试安装...${NC}"
docker buildx install || true
fi
# 创建构建器
echo "[1/4] 创建构建器..."
docker buildx rm hyc-builder 2>/dev/null || true
docker buildx create \
--name hyc-builder \
--platform $PLATFORMS \
--use
# 引导构建器
echo "[2/4] 引导构建器..."
docker buildx inspect --bootstrap
# 构建镜像
echo "[3/4] 构建镜像..."
echo " 构建中,请稍候..."
START_TIME=$(date +%s)
docker buildx build \
--platform $PLATFORMS \
--tag "$REGISTRY:$TAG" \
--tag "$REGISTRY:latest" \
--push \
--file docker/Dockerfile.multiarch \
.
END_TIME=$(date +%s)
BUILD_TIME=$((END_TIME - START_TIME))
echo -e "${GREEN}✓ 构建完成 (${BUILD_TIME}秒)${NC}"
# 推送清单
echo "[4/4] 创建清单..."
docker manifest create "$REGISTRY:$TAG" \
"$REGISTRY:$TAG-amd64" \
"$REGISTRY:$TAG-arm64" \
"$REGISTRY:$TAG-arm-v7" \
"$REGISTRY:$TAG-386" 2>/dev/null || true
docker manifest push "$REGISTRY:$TAG" || true
echo
echo "========================================"
echo -e "${GREEN}✓ 多架构构建完成${NC}"
echo "========================================"
echo
echo "镜像标签:"
echo " - $REGISTRY:$TAG"
echo " - $REGISTRY:latest"
echo
echo "推送到仓库:"
echo " docker pull $REGISTRY:$TAG"
echo
+183
View File
@@ -0,0 +1,183 @@
#!/bin/bash
# ============================================
# HYC下载站 v2.3 - 系统兼容性检查脚本
# 支持: X86_32, X86_64, ARMv7, ARM64, MIPS 等
# ============================================
set -e
# 颜色
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo "========================================"
echo " HYC下载站 v2.3 - 兼容性检查"
echo "========================================"
echo
# 检测架构
ARCH=$(uname -m)
OS=$(uname -s)
echo "系统信息:"
echo " - 架构: $ARCH"
echo " - 系统: $OS"
echo
# 架构特定配置
case "$ARCH" in
x86_64)
echo "✓ x86_64 (64位) - 完全支持"
RECOMMENDED_WORKERS=4
;;
i386|i686)
echo "⚠ i386/i686 (32位) - 有限支持"
RECOMMENDED_WORKERS=2
echo " 建议: --workers 2"
;;
armv7l|armv7hl)
echo "✓ ARMv7 (32位) - 完全支持"
RECOMMENDED_WORKERS=2
;;
armv8l|aarch64)
echo "✓ ARM64 (64位) - 完全支持"
RECOMMENDED_WORKERS=4
;;
armv6l)
echo "⚠ ARMv6 - 有限支持 (可能需要重新编译)"
RECOMMENDED_WORKERS=1
;;
mips*)
echo "⚠ MIPS - 实验性支持"
RECOMMENDED_WORKERS=1
;;
*)
echo "⚠ 未知架构: $ARCH - 需要测试"
RECOMMENDED_WORKERS=1
;;
esac
echo
# Python 版本检查
PYTHON_VERSION=$(python3 --version 2>&1 || echo "未安装")
echo "Python 版本: $PYTHON_VERSION"
PYTHON_MAJOR=$(python3 -c 'import sys; print(sys.version_info.major)' 2>/dev/null || echo "0")
PYTHON_MINOR=$(python3 -c 'import sys; print(sys.version_info.minor)' 2>/dev/null || echo "0")
if [ "$PYTHON_MAJOR" -ge 3 ] && [ "$PYTHON_MINOR" -ge 8 ]; then
echo "✓ Python 3.8+ - 支持"
else
echo "✗ 需要 Python 3.8 或更高版本"
exit 1
fi
echo
# 内存检查
echo "内存检查:"
if command -v free &> /dev/null; then
TOTAL_MEM=$(free -m | awk '/^Mem:/{print $2}')
echo " - 总内存: ${TOTAL_MEM}MB"
if [ "$TOTAL_MEM" -lt 256 ]; then
echo "⚠ 内存低于 256MB - 使用 ultra_low 预设"
echo " python main.py --preset ultra_low"
elif [ "$TOTAL_MEM" -lt 512 ]; then
echo "⚠ 内存 256-512MB - 使用 low 预设"
echo " python main.py --preset low"
elif [ "$TOTAL_MEM" -lt 1024 ]; then
echo "✓ 内存 512MB-1GB - 使用 medium 预设 (默认)"
else
echo "✓ 内存 1GB+ - 使用 high 预设 (默认)"
fi
else
echo " (无法检测,使用默认配置)"
fi
echo
# 磁盘空间检查
echo "磁盘空间检查:"
DISK_FREE=$(df -BG . | awk '/^\//{print $4}' | sed 's/G//')
echo " - 可用: ${DISK_FREE}GB"
if [ "$DISK_FREE" -lt 1 ]; then
echo "⚠ 可用空间不足 1GB"
fi
echo
# 必需依赖检查
echo "必需依赖检查:"
MISSING_DEPS=""
check_dep() {
if command -v "$1" &> /dev/null; then
echo " ✓ $1"
else
echo " ✗ $1 (必需)"
MISSING_DEPS="$MISSING_DEPS $1"
fi
}
check_dep "python3"
echo
# 可选依赖检查
echo "可选依赖检查:"
check_opt() {
if command -v "$1" &> /dev/null; then
echo " ✓ $1"
else
echo " ⚠ $1 (可选)"
fi
}
check_opt "psutil" || pip3 install psutil
check_opt "sqlalchemy" || pip3 install sqlalchemy
echo
# Docker 构建检查 (如果使用 Docker)
if [ -f "../Dockerfile" ]; then
echo "Docker 构建检查:"
if command -v docker &> /dev/null; then
echo " ✓ Docker 可用"
# 检查 buildx 支持
if docker buildx version &> /dev/null; then
echo " ✓ Docker BuildX 支持多架构构建"
echo
echo "多架构构建命令:"
echo " docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t hyc:v2.3 ."
fi
else
echo " ⚠ Docker 不可用 (需要安装 Docker)"
fi
echo
fi
# 推荐启动命令
echo "========================================"
echo " 推荐启动命令"
echo "========================================"
# 根据检测结果生成推荐命令
CMD="python main.py --preset "
if [ "$TOTAL_MEM" -lt 256 ]; then
CMD="${CMD}ultra_low"
elif [ "$TOTAL_MEM" -lt 512 ]; then
CMD="${CMD}low"
elif [ "$TOTAL_MEM" -lt 1024 ]; then
CMD="${CMD}medium"
else
CMD="${CMD}high"
fi
echo
echo "$CMD"
echo
# 完整命令示例
echo "完整示例:"
echo " $CMD --host 0.0.0.0 --port 8080 --base-dir ./downloads"
echo
+69
View File
@@ -0,0 +1,69 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
平台检测工具
自动检测系统架构并推荐配置
"""
import sys
import os
# 添加项目根目录
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from core.optimization import (
ArchitectureDetector, LowMemoryConfig, check_compatibility
)
def main():
print("=" * 60)
print(" HYC下载站 v2.3 - 平台检测")
print("=" * 60)
print()
# 架构检测
print("[1/3] 架构信息")
arch = ArchitectureDetector.get_architecture()
for key, value in arch.items():
print(f" {key}: {value}")
print()
# 兼容性检查
print("[2/3] 兼容性检查")
compat = check_compatibility()
print(f" 兼容状态: {'✓ 通过' if compat['compatible'] else '✗ 有问题'}")
if compat['warnings']:
print(" 警告:")
for w in compat['warnings']:
print(f" ⚠ {w}")
print()
# 推荐配置
print("[3/3] 推荐配置")
recommended = ArchitectureDetector.get_recommended_config()
for key, value in recommended.items():
print(f" {key}: {value}")
# 低内存配置
low_mem = LowMemoryConfig('auto')
status = low_mem.get_status()
print()
print(" 自动检测预设:")
print(f" - 预设: {status['preset']}")
print(f" - 描述: {status['description']}")
print()
print(" 建议启动命令:")
cmd = f"python main.py --preset {status['preset']}"
if 'ultra_low' in str(status):
cmd += " --disable-ws --disable-sse"
print(f" {cmd}")
print()
# 返回状态码
return 0 if compat['compatible'] else 1
if __name__ == '__main__':
sys.exit(main())
+136
View File
@@ -0,0 +1,136 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
MC核心目录结构迁移脚本
将旧结构迁移到新结构:
旧: MCServerCore/{core}/{major}/{file.jar}
新: MCServerCore/{core}/{major}/{version}/{file.jar}
版本号提取规则:
- paper-1.20.1-6550.jar -> 1.20.1
- spongeneo-1.21.2-21.2.0-beta-13.0.0-RC1868-universal.jar -> 1.21.2
- spongevanilla-1.20.6-11.0.1-RC1916-universal.jar -> 1.20.6
"""
import os
import re
import shutil
from pathlib import Path
def extract_version(filename, core_name):
"""
从文件名中提取版本号
例如: spongevanilla-1.20.6-11.0.1-RC1916-universal.jar -> 1.20.6
例如: craftbukkit-1.9.jar -> 1.9
例如: spongevanilla-1.17-9.0.0-RC668-universal.jar -> 1.17
"""
# 去掉 .jar 后缀
name_without_jar = filename[:-4] if filename.endswith('.jar') else filename
# 模式:核心名-版本号-其他
# 版本号格式:数字.数字 或 数字.数字.数字 (如 1.9, 1.20.6, 1.21.2)
pattern = rf'^{re.escape(core_name)}-(\d+\.\d+(?:\.\d+)?)'
match = re.match(pattern, name_without_jar)
if match:
return match.group(1)
return None
def migrate_mc_structure(base_dir='./downloads/MCServerCore'):
"""迁移MC核心目录结构"""
mc_dir = Path(base_dir)
if not mc_dir.exists():
print(f"目录不存在: {mc_dir}")
return
migrated_count = 0
skipped_count = 0
errors = []
for jar_file in mc_dir.rglob('*.jar'):
try:
relative = jar_file.relative_to(mc_dir)
parts = relative.parts
except ValueError:
continue
# 格式: core/major/file.jar 或 core/major/version/file.jar
if len(parts) >= 3:
core_name = parts[0]
major = parts[1]
# 如果已经是新结构(len >= 4),跳过
if len(parts) >= 4:
print(f" 已在正确位置: {relative}")
continue
# 旧结构:core/major/file.jar
# 提取版本号
version = extract_version(jar_file.name, core_name)
if not version:
print(f" 无法提取版本号: {relative}")
skipped_count += 1
continue
# 构建新路径: core/major/version/file.jar
new_version_dir = jar_file.parent / version
new_path = new_version_dir / jar_file.name
# 如果目标目录已存在同名文件
if new_path.exists():
print(f" 目标已存在,跳过: {relative}")
skipped_count += 1
continue
try:
new_version_dir.mkdir(parents=True, exist_ok=True)
shutil.move(str(jar_file), str(new_path))
print(f" 移动: {relative} -> {new_path.relative_to(mc_dir)}")
migrated_count += 1
except Exception as e:
errors.append(f"移动失败 {relative}: {e}")
else:
print(f" 跳过(未知结构): {relative}")
skipped_count += 1
# 尝试清理空的目录
cleaned_dirs = 0
for dir_path in sorted(mc_dir.rglob('*'), reverse=True):
if dir_path.is_dir():
try:
if not any(dir_path.iterdir()):
dir_path.rmdir()
cleaned_dirs += 1
except OSError:
pass
print(f"\n迁移完成!")
print(f" 移动文件: {migrated_count}")
print(f" 跳过文件: {skipped_count}")
print(f" 清理空目录: {cleaned_dirs}")
if errors:
print(f"\n错误:")
for e in errors[:10]:
print(f" {e}")
if __name__ == '__main__':
import sys
base_dir = sys.argv[1] if len(sys.argv) > 1 else './downloads/MCServerCore'
print("=" * 60)
print("MC核心目录结构迁移工具")
print("旧结构: MCServerCore/{core}/{major}/{file.jar}")
print("新结构: MCServerCore/{core}/{major}/{version}/{file.jar}")
print("=" * 60)
print(f"基础目录: {base_dir}")
print()
migrate_mc_structure(base_dir)
+61
View File
@@ -0,0 +1,61 @@
#!/bin/bash
# ============================================
# HYC下载站 v2.3 - QEMU 仿真支持设置
# 用于在 x86_64 上构建 ARM 镜像
# ============================================
set -e
echo "========================================"
echo " QEMU 仿真支持设置"
echo "========================================"
# 检查是否需要设置
if [ "$(uname -m)" = "x86_64" ]; then
echo "检测到 x86_64 平台"
echo "将启用 ARM/i386 仿真支持"
fi
# 启用 QEMU 仿真
echo
echo "[1/3] 检查 QEMU ..."
# 注册 ARM 二进制格式
if [ -f /usr/bin/qemu-arm-static ]; then
echo "✓ qemu-arm-static 已安装"
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes || true
elif [ -f /usr/bin/qemu-arm ]; then
echo "✓ qemu-arm 已安装"
else
echo "⚠ QEMU 未安装,正在安装..."
apt-get update && apt-get install -y qemu-user-static || \
yum install -y qemu-user-static || \
apk add --no-cache qemu-arm qemu-i386
fi
# 设置 binfmt-misc
echo
echo "[2/3] 注册二进制格式..."
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes 2>/dev/null || \
echo " (可能需要手动配置)"
echo
echo "[3/3] 验证设置..."
echo "可用的仿真架构:"
for arch in arm arm64 i386; do
if [ -f "/usr/bin/qemu-$arch-static" ] || [ -f "/usr/bin/qemu-$arch" ]; then
echo " ✓ $arch"
else
echo " ✗ $arch"
fi
done
echo
echo "========================================"
echo "✓ QEMU 设置完成"
echo "========================================"
echo
echo "现在可以构建多架构镜像:"
echo " ./scripts/build-multiarch.sh"
echo