👨‍💻实践指南-009-使用git打包rpm

type
status
date
slug
summary
tags
category
icon
password

1. rpm 通用编译环境搭建

此外,sublime、vscode、chrome等可以自行选择
执行 rpmdev-setuptree 会自动生成目录,适用 yum-builddep xxx.spec 可以自动安装编译依赖。

2. 使用 Git 管理 rpm 工程

虽然 rpm 没有基于 Git 管理的源码仓库,但是它所有的 patch 都是用 Git 生成的……
以 nautilus 为例,一个 Git 管理的 rpm 工程有如下的目录结构:
如果此时执行 rpmbuild 命令,会报出找不到 nautilus-xxx.tar.gz 的错误,需要手下下载源码压缩包,提供以下三种方式:
方法 A. 使用 spectool 来下载(推荐)
spectool 是存放在 rpmdevtools 包提供。
方法 B. 手动下载(不推荐)
浏览 spec 文件,找到 Source0[, Source1[, Source2…]]
既可以使用 wget、curl等命令或者其他工具手动下载,也可以使用 yum 插件来完成。
方法 C. 使用 disable_source_fetch 的方法(自行确认安全来源)
修复 spec 文件,加入:
之后命令行尝试:

3. 更科学的目录组织方式

此方法需要时刻注意当前目录的位置于工作目录的区别!传统打包都是在当前用户主目录下生成 rpmbuild 文件夹,在处理多个包的时候,会造成构建目录的污染。
修改 $HOME 目录下,文件 .rpmmacros 内容:将 %_topdir %(echo $HOME)/rpmbuild 修改为 %_topdir %(echo pwd);亦可在编译时指定,不对全局变量进行修改。
合理的步骤:
A. 修改源码,提交生成 format-patch,git format-patch HEAD^ –stdout > 重定向到 SOURCES 文件夹;
B. 修改 spec 文件,把patch 文件放入 SOURCES 文件夹,但不添加不提交,因为可能经历反复修改;
C. 修改完成后,再把新的 patch 和 spec 文件提交。

4. 使用 Git 打包源码

使用 Git 打包源码:git bundle create repo.bundle HEAD master
使用 Git 解压打包:git clone repo.bundle repo

5. 使用 Git 生成补丁

6. changelog 的生成格式

7. 查看 rpm 宏定义

8. 参考文档

中年码农的困境log-001-我与计算机