如何应用软件补丁?


Answers:


21

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

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

1.获取foob​​ar的源包。

大多数Linux发行版(nb修补程序不是Linux独有的)都可以使用“源程序包”来实现此目的,但是由于它们是异类的,因此在这里我仅引用原始源程序的格式。原始来源不是发行版的一部分,可能很难找到。Wikipedia是一个很好的起点,它提供了许多流行应用程序的文章,并且该文章应包含带有源代码下载的首页链接。显然,您也可以使用Google自己。源程序包将称为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,那么makemake checkmake install。在进行最后一个操作之前,如果已经安装了foobar,则请确定是要删除还是覆盖它,或者要如何处理命名冲突。您可能希望foobar引用的是新的修补版本,而不是旧版本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.