第 4 章 为 RPM 打包准备软件
要准备一个使用 RPM 打包的软件,您可以首先给软件打补丁,为其创建一个 LICENSE 文件,并将它归档为一个 tar 包。
4.1. 修复软件 复制链接链接已复制到粘贴板!
在打包软件时,您可能需要对原始源代码进行某些更改,如修复 bug 或更改配置文件。在 RPM 打包中,您可以将原始源代码保持不变,并对其应用补丁。
补丁是更新源代码文件的一段文本。补丁具有 diff 格式,因为它代表文本的两个版本之间的区别。您可以使用 diff 工具创建一个补丁,然后使用 patch 工具将补丁应用到源代码。
软件开发人员通常使用 Git 等版本控制系统来管理其代码库。这些工具提供它们自己的创建 diffs 或给软件打补丁的方法。
4.1.1. 为 C 程序示例创建一个补丁文件 复制链接链接已复制到粘贴板!
您可以使用 diff 工具从原始源代码创建一个补丁。例如,要修补使用 C 编写的 Hello world 程序(cello.c),请完成以下步骤。
先决条件
您在系统上安装了
diff工具:# dnf install diffutils
流程
备份原始源代码:
$ cp -p cello.c cello.c.orig-p选项保留模式、所有权和时间戳。根据需要修改
cello.c:#include <stdio.h> int main(void) { printf("Hello World from my very first patch!\n"); return 0; }生成一个补丁:
$ diff -Naur cello.c.orig cello.c --- cello.c.orig 2016-05-26 17:21:30.478523360 -0500 + cello.c 2016-05-27 14:53:20.668588245 -0500 @@ -1,6 +1,6 @@ #include<stdio.h> int main(void){ - printf("Hello World!\n"); + printf("Hello World from my very first patch!\n"); return 0; } \ No newline at end of file以
+开头的行替换以-开头的行。注意建议将
Naur选项与diff命令一起使用,因为它适合大多数用例:-N(--new-file)-N选项将缺失的文件处理为空文件。-a(--text)-a选项将所有文件视为文本。因此,diff工具不会忽略它被归类为二进制的文件。-u(-U NUMor--unified[=NUM])-u选项以统一上下文的输出 NUM (默认 3)行的形式返回输出。这是一个紧凑的,且在补丁文件中常用的一种易读的格式。-r(--recursive)-r选项递归比较diff工具找到的任何子目录。
但请注意,在此特殊情况下,只需要
-u选项。将补丁保存到文件中:
$ diff -Naur cello.c.orig cello.c > cello.patch恢复原始
cello.c:$ mv cello.c.orig cello.c重要您必须保留原始的
cello.c,因为 RPM 软件包管理器在构建 RPM 软件包时使用原始文件,而不是修改的文件。如需更多信息,请参阅 使用 spec 文件。
4.1.2. 给 C 程序示例打补丁 复制链接链接已复制到粘贴板!
要对软件应用代码补丁,您可以使用 patch 工具。
先决条件
您在系统上安装了
patch工具:# dnf install patch- 您从原始源代码创建了一个补丁。具体说明请参阅 为 C 程序示例创建一个补丁文件。
流程
以下步骤对 cello.c 文件应用之前创建的 cello.patch 文件。
将补丁文件重定向到
patch命令:$ patch < cello.patch patching file cello.c检查
cello.c的内容现在是否反映了所需的更改:$ cat cello.c #include<stdio.h> int main(void){ printf("Hello World from my very first patch!\n"); return 1; }
验证
构建打了补丁的
cello.c程序:$ make gcc -g -o cello cello.c运行构建的
cello.c程序:$ ./cello Hello World from my very first patch!