logo
0
0
WeChat Login

ReactOS CNB 构建配置

本文档说明了如何在 cnb.cool 平台上构建 ReactOS 并自动发布到 Release。

📁 文件说明

构建相关文件

  • Dockerfile - ReactOS 构建环境的 Docker 镜像
  • build.sh - ReactOS 自动构建脚本
  • .cnb.yml - CNB 平台构建配置
  • .ide/Dockerfile - 云原生开发环境配置

🚀 构建流程

Push 事件触发

当代码推送到主分支时,会自动触发以下流程:

  1. 环境准备

    • 设置 Git 凭证
    • 恢复构建缓存(显著提升构建速度)
    • 构建包含依赖的 Docker 镜像(启用 Docker 缓存)
  2. ReactOS 构建

    • 创建构建目录
    • 从缓存恢复 CMake 配置和 Ninja 缓存
    • 使用 ccache 加速编译
    • 配置 CMake + Ninja
    • 编译生成 bootcd.iso
    • 保存构建缓存供下次使用
  3. 发布流程

    • 生成变更日志
    • 创建 Release
    • 上传 ISO 文件到 Release 附件
    • 推送 Docker 镜像到仓库

🚀 缓存优化

构建系统包含多层缓存优化:

CNB 平台缓存

  • Volume 缓存: 使用 CNB 的 volumes 功能持久化构建缓存
    • ./build-cache: CMake 和 Ninja 构建缓存
    • ./deps-cache: 第三方依赖缓存
    • ./ccache: 编译器缓存
  • Docker 缓存: 使用 docker:cache 类型创建和复用构建环境镜像

构建缓存

  • CMake 缓存: 保存 CMakeCache.txt 和 CMakeFiles,跳过重复配置
  • Ninja 缓存: 保存 .ninja_log 和中间对象文件,支持增量构建
  • ccache: 编译器缓存,显著加速重复编译

智能缓存管理

  • 自动检测和恢复现有缓存
  • 增量构建,只编译修改的部分
  • 缓存大小限制,避免占用过多空间
  • 跨构建保持缓存,大幅提升构建速度

Tag 事件触发

当推送版本标签时(如 v1.0.0),会:

  1. 执行 Semantic Release 生成版本号和变更日志
  2. 构建版本化的 ReactOS ISO
  3. 创建带版本号的 Release
  4. 上传 reactos-{tag}.iso 文件

🔧 开发环境

使用云原生开发环境:

# 启动开发环境 # 访问 http://localhost:8080 使用 VS Code

开发环境预装:

  • ReactOS 构建依赖
  • VS Code + 相关扩展
  • C/C++ 开发工具
  • Git 工具

📦 构建产物

  • 主构建: bootcd.iso - ReactOS 启动镜像
  • 版本构建: reactos-{version}.iso - 带版本号的镜像
  • 构建信息: build-info.txt - 详细的构建信息和使用说明

🛠️ 本地测试

手动构建

# 克隆仓库 git clone <repository-url> cd reactos # 构建镜像 docker build -t reactos-builder . # 运行构建 docker run --rm -v $(pwd):/workspace reactos-builder

开发环境

# 构建开发环境 docker build -t reactos-dev -f .ide/Dockerfile . # 启动开发环境 docker run -p 8080:8080 -v $(pwd):/workspace reactos-dev

🎯 使用说明

虚拟机启动

  1. VirtualBox

    • 新建虚拟机 -> 选择 ISO 文件 -> 启动
  2. VMware

    • 新建虚拟机 -> 使用 ISO 镜像 -> 启动
  3. QEMU

    qemu-system-i386 -cdrom bootcd.iso -m 512

📊 构建信息

每次构建会包含以下信息:

  • 构建时间和环境
  • 文件大小和校验和
  • MD5 和 SHA256 哈希值
  • 使用说明

⚠️ 注意事项

  1. 磁盘空间: 至少预留 20GB 用于构建
  2. 网络: 首次构建需要下载依赖,确保网络通畅
  3. 权限: 确保 Docker 有足够权限访问文件系统

🔍 故障排除

构建失败

  1. 检查依赖是否完整
  2. 确认 CMake/Ninja 版本兼容
  3. 查看详细错误日志

ISO 文件问题

  1. 验证文件大小是否合理(通常 100-200MB)
  2. 检查文件校验和
  3. 尝试在虚拟机中启动测试

缓存问题

缓存失效

# 清理本地缓存(如需要) rm -rf build-cache/ deps-cache/ # 重新触发构建

缓存空间过大

  • 对象文件缓存限制为 1GB
  • ccache 限制为 5GB
  • 超过限制时自动跳过缓存保存

缓存统计

构建日志会显示缓存使用情况:

[INFO] 缓存目录: ./build-cache [INFO] 检测到 CMake 缓存,跳过配置步骤 [SUCCESS] ReactOS 构建完成!用时: 12分34秒

📝 配置说明

环境变量

CNB 平台会自动注入以下环境变量:

  • CNB_TOKEN_USER_NAME - 仓库用户名
  • CNB_TOKEN - 访问令牌
  • CNB_DOCKER_REGISTRY - Docker 仓库地址
  • CNB_REPO_SLUG_LOWERCASE - 仓库名称(小写)

自定义配置

可以修改 .cnb.yml 中的以下配置:

  • 构建参数(CMAKE_BUILD_TYPE)
  • 构建目标(bootcd, livecd 等)
  • Docker 镜像标签策略

🚀 快速开始

  1. 将文件复制到 ReactOS 项目根目录
  2. 推送代码到 CNB 平台仓库
  3. 等待自动构建完成
  4. 从 Release 下载 ISO 文件

📞 支持

如有问题,请:

  1. 查看构建日志
  2. 检查 CNB 平台文档
  3. 提交 Issue