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