#!/bin/bash # 准备Linux打包的源代码包(修复版) echo "=== 准备Linux打包源代码包(修复版) ===" # 删除旧的包 rm -rf cloud-drive-source-* # 创建临时目录 PACKAGE_DIR="cloud-drive-source-$(date +%Y%m%d-%H%M%S)" mkdir -p "$PACKAGE_DIR" echo "复制源代码和配置文件..." # 复制必要文件 cp -r app/ "$PACKAGE_DIR/" cp main.py "$PACKAGE_DIR/" cp build.spec "$PACKAGE_DIR/" cp build_linux_fixed.py "$PACKAGE_DIR/build_linux.py" cp requirements.txt "$PACKAGE_DIR/" cp requirements-build.txt "$PACKAGE_DIR/" cp .env.example "$PACKAGE_DIR/" cp cloud-drive.service "$PACKAGE_DIR/" cp install.sh "$PACKAGE_DIR/" cp install_user.sh "$PACKAGE_DIR/" cp BUILD_GUIDE.md "$PACKAGE_DIR/" # 创建Linux打包脚本 cat > "$PACKAGE_DIR/build_on_linux.sh" << 'EOF' #!/bin/bash # 在Linux环境下的打包脚本(修复版) echo "=== 在Linux环境下打包云盘后端(修复版) ===" # 检查是否为root用户 if [ "$EUID" -eq 0 ]; then echo "警告: 不建议在root用户下直接打包,建议使用普通用户" read -p "是否继续?(y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi # 安装系统依赖(Ubuntu/Debian) if command -v apt-get &> /dev/null; then echo "检测到Ubuntu/Debian系统" sudo apt-get update || echo "无法更新包列表,跳过..." sudo apt-get install -y python3 python3-pip python3-venv build-essential || echo "安装系统依赖失败,请手动安装" # 安装系统依赖(CentOS/RHEL) elif command -v yum &> /dev/null; then echo "检测到CentOS/RHEL系统" sudo yum install -y python3 python3-pip python3-devel gcc gcc-c++ make || echo "安装系统依赖失败,请手动安装" # 安装系统依赖(其他系统) else echo "警告: 未检测到支持的包管理器,请手动安装Python3和编译工具" fi # 检查Python版本 python3 --version if [ $? -ne 0 ]; then echo "错误: Python3 未安装或无法访问" exit 1 fi # 创建虚拟环境 echo "创建Python虚拟环境..." python3 -m venv venv || { echo "错误: 创建虚拟环境失败" exit 1 } # 激活虚拟环境 echo "激活虚拟环境..." source venv/bin/activate || { echo "错误: 激活虚拟环境失败" exit 1 } # 升级pip echo "升级pip..." pip install --upgrade pip # 安装依赖 echo "安装Python依赖包..." pip install -r requirements-build.txt || { echo "错误: 安装构建依赖失败" exit 1 } pip install -r requirements.txt || { echo "错误: 安装应用依赖失败" exit 1 } # 运行打包 echo "开始打包..." python build_linux.py || { echo "错误: 打包失败" exit 1 } # 检查打包结果 if [ -f "deploy/cloud-drive-server" ]; then echo "=== 打包成功 ===" echo "可执行文件位置: deploy/cloud-drive-server" echo "文件大小: $(ls -lh deploy/cloud-drive-server | awk '{print $5}')" echo "" echo "下一步操作:" echo "1. 用户级安装(推荐,无需sudo):" echo " cd deploy && ./install_user.sh" echo "" echo "2. 系统级安装(需要sudo权限):" echo " cd deploy && sudo ./install.sh" echo "" echo "3. 直接运行:" echo " cd deploy && ./cloud-drive-server" echo "" echo "4. 查看详细说明:" echo " cat deploy/README.md" else echo "错误: 打包失败,未找到可执行文件" exit 1 fi EOF chmod +x "$PACKAGE_DIR/build_on_linux.sh" # 创建问题排查脚本 cat > "$PACKAGE_DIR/troubleshoot.sh" << 'EOF' #!/bin/bash # 问题排查脚本 echo "=== 云盘后端问题排查工具 ===" echo "1. 检查Python环境:" python3 --version 2>&1 || echo "Python3 未安装" echo "" echo "2. 检查pip:" pip3 --version 2>&1 || echo "pip3 未安装" echo "" echo "3. 检查系统依赖:" if command -v apt-get &> /dev/null; then echo "包管理器: apt-get (Ubuntu/Debian)" dpkg -l | grep -E "(python3|gcc|make)" || echo "检查系统依赖包..." elif command -v yum &> /dev/null; then echo "包管理器: yum (CentOS/RHEL)" rpm -qa | grep -E "(python3|gcc|make)" || echo "检查系统依赖包..." else echo "未检测到支持的包管理器" fi echo "" echo "4. 检查虚拟环境:" if [ -d "venv" ]; then echo "虚拟环境目录存在" if [ -f "venv/bin/python" ]; then echo "虚拟环境Python可执行文件存在" venv/bin/python --version else echo "虚拟环境Python可执行文件不存在" fi else echo "虚拟环境目录不存在" fi echo "" echo "5. 检查源代码文件:" for file in main.py build.spec requirements.txt; do if [ -f "$file" ]; then echo "✓ $file 存在" else echo "✗ $file 不存在" fi done echo "" echo "6. 检查app目录:" if [ -d "app" ]; then echo "✓ app目录存在" find app -name "*.py" | head -5 | while read file; do echo " ✓ $file" done else echo "✗ app目录不存在" fi echo "" echo "7. 网络连接测试:" if ping -c 1 pypi.org &> /dev/null; then echo "✓ 可以访问PyPI" else echo "✗ 无法访问PyPI,可能需要配置代理" fi echo "" echo "=== 排查完成 ===" echo "如果发现问题,请根据上述输出进行修复" EOF chmod +x "$PACKAGE_DIR/troubleshoot.sh" # 创建压缩包 echo "创建压缩包..." tar -czf "$PACKAGE_DIR.tar.gz" "$PACKAGE_DIR" echo "=== 源代码包准备完成 ===" echo "生成的文件:" echo " $PACKAGE_DIR/ - 源代码目录" echo " $PACKAGE_DIR.tar.gz - 压缩包 ($(ls -lh "$PACKAGE_DIR.tar.gz" | awk '{print $5}'))" echo "" echo "修复内容:" echo " ✓ 添加了用户级安装脚本 install_user.sh" echo " ✓ 修复了 build.spec 依赖缺失问题" echo " ✓ 改进了打包脚本 build_linux.py" echo " ✓ 添加了问题排查脚本 troubleshoot.sh" echo " ✓ 增强了安装说明文档" echo "" echo "将压缩包上传到Linux服务器后,解压并运行:" echo " tar -xzf $PACKAGE_DIR.tar.gz" echo " cd $PACKAGE_DIR" echo " ./build_on_linux.sh" echo "" echo "如果遇到问题,可以先运行:" echo " ./troubleshoot.sh" EOF chmod +x backend/prepare_linux_package_fixed.sh