由于 debconf,无法更新 nginx

由于 debconf,无法更新 nginx

我使用的是 14.04.5 LTS。运行常规 apt-get upgrade 时出现此错误:

Setting up nginx-common (1.10.1-3+trusty1) ...
dpkg: error processing package nginx-common (--configure):  
 subprocess installed post-installation script returned error exit status 1

我省略了由此引起的所有后续错误,“包 nginx-common 尚未配置。”等等。

我遵循了这个答案进行调试.postinst,它永远不会超出第三行:. /usr/share/debconf/confmodule——这就是返回的1

我试过了此解决方案但这没用,debconf 肯定是可以访问的。而且这些(错误仍然存​​在)。据我所知,我在任何包含的 conf 文件中都没有 ipv6 listen 指令。

我不知道如何调试 debconf 以查看失败的原因。有人知道我下一步该尝试什么吗?


编辑:新的更新,他们安装了,但最后我收到此错误:

Setting up nginx-full (1.10.1-3+trusty2) ...
initctl: invalid command: upgrade
Try `initctl --help' for more information.
invoke-rc.d: initscript nginx, action "upgrade" failed.

不确定是否应该标记为已解决。

答案1

此特定问题已修复,请更新您的软件包!


Ubuntu 存储库LP 错误 #1637058

Ubuntu Zesty 建议的存储库(这是一个正在开发中的版本,我希望你没有使用它......),1.10.1-0ubuntu5解决了这个问题。

Ubuntu Trusty、Xenial 和 Yakkety安全团队已发布更新版本的软件包来解决这个问题,并将其视为软件包的回归问题。此信息在错误中详细说明,并在相应的Ubuntu 安全通知 (USN-3114-2),但该问题已在以下版本的软件包中修复:

  • Ubuntu Trusty: 1.4.6-1ubuntu3.7(安全和更新存储库)
  • Ubuntu Xenial: 1.10.0-0ubuntu0.16.04.4(安全和更新存储库)
  • Ubuntu Yakkety: 1.10.1-0ubuntu1.2(安全和更新存储库)

版本Ubuntu Precise存储库不受影响,因为它们从未以引入 CVE 的方式发生改变,而 CVE 又促使最近的更新。(这仅适用于 Ubuntu 存储库,而不适用于 PPA。)


购电协议LP 错误 #1637200

我已将修改后的软件包上传到临时 PPA 以解决此问题并实施修复。这些软件包构建时没有出现问题,并已于 2016 年 10 月 27 日下午 12:56(UTC-04:00)复制到 Launchpad 上的主要 Mainline 和 Stable PPA。

这包括修复Precise、Trusty、Xenial 和 Yakkety。PPA 尚未获得 Zesty 支持。


强制披露:

我是 Ubuntu 服务器团队中负责nginx软件包的主要人员。我还维护团队下的 PPAhttps://launchpad.net/~nginx

我对这个问题以及修复过程也有直接的了解,因为我帮助发现这个问题影响了最近的安全更新以及 Debian。

答案2

官方修复包已发布,请使用这些

总结滚动到底部

我自己刚刚遇到了这个问题。

为了进一步调试,我设置了以下环境变量:

export DEBCONF_DEBUG=developer

这样我们就能看到 debconf 正在做什么。

现在我们运行

dpkg --configure --pending

我们可以看到以下内容:

 Setting up nginx-common (1.10.1-3+xenial1) ...
 debconf (developer): frontend started
 debconf (developer): frontend running, package name is nginx-common
 debconf (developer): starting /var/lib/dpkg/info/nginx-common.config configure 1.10.1-3+xenial0
 dpkg: error processing package nginx-common (--configure):
 subprocess installed post-installation script returned error exit status 1
 dpkg: dependency problems prevent configuration of libnginx-mod-http-image-filter:
 libnginx-mod-http-image-filter depends on nginx-common (= 1.10.1-3+xenial1); however:
 Package nginx-common is not configured yet.

现在我们可以编辑/var/lib/dpkg/info/nginx-common.config脚本,并更改

#!/bin/sh

#!/bin/sh -x以启用调试。

再次运行dpkg --configure --pending会显示:

Setting up nginx-common (1.10.1-3+xenial1) ...
debconf (developer): frontend started
debconf (developer): frontend running, package name is nginx-common
debconf (developer): starting /var/lib/dpkg/info/nginx-common.config configure 1.10.1-3+xenial0
+ set -e
+ . /usr/share/debconf/confmodule
+ [ ! 1 ]
+ [ -z  ]
+ exec
+ [  ]
+ exec
+ DEBCONF_REDIR=1
+ export DEBCONF_REDIR
+ logdir=/var/log/nginx
+ log_symlinks_check 1.10.1-3+xenial0
+ [ -z 1.10.1-3+xenial0 ]
+ dpkg --compare-versions 1.10.1-3+xenial0 lt-nl 1.10.1-0ubuntu1.1
+ return
dpkg: error processing package nginx-common (--configure):

现在我们可以在脚本中看到有问题的行

dpkg --compare-versions 1.10.1-3+xenial0 lt-nl 1.10.1-0ubuntu1.1

返回退出代码 1,正如它应该的那样——它正在进行版本比较并根据结果返回 0 或 1。

我不会评论如何正确修复它,因为它是一个实际的错误,正在跟踪#1637058(适用于 Ubuntu)#1637200(针对 PPA)在 LP。

解决方法

编辑/var/lib/dpkg/info/nginx-common.config

return并在函数的第一行添加log_symlinks_check

例如:

 log_symlinks_check() {
     return                <---- here
     # Skip new installations
     [ -z "$1" ] && return

这将允许升级过程继续。

编辑正如 @Thomas Ward 指出的那样,这将跳过设置步骤(修复 /var/log/nginx 中不安全的符号链接(如果有的话))

答案3

有同样的问题:

  • 14.04.5 LTS (GNU/Linux 3.13.0-32-generic x86_64)
  • 16.04.1 LTS (GNU/Linux 4.4.0-45-generic x86_64)

设置 nginx-common (1.10.1-3+trusty1) ... dpkg:错误处理软件包 nginx-common (--configure):子进程安装的安装后脚本返回错误退出状态 1 dpkg:依赖性问题阻止 libnginx-mod-http-auth-pam 的配置:libnginx-mod-http-auth-pam 依赖于 nginx-common (= 1.10.1-3+trusty1);但是:软件包 nginx-common 尚未配置。

dpkg:处理软件包 libnginx-mod-http-auth-pam (--configure) 时出错:依赖性问题 - 未配置 dpkg:依赖性问题阻止配置 libnginx-mod-http-echo:libnginx-mod-http-echo 依赖于 nginx-common (= 1.10.1-3+trusty1);但是:软件包 nginx-common 尚未配置。

dpkg:处理软件包 libnginx-mod-http-echo (--configure) 时出错:依赖性问题 - 未配置处理时遇到错误:nginx-common libnginx-mod-http-auth-pam libnginx-mod-http-echo

解决了

我可以通过首先备份该/etc/nginx文件夹来解决该问题。

sudo tar -zcf ~/nginx.tgz /etc/nginx

然后我从系统中清除了与 nginx 有关的所有东西。我必须在触发依赖性问题时逐步执行此操作。

sudo apt-get purge nginx-full
sudo apt-get purge nginx-common
sudo apt-get purge nginx*

此后,将 nginx 安装回系统sudo apt-get install nginx-full

最后恢复/etc/nginx文件夹sudo tar -zxf ~/nginx.tgz并重新启动 nginxsudo service nginx restart

希望这可以帮助!

相关内容