Wal*_*alf 5 apt dpkg nginx debconf 14.04
我在 14.04.5 LTS 上。运行正常的 apt-get 升级时出现此错误:
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
Run Code Online (Sandbox Code Playgroud)
我已经省略了由此引起的所有后续错误,“尚未配置包 nginx-common。”等。
我按照这个答案中的过程来调试它.postinst
,它永远不会超出第 3 行:. /usr/share/debconf/confmodule
– 这就是返回1
.
我已经尝试过这个解决方案,但没有帮助,debconf 绝对可以访问。而这些(错误仍然存在)。据我所知,我在任何包含的 conf 文件中都没有 ipv6 监听指令。
我不知道如何调试 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.
Run Code Online (Sandbox Code Playgroud)
不确定我是否应该标记为已解决。
在Ubuntu Zesty 提议的存储库中(这是一个开发中的版本,我希望你不要使用它......),1.10.1-0ubuntu5
解决了这个问题。
在Ubuntu Trusty、Xenial 和 Yakkety 中,安全团队已经发布了软件包的更新版本来解决这个问题,并认为它是软件包中的一个回归。此信息在错误中详细说明,并在相应的Ubuntu 安全通知 (USN-3114-2)中进行了非常简要的介绍,但此问题已在以下版本的软件包中修复:
1.4.6-1ubuntu3.7
安全和更新存储库)1.10.0-0ubuntu0.16.04.4
安全和更新存储库)1.10.1-0ubuntu1.2
安全和更新存储库)Ubuntu Precise存储库中的版本不受影响,因为它们从未以引入 CVE 的方式进行更改,从而促使最近的更新。(这仅适用于 Ubuntu 存储库,不适用于 PPA。)
我已将修订后的软件包上传到解决此问题的临时 PPA,并实施了修复。这些构建没有问题,并于 2016 年 10 月 27 日下午 12:56 (UTC-04:00) 复制到 Launchpad 上的主要主线和稳定 PPA。
这包括对Precise、Trusty、Xenial 和 Yakkety 的修复。PPA 还没有 Zesty 支持。
强制披露:
我是 Ubuntu 服务器团队中负责
nginx
软件包的主要人员。我还在https://launchpad.net/~nginx维护团队下的 PPA 。我也对这个问题有直接的了解,以及修复的过程,因为我帮助发现了这个问题影响了最近完成的安全更新,还有 Debian。
TL;DR滚动到底部
刚刚自己遇到了这个问题。
为了进一步调试它,我设置了以下环境变量:
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.
Run Code Online (Sandbox Code Playgroud)
现在我们可以编辑/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):
Run Code Online (Sandbox Code Playgroud)
现在我们可以在脚本中看到有问题的行
dpkg --compare-versions 1.10.1-3+xenial0 lt-nl 1.10.1-0ubuntu1.1
返回退出代码 1,因为它应该 - 它正在进行版本比较并根据结果返回 0 或 1。
我不会评论如何正确修复它,因为它是在 LP 的#1637058(对于 Ubuntu)和#1637200(对于 PPA)进行跟踪的实际错误。
解决方法:
编辑 /var/lib/dpkg/info/nginx-common.config
并return
在log_symlinks_check
函数的第一行添加一个。
例如:
log_symlinks_check() {
return <---- here
# Skip new installations
[ -z "$1" ] && return
Run Code Online (Sandbox Code Playgroud)
这将允许升级过程继续。
编辑正如@Thomas Ward 所指出的,这将跳过一个设置步骤(修复不安全的符号链接——如果有的话——在/var/log/nginx 中)
有同样的问题:
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 - 普通(= 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
Run Code Online (Sandbox Code Playgroud)
然后我从系统中清除了与 nginx 有关的任何内容。由于触发了依赖性问题,我必须逐步执行此操作。
sudo apt-get purge nginx-full
sudo apt-get purge nginx-common
sudo apt-get purge nginx*
Run Code Online (Sandbox Code Playgroud)
之后,将 nginx 安装回系统sudo apt-get install nginx-full
。
最后使用恢复/etc/nginx
文件夹sudo tar -zxf ~/nginx.tgz
并重新启动nginxsudo service nginx restart
希望这可以帮助!