第 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
    Copy to Clipboard Toggle word wrap

流程

  1. 备份原始源代码:

    $ cp -p cello.c cello.c.orig
    Copy to Clipboard Toggle word wrap

    -p 选项保留模式、所有权和时间戳。

  2. 根据需要修改 cello.c

    #include <stdio.h>
    
    int main(void) {
        printf("Hello World from my very first patch!\n");
        return 0;
    }
    Copy to Clipboard Toggle word wrap
  3. 生成补丁:

    $ 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
    Copy to Clipboard Toggle word wrap

    + 开头的行替换以 - 开头的行。

    注意

    建议使用 diff 命令的 Naur 选项,因为它适合大多数用例:

    • -N (--new-file)

      -N 选项将缺少的文件处理为空文件。

    • -a (--text)

      -a 选项将所有文件视为文本。因此,diff 工具不会忽略它归类为二进制文件的文件。

    • -u (-U NUM--unified[=NUM])

      -u 选项以统一上下文的输出 NUM (默认 3)行的形式返回输出。这是一个在补丁文件中常用的紧凑的,易读的格式。

    • -r (--recursive)

      -r 选项递归比较 diff 工具找到的任何子目录。

    但请注意,在这种特殊情况下,只需要 -u 选项。

  4. 将补丁保存到文件中:

    $ diff -Naur cello.c.orig cello.c > cello.patch
    Copy to Clipboard Toggle word wrap
  5. 恢复原始 cello.c

    $ mv cello.c.orig cello.c
    Copy to Clipboard Toggle word wrap
    重要

    您必须保留原始 cello.c,因为 RPM 软件包管理器在构建 RPM 软件包时使用原始文件,而不是修改后的文件。如需更多信息,请参阅 使用 spec 文件

3.1.2. 给 C 程序示例打补丁

要对软件应用代码补丁,您可以使用 patch 工具。

先决条件

  • 您在系统上安装了 patch 工具:

    # dnf install patch
    Copy to Clipboard Toggle word wrap
  • 您从原始源代码创建了一个补丁。具体说明请参阅 为 C 程序示例创建一个补丁文件

流程

以下步骤对 cello.c 文件应用之前创建的 cello.patch 文件。

  1. 将补丁文件重定向到 patch 命令:

    $ patch < cello.patch
    patching file cello.c
    Copy to Clipboard Toggle word wrap
  2. 检查 cello.c 的内容现在是否反映了所需的更改:

    $ cat cello.c
    #include<stdio.h>
    
    int main(void){
        printf("Hello World from my very first patch!\n");
        return 1;
    }
    Copy to Clipboard Toggle word wrap

验证

  1. 构建打了补丁的 cello.c 程序:

    $ make
    gcc -g -o cello cello.c
    Copy to Clipboard Toggle word wrap
  2. 运行构建的 cello.c 程序:

    $ ./cello
    Hello World from my very first patch!
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat