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


17

简而言之:我正在尝试安装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错误,已经写了很多问题和可能的解决方案,而我已经尝试过很多,但是由于没有其他信息,我感觉自己什么也没有得到。

当然,在某处肯定有可能读取发生了什么问题或启动某些日志记录以便将其记录下来?


您必须在终端中向上滚动并在看到的消息中看到特定的错误。要调试它们,您必须查看触发此错误的确切错误。
托马斯·沃德

终端中应该有描述,您是否浏览过/var/log/spamassassin/spamd.log?
卡米尔2014年

我已经以许多不同的方式浏览了所有日志,清除,重做安装。所有人都找到了有关该错误的更多信息,但我找不到任何信息。尚未创建Spamd.log。
2014年

Answers:


16

好的,我已经找到解决该问题的方法。我以为我无法加快日志记录速度以获取更多数据,已经提供的数据可以解决问题。

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

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

/ var / lib / dpkg / info目录中,我们可以找到dpkg的脚本文件,文件:spamassassin.postinst为我们提供了生成错误的脚本文件。

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

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

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

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

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

问题是我的系统上已经存在用户debian-spamd,但其登录shell为/ bin / false。与/ bin / false一起执行Su-ing返回,除了退出代码1外没有任何消息。

在命令中添加-s / bin / sh解决了该问题,尽管最后我确实更改了用户的登录外壳以与将来的更新保持同步。


我也遇到过类似的问题。与安装程序只是失败。我的问题是安装来自debian-backports的最新版本以解决问题。原来,他们将安装后脚本更改为具有“ su-$ OWNER -c“ sa-update ...”调用,该调用将完整的登录Shell exec执行到/ bin / sh,这与我们的/ etc / profile不兼容和/etc/profile.d文件。删除它的“-”,使其成为“ su $ OWNER -c ....”,为我修复了该问题
Vagnerr,2015年

我没有确切的问题,但是您的调试提示对我帮助很大!谢谢!
chaosguru

9

通常,要调试此类问题,您可以进行编辑/var/lib/dpkg/info/spamassassin.postinst(或.preinst,pr .prerm.postrm;取决于失败的对象),然后#!/bin/sh在最上面一行更改为#!/bin/sh -x(如果相同,则bash改为:添加-x

这将为您提供shell脚本的逐行调试,因此您可以使用非零代码来告诉它退出的位置(导致安装/升级失败)。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.