第 3 章 为 RPM 打包准备软件


要准备一个使用 RPM 进行打包的软件,您可以首先给软件打补丁,为其创建一个 LICENSE 文件,并将它归档为 tar 包。

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

© 2026 Red Hat
返回顶部