检测是不是应用了补丁
Posted
技术标签:
【中文标题】检测是不是应用了补丁【英文标题】:Detecting if a patch is applied or not检测是否应用了补丁 【发布时间】:2012-08-30 03:57:57 【问题描述】:我正在开展一个项目,该项目需要我修补 3rd 方开源库以在我的应用程序中使用。为了简单起见,我只使用 Makefile 和一个简单的配置脚本来构建应用程序。我有多个需要应用的补丁,因此我使用 Makefile 依赖项来打补丁:
all: patch1 patch2 patch3
do-build-stuff-here
patch1:
patch -p0 < patch1.patch && touch patch1
patch2:
patch -p0 < patch2.patch && touch patch2
patch3:
patch -p0 < patch3.patch && touch patch3
我知道 Quilt,Debian 打包系统用于维护者补丁。我用过,真的很管用。但是,它引入了不必要的依赖,尤其是对于那些没有 Debian 的人。
有时,并非所有补丁都适用于让我(和其他开发人员)在某些条件下重新测试建筑物和应用程序。当我调用“clean”或“distclean”时,我通常会反转补丁:
clean: rmpatch1 rmpatch2 rmpatch3
do-clean-stuff-here
rmpatch1:
patch -p0 -R < patch1.patch
rmpatch2:
patch -p0 -R < patch2.patch
rmpatch3:
patch -p0 -R < patch3.patch
(忽略我可以删除原始来源并重新开始的事实。)
但是,如果不应用补丁#3,补丁可能会失败,而补丁#1 和#2 是。因此,我依赖于每个 rmpatch 对应的补丁:
rmpatch1: patch1
patch -p0 -R < patch1.patch
rmpatch2: patch2
patch -p0 -R < patch2.patch
rmpatch3: patch3
patch -p0 -R < patch3.patch
但这仍然不能解决我的问题,“make clean”最终会先修补源代码,然后再次取消修补!
我想我的问题是:有什么方法可以检测是否应用了补丁?我知道补丁在交互式运行时会告诉您它找到了以前应用的补丁。这种行为能否以非交互方式重现?
另一个问题(有点相关)是这种修补方法是否有效,如果不是,我可以使用哪种顺序修补方法(仅通过 Makefile)。
【问题讨论】:
打补丁不是一开始就应该在makefile中做的事情。 那会在哪里完成呢?即便如此,您如何检测补丁是否已应用? 它应该在构建工具的准备阶段完成,在源被提取之后。除了尝试反转它并查看它成功的程度之外,没有其他方法可以确定是否已应用补丁。 这就是它在 Makefile 中的设置方式——先解压,然后打补丁。只有在所有源都被提取和修补时才会进行构建。 【参考方案1】:你可以这样欺骗 Makefile:
all: patch1 patch2 patch3
do-build-stuff-here
patch1:
patch -p0 < patch1.patch && touch patch1
touch $@
patch2:
patch -p0 < patch2.patch && touch patch2
touch $@
patch3:
patch -p0 < patch3.patch && touch patch3
touch $@
这样,一旦应用补丁,就会为每个规则创建一个文件。您可以在规则中测试它是否存在以取消应用补丁,或者使用它来决定是否需要重新应用补丁。
【讨论】:
以上是关于检测是不是应用了补丁的主要内容,如果未能解决你的问题,请参考以下文章
注意:Windows7反盗版检测补丁KB971033正式发布
网页检测有漏洞怎么办?说是啥Dedecms wap跨站漏洞,怎么修复?