我正在运行 nginx 作为 apache 的反向代理。我正在将 ubuntu 从 15.10 升级到 16.04,但在失败后apt-get dist-upgrade
运行apt-get -f install
After this operation, 2,426 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
(Reading database ... 95519 files and directories currently installed.)
Preparing to unpack .../nginx_1.11.3-1~wily_amd64.deb ...
Unpacking nginx (1.11.3-1~wily) over (1.10.0-0+wily0) ...
dpkg: error processing archive /var/cache/apt/archives/nginx_1.11.3-1~wily_amd64.deb (--unpack):
trying to overwrite '/etc/logrotate.d/nginx', which is also in package nginx-common 1.10.1-0+wily0
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
/var/cache/apt/archives/nginx_1.11.3-1~wily_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
答案1
不要将 nginx.org 存储库和 Ubuntu 的 NGINX PPA 混用。你正在尝试使用两个独立的 PPA - 来自上游 Mainline 存储库的 1.11.3 和来自我的 NGINX Stable PPA 的 1.10.0。这是我在博客文章中提到的内容在这里,当大量的错误促使人们注意到. (内容复制到下方)
选择一个 repo,将另一个放入/etc/apt/sources.list
和/etc/apt/sources.list.d/*.list
源中。删除较旧的软件包(如果有)。(上游主线 repo 将破坏 PPA,因此您必须先删除、、、nginx-common
和,然后才能安装上游的新版本。nginx-core
nginx-full
nginx-extras
nginx-light
nginx
(未来几天将发布包含 1.11.3 版本的 Mainline PPA 更新)
上面链接的博客文章内容:
NGINX:混合和匹配 Ubuntu 存储库(以及 Launchpad 上的 NGINX 团队 PPA)或 Debian 存储库与上游存储库将会导致问题。
我们以前见过这种情况,但这种情况太常见了。人们想要最新版本的 NGINX。所以他们使用上游 nginx.org 存储库来获取它。他们尝试安装,但立即出现冲突。
在 Ubuntu 中,人们会提交错误报告,认为这是 Ubuntu 的问题(例如这里有个错误)。问题是,这不是 Ubuntu 的错误。这也不是我维护的 PPA 中的错误。这也不是 Debian 中的错误。当您将上游存储库与 Ubuntu、Debian 或 Ubuntu PPA 混合使用时,就会出现这个问题,并且假设您可以使用上游存储库干净地“升级”。
基本上,这就是它的意义所在:
对于 Debian,如果您依赖第三方模块,则应坚持使用 Debian 的打包并等待。对于 Ubuntu,如果您想要最新的软件和功能,则应使用我维护的 PPA(在 Launchpad 上的 nginx 团队下),这基于 Debian 的打包决策。
但是,如果您想要/依赖 NAXSI,您别无选择,只能自己使用 NAXSI 重新编译 NGINX,以使其以合理的方式工作。Debian、Ubuntu 和 PPA 都不再在版本中包含 naxsi。
如果这些都不适用于您,则必须在从上游存储库安装之前使用此命令从您的计算机中清除所有 nginx 二进制文件以及所有 nginx 包和配置文件:(
sudo apt-get purge nginx nginx-doc nginx-common
这也应该清除其他依赖包)但是,如果您好奇为什么不能混合存储库,这篇文章将从我的角度进行解释。下面将详细说明为什么不能混合此类存储库以及您遇到的问题。
问题 1:Debian / Ubuntu / NGINX PPA(由我本人维护)有自己的风格;而 nginx 上游则没有。
我说的风格是指、、、
nginx-light
(直到 1.6.2-2)和( 仅限 Ubuntu,自 Ubuntu 14.04 起)。每种风格都包含一组不同的模块,具体取决于 Debian 或社区的需求(最终在 Debian 中实现)。我不会在这里讨论这些差异,但是您可以转到此处阅读我对这个问题的回答以了解更多详细信息。nginx-full
nginx-extras
nginx-naxsi
nginx-core
由于 NGINX 模块目前已整合到程序的二进制文件中,因此将配置文件和默认示例文件及位置分开是绝对必要的,这样您就可以在不同版本之间切换(以及在 Ubuntu/Debian/PPA 之间升级版本),而不会出现问题和配置文件冲突。这需要引入一个名为
nginx-common
– 的包,该包包含源包中所有版本的 nginx 版本所共有的文件和其他项目。这nginx-common
完全是 Debian 工作的成果,并继承于我维护的 Ubuntu 和 PPA 中。问题是:NGINX 上游不提供“风格”。它们启用 nginx 上游“核心”代码中附带的所有默认模块,不包含任何第三方模块,也不区分要启用的模块(以进行“轻量级”构建或“完整”构建)。因此,nginx 上游包是一个单独的“nginx”包。它不分离配置文件,也不分离二进制文件。
问题 2:NGINX 上游没有第三方模块。
现在,我知道您在想什么:“Debian/Ubuntu 为什么要在打包中包含第三方模块?”事实证明,在 Debian 中,对此类“第三方扩展”的需求如此之高,以至于他们决定包含这些模块。这些模块包括模块
nginx-lua
、nginx-perl
模块,甚至 NGINX 的 NAXSI 模块(在nginx-naxsi
1.6.2-2 之前一直存在)。问题:这些是第三方模块,与 NGINX 代码库本身分开维护。由于需求,它们作为 Debian 某些软件包的一部分提供,但它们本身可能会导致打包问题和冲突,以至于需要在每个新版本中更新模块代码以修复这些模块中的问题。这本身就导致了“可维护性”问题。这就是为什么从
nginx-naxsi
软件包版本/修订版 1.6.2-2 开始,该版本从 Debian 和 Ubuntu 的 NGINX 中删除。为了修复该nginx-naxsi
版本(及其相关软件包)中的哪怕是简单的错误,都需要删除整个 NAXSI 模块并用代码和插件的最新上游修订版替换。这意味着,为了修复 NAXSI 规则处理方式中的错误(为了匹配白名单等需要的实际规则格式),您必须替换该nginx-naxsi
版本中的整个 NAXSI 模块。在 Ubuntu 中,这会破坏“稳定版本更新”,因为新的功能会被添加到软件包中,而这可能会破坏一些东西,旧的功能可能会被删除,而且这会超出稳定版本更新所需的“挑剔修复”,以至于系统永远无法修复。因此,第三方模块必须随着 NGINX 上游的几乎每次代码更新而进行维护和更新。对于 NGINX Mainline,Lua 模块需要更新三次才能修复 PPA 中的构建失败问题。由于社区需要很多第三方模块(例如 NAXSI 或 Lua),但 NGINX 上游存储库中没有这些模块(或者在 NAXSI 发布的情况下,甚至现在的 PPA 中也没有),因此您不应混合存储库,因为您会丢失这些模块,或者丢失一些模块并获得其他模块。
——作者:Thomas Ward;网站:http://dark-net.net/; 执照:知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议