错误修补Magento 1.7.1 Hunk#1失败

时间:2015-04-17 15:27:08

标签: security magento patch

我在Magento Dashboard v.1.7.0.2中看到了最后一次Critical Reminder通知(2 important security patches (SUPEE-5344 and SUPEE-1533)...)

因此,我下载并在其他Magento中正确使用它们(例如1.6.01.6.1),但我在此版本1.7.0.2中收到了这些错误

[root@oc1 httpdocs]# sh PATCH_SUPEE-1533_EE_1.12.x_v1-2015-02-10-08-19-16.sh
Checking if patch can be applied/reverted successfully...
ERROR: Patch can't be applied/reverted successfully.

patching file app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php
Hunk #1 FAILED at 444.
1 out of 1 hunk FAILED -- saving rejects to file app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php.rej
patching file app/code/core/Mage/Adminhtml/controllers/DashboardController.php
Hunk #1 FAILED at 92.
1 out of 1 hunk FAILED -- saving rejects to file app/code/core/Mage/Adminhtml/controllers/DashboardController.php.rej

我正在搜索,我发现了这个Magento patch failing to install post,但它对我没有用

我在Windows,Mac和Linux上下载.sh文件,而且resault是一样的...有些想法?

3 个答案:

答案 0 :(得分:4)

我在本地计算机上使用Windows。服务器当然是Linux。我使用Git进行版本控制。

长话短说:尝试使用dos2unix实用程序尝试获取.php文件的行结尾以匹配.sh补丁文件。 (我认为你也可以在.sh文件上运行dos2unix或在.sh文件上运行unix2dos - 一些组合使它们都相同)。

虽然我认为您的错误消息与我的有点不同。实际上,你看过'拒绝文件'了吗?如果这不是线路终结故障,您能想到1.6和1.7安装之间的任何不同之处吗? (我使用我在这里描述的方法修补了1.7.0.2和1.9.0.1)。如果您检查Graph.php文件,是否有任何编辑?

以下是关于什么对我有用的更多信息:

我使用过Cygwin(Gitbash似乎很难与Linux对比Windows文件路径,并给出错误/app/etc must exist)。此外,我不得不以管理员身份运行Cygwin来解决文件权限错误(这很奇怪,可能是我设置的唯一特性)。

但我需要做的主要事情是在补丁尝试dos2unix的文件上运行diff。我这样做是通过编辑.sh补丁文件,你可以看到文件的末尾有文件的路径将被更改。

所以我编辑了.sh文件,在评论# 5. File pathes之前的第66行添加了这两行: -

# extra steps for windows CRLF:
dos2unix app/code/core/Mage/Adminhtml/Block/Dashboard/Graph.php
dos2unix app/code/core/Mage/Adminhtml/controllers/DashboardController.php

您可能需要考虑计划B并手动编辑文件;没有太多变化。

Patch 5344确实有一些更改。对于那个,我在文件# 5. File pathes中的评论PATCH_SUPEE-5345_CE_1.7.0.2_v1-2015-02-10-08-11-22.sh之前添加了这些行: -

#  extra steps for windows CRLF:
dos2unix lib/Varien/Db/Adapter/Pdo/Mysql.php
dos2unix app/code/core/Mage/XmlConnect/Model/Observer.php
dos2unix app/code/core/Mage/Oauth/controllers/Adminhtml/Oauth/AuthorizeController.php
dos2unix app/code/core/Mage/Core/Controller/Request/Http.php
dos2unix app/code/core/Mage/Admin/Model/Observer.php

这对我有用。我阅读了一些Stack Overflow答案来提出这个解决方案。似乎'patch'命令对行结尾非常敏感。您可能尝试的另一件事是将-w标志添加到diff命令中(再次通过编辑.sh文件),这可能会使diff在行的开头和结尾忽略空格,但它对我不起作用。 http://unixhelp.ed.ac.uk/CGI/man-cgi?diff

作为最后的问题,我要注意,我需要通过重新运行Cygwin patch'安装或更新'程序将setup-x86.exe命令添加到Cygwin,以添加包含{的开发包中{1}}。

答案 1 :(得分:2)

如果在Magento中修补的文件具有与修补程序文件本身不同的行结尾,则您将看到上述HUNK错误。

例如:

  • 正在修补的文件:Windows Line endings
  • 补丁文件:Unix行结尾

如果是这种情况,您需要更改哪个文件的行结尾与正在运行的系统不匹配。

即:

  • 如果在Linux上运行,请确保两者都有Unix行结尾。
  • 如果在Windows上运行,请确保两者都有Windows行结尾。

您可以在Sublime编辑器中轻松完成此操作:查看>行结尾> (选择正确的一个)

如果您在Linux上运行并且正在修补的文件有Windows行结尾(我的某些原因是由于某种原因而且显然PHP并不介意),更改补丁文件也会有Windows行结尾结果在这个神秘的错误中:

$ sh PATCH_SUPEE-2629_EE_1.12.0.0_v1.sh
: command not found_1.12.0.0_v1.sh: line 7:
'ATCH_SUPEE-2629_EE_1.12.0.0_v1.sh: line 9: syntax error near unexpected token `{
'ATCH_SUPEE-2629_EE_1.12.0.0_v1.sh: line 9: `_check_installed_tools() {

有关详细信息,请参阅Magento patch failing to install

答案 2 :(得分:1)

我的解决方案也使用 dos2unix ,但这对我有用:

第1步

在linux终端我运行cat PATCH------something---.sh | grep "diff ",这导致补丁中涉及的所有文件。

提示:如果有大量文件,请添加> diff_files.txt并使用您的浏览器下载/访问它。

第2步

将带有文件路径的差异指令复制到 notepad ++ (我假设您正在使用Windows,这就是为什么行结束发生的原因)

你会有这样的事情:

diff --git app/code/core/Mage/Adminhtml/Helper/Sales.php app/code/core/Mage/Adminhtml/Helper/Sales.php diff --git app/code/core/Mage/Core/Model/Config.php app/code/core/Mage/Core/Model/Config.php diff --git lib/Varien/File/Uploader.php lib/Varien/File/Uploader.php

如您所见,文件路径是重复的;没关系。

第3步

现在只需将diff --git替换为dos2unix,将结果和过去复制到 ssh 终端,请记住您需要位于Magento根文件夹中。 dos2unix 将两次调用同一个文件,但没有问题。

dos2unix app/code/core/Mage/Adminhtml/Helper/Sales.php app/code/core/Mage/Adminhtml/Helper/Sales.php dos2unix app/code/core/Mage/Core/Model/Config.php app/code/core/Mage/Core/Model/Config.php dos2unix lib/Varien/File/Uploader.php lib/Varien/File/Uploader.php

提示:也许最后一行需要在终端中额外返回

结论

这样你就可以避免在所有文件中运行 dos2unix ,这对我来说似乎更安全。接下来,像Magento说明一样调用sh PATCH----something--.sh