如何应用软件补丁?

如何应用软件补丁?

我有一个应用程序foobar,有人为其编写了补丁以添加我喜欢的功能。我该如何使用该补丁?

答案1

补丁通常包含在.diff文件中,因为补丁是使用diff命令创建的。

补丁是对源代码的一系列插入和删除。因此,为了使用该补丁,您必须在应用补丁后从源代码构建应用程序(例如“foobar”)。因此,分步骤:

1.获取源码包富巴

大多数Linux发行版(注意修补并不是Linux所独有的)都有可以用于此目的的“源代码包”,但由于这些是异构的,所以我在这里仅参考原始源代码的格式。原始来源不是发行版的一部分,可能很难找到。维基百科是一个不错的起点,其中包含许多流行应用程序的文章,并且该文章应包含指向带有源下载的主页的链接。显然,你也可以自己谷歌一下。源包将被称为类似foobar.0.1.tar.bz2.解压它——你现在有一个名为 的目录foobar.0.1

2.添加补丁。

有时补丁是单个文件,有时它们是多个文件的集合。将它们复制到foobar.0.1和中cd foobar.0.1。接下来,您需要运行该patch命令。这从标准输入读取,因此您需要通过管道输入文件.diff。棘手的部分是确定该选项使用什么-p(如果补丁中没有说明)。为此,您需要查看补丁文件的开头。例如:

--- old/comm.c  2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c  2006-07-07 02:39:24.000000000 +0000

在本例中,comm.c是将要更改的源文件的名称。但是,请注意它附加了一个目录。由于这些不是同一个目录(“旧”与“新”),这是一个很大的线索,表明路径的这一部分是垃圾(出于我们的目的)。开关的目的-p(参见man patch)是消除这个前缀。它需要一个数字,即要消除的斜杠 ( ) 的数量/,以及介于两者之间的所有内容;在这种情况下,我们将使用-p1将路径减少为普通的comm.c

假设comm.c实际上位于同一目录中,这将是您的解释是否正确的另一个线索。如果这两行都是src/comm.c, 并且comm.c实际上位于src构建树的子目录中,那么您需要使用-p0-- 请注意,根本不使用-p将删除所有斜杠。如果路径是绝对路径(即以 开头/),那可能就是您想要的。现在应用补丁:

patch -p1 < patch.diff

现在源已被修改。如果还有更多.diff文件,请以同样的方式应用它们。

3. 构建并安装。

这是从源代码构建某些东西时所经历的正常过程 - 首先./configure,然后make,,make checkmake install在执行最后一项操作之前,如果您已经安装了foobar,请决定是否要删除或覆盖它,或者如何处理命名冲突。您可能想foobar参考新的修补版本,而不是旧版本。

相关内容