installerbuilder/tasks/task14-RPM包构建器.md

150 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 任务14RPM包构建器
## 任务描述
实现Red Hat/CentOS/Fedora系统的RPM安装包构建器负责生成Linux平台的RPM安装包。RPM包构建器将处理RPM文件的生成、spec文件创建、文件和目录结构组织等功能确保生成的RPM安装包符合Red Hat包管理标准。
## 实现步骤
1. 创建RPM包构建器
- 在`internal/builder/package/rpm`包中创建`builder.go`文件
- 定义RPMBuilder结构体实现PackageBuilder接口
```go
type RPMBuilder struct {
tempDir string
platformAdapter platform.PlatformAdapter
resourceMgr resource.ResourceManager
logger log.Logger
rpmBuildPath string // rpmbuild工具路径
}
```
- 实现构造函数:
```go
func NewRPMBuilder(platformAdapter platform.PlatformAdapter, resourceMgr resource.ResourceManager, logger log.Logger) (*RPMBuilder, error) {
tempDir, err := resourceMgr.CreateTempDir("rpm-builder")
if err != nil {
return nil, err
}
rpmBuildPath, err := findRpmBuildTool()
if err != nil {
return nil, err
}
return &RPMBuilder{
tempDir: tempDir,
platformAdapter: platformAdapter,
resourceMgr: resourceMgr,
logger: logger,
rpmBuildPath: rpmBuildPath,
}, nil
}
```
2. 实现工具检测:
- 创建findRpmBuildTool函数检测rpmbuild工具安装
- 处理工具不存在的情况
- 支持环境变量配置工具路径
3. 实现构建方法:
- 实现Build方法构建RPM安装包
- 验证构建目标和配置
- 准备构建环境
- 创建RPM构建目录结构
- 生成spec文件
- 执行rpmbuild命令
- 处理构建结果
4. 实现RPM构建目录结构创建
- 创建createRpmBuildStructure方法创建RPM构建目录结构
- 创建BUILD、RPMS、SOURCES、SPECS、SRPMS目录
- 组织源文件和目录
- 设置正确的权限
5. 实现spec文件生成
- 创建generateSpecFile方法生成spec文件
- 包含包信息、依赖关系、描述等
- 定义文件列表和安装路径
- 支持自定义宏和选项
6. 实现安装脚本集成:
- 在spec文件中集成%pre、%post、%preun、%postun脚本
- 集成用户提供的安装前后脚本
- 处理脚本执行权限
- 支持条件执行
7. 实现文件和目录处理:
- 创建处理文件和目录的方法
- 在spec文件中定义文件和目录
- 处理文件权限和所有权
- 支持配置文件标记和文档文件
8. 实现RPM打包
- 创建buildRpmPackage方法执行rpmbuild命令
- 处理打包错误和警告
- 验证生成的RPM包
- 支持不同的RPM构建选项
## 单元测试要求
1. 测试工具检测:
- 验证rpmbuild工具检测功能
- 测试工具不存在的处理
- 测试环境变量配置
2. 测试构建方法:
- 验证构建流程
- 测试配置验证
- 测试环境准备
- 测试构建结果处理
3. 测试RPM构建目录结构创建
- 验证目录结构创建
- 测试源文件和目录组织
- 测试权限设置
4. 测试spec文件生成
- 验证spec文件生成
- 测试包信息和依赖关系
- 测试文件列表和安装路径
- 测试自定义宏和选项
5. 测试安装脚本集成:
- 验证脚本集成功能
- 测试脚本执行权限
- 测试条件执行
6. 测试文件和目录处理:
- 验证文件和目录处理
- 测试文件权限和所有权
- 测试配置文件标记和文档文件
7. 测试RPM打包
- 验证RPM打包功能
- 测试打包错误和警告处理
- 测试RPM包验证
- 测试不同的构建选项
## 依赖关系
- 依赖任务01项目初始化
- 依赖任务02日志系统实现
- 依赖任务03错误处理框架
- 依赖任务04资源管理器实现
- 依赖任务05配置模型定义
- 依赖任务11Linux平台适配器
- 被任务19默认构建协调器依赖
## 完成标准
1. RPMBuilder实现了所有PackageBuilder接口方法
2. 工具检测功能正常工作
3. 构建方法能够成功生成RPM安装包
4. RPM构建目录结构创建功能正常工作
5. spec文件生成功能正常工作
6. 安装脚本集成功能正常工作
7. 文件和目录处理功能正常工作
8. RPM打包功能正常工作
9. 所有单元测试通过
10. 代码符合项目的Go语言开发规范
11. 生成的RPM安装包符合Red Hat包管理标准
12. 支持所有需求文档中的RPM相关功能