使用mock添加补丁

时间:2015-04-13 10:34:07

标签: fedora rpmbuild koji

我正在尝试使用mock创建rpm。 https://fedoraproject.org/wiki/Projects/Mock

我可以通过源rpm建立rpm。现在我想为这个包添加一个补丁,我不知道如何继续。能告诉我怎样才能继续这样做?使用mock修改/修补包的方法是什么?

1 个答案:

答案 0 :(得分:2)

这里的常规方法是不使用mock以任何方式修改您的包。 Mock只是一种确保你的包装每次都在一个干净的环境中构建的方式(一个新鲜的chroot),而且它并不是真正意义上做的更多。

那么,正常的做法是将补丁放在RPM本身的spec文件中。

这需要两个部分 - 首先,将补丁文件作为包的一部分包含在内,第二部分是其应用程序。

首先,列出spec文件顶部附近的补丁,通常在Source行(或行)之后。每个补丁都有一个数字,正常的约定是从0开始计数,所以如果你只有一个,那将是这样的:

Patch0:   packagename-version-terse_patch_description.patch

与源文件一样,该文件名中最后一个/的内容将被删除,因此您可以根据需要使用URL。补丁需要位于RPM源目录中(通常位于tarball旁边。)

此时,如果您从修改后的规范构建源RPM,则生成的src.rpm文件将包含此修补程序文件。 (试试吧 - rpm -qlp packagename-ver-rel.src.rpm)。但是,它不会被应用。为此,您需要使用%patch宏。

这是在specfile的 %prep 部分,通常在%setup宏行之后。每个%patch宏都有一个与标题中的Patch行对应的数字,因此对于Patch0,请添加如下所示的行:

%patch0 -p1 -b .bugfix

再次按照惯例,RPM中使用的补丁是一级建立的,因此-p1是合适的。 (方便的是,这对于使用git制作的差异也是正确的。)并且-b .bugfix位不是必需的,但是它通常用于调试,我想作为一种内联评论此特定修补程序宏的作用。 (替换字符串"错误修正"使用适合您实际补丁的内容。)