如何调试子进程安装后中的 dpkg configure 错误?

如何调试子进程安装后中的 dpkg configure 错误?

简而言之:我正在尝试安装 spamassassin,但 dpkg 仅返回:

dpkg: error processing spamassassin (--configure):
subprocess installed post-installation script returned error exit status 1

我试图找到有关发生了什么问题的更多信息,但是在任何地方都找不到任何有用的日志。

在 /var/crash 中生成了 spamassassin 崩溃报告,但这只给出旧的 dpkg 错误和:

 Start-Date: 2014-02-17  19:18:13
 Commandline: apt-get install spamassassin
AptOrdering:
 spamassassin: Configure
 amavisd-new-postfix: Configure

随后从启动时开始进行 dmesg 日志记录。Amavis 给出错误,因为依赖 spamassassin 未配置。

我检查了日志文件:

apt history.log
apt term.log
dpkg.log
syslog.log

但没有更多信息。

我尝试使用所有可能的八进制数执行 dpkg -D,但没有发现任何有用的信息可以解决可能出现的问题。

关于 dpkg 错误的问题和可能的解决方案已经有很多,我也尝试了很多,但由于没有额外的信息,我感觉没有任何进展。

肯定存在某个地方可以读取出现错误的地方或者启动某些日志以便将其记录下来?

答案1

好的,我找到了这个问题的解决方案。我以为我无法加快日志记录以获取更多数据,但已经呈现的数据提供了问题的线索。

dpkg: error processing spamassassin (--configure):
subprocess installed post-installation script returned error exit status 1

说 dpkg 在运行 configure 时处理 spamassassin 时遇到错误。下一行告诉我们安装后脚本没有正确完成。

在里面/var/lib/dpkg/信息dir 我们可以找到 dpkg 的脚本文件,该文件:垃圾邮件刺客给我们产生错误的脚本文件。

在这个文件中,我们知道我们必须查看 configure 运行的代码:

如果 [ “$1” = “配置” ]; 然后

经过一些调试后,我发现了这一行:

su debian-spamd -c "sa-update --gpghomedir /var/lib/spamassassin/sa-update-keys \ --import /usr/share/spamassassin/GPG.KEY"

返回退出代码 1(运行命令 @commandline 并使用 echo $? next 获取退出代码)

问题是,我的系统上已经存在用户 debian-spamd,但其登录 shell 是 /bin/false。使用 /bin/false 执行 su 命令时,除了 exitcode 1 外没有任何消息。

添加-s /bin/sh该命令解决了这个问题,但最后我确实改变了用户的登录shell以与未来的更新保持同步。

答案2

一般来说,为了调试此类问题,您可以编辑/var/lib/dpkg/info/spamassassin.postinst(或.preinst,pr.prerm.postrm;取决于哪一个失败)并将#!/bin/sh顶行更改为#!/bin/sh -x(如果它是相同的bash:只需添加-x

这将为您提供 shell 脚本的逐行调试,以便您可以知道它以非零代码退出的位置(导致安装/升级失败)。

不过,它可能至少需要一些 shell 脚本技能才能进行调试。

答案3

这里, 像上一个答案,我们看到如何将调试代码(例如“set -x”)添加到 /var/lib/dpkg/info/* 文件,但不会在执行之前将其覆盖!:

  # dpkg --unpack /var/cache/apt/archives/grub-pc_2.06-2_amd64.deb
  ... edit /var/lib/dpkg/info/grub-pc.postinst ...
  # dpkg --configure grub-pc

相关内容