我正在 Ubuntu 18.04.1 版本 4.15.0-38-generic 上运行。
我知道几个月前有人问过这个问题或类似的问题,而且似乎正在进行修复或解决方法。
dpkg --list man-db
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
iF man-db 2.8.3-2ubunt amd64 on-line manual pager
每次我运行软件更新程序或尝试安装新软件包时,它都会花费很长时间,原因似乎是大量核心转储。以下是一个小示例:
>
usr/bin/mandb:zcat:错误的系统调用(核心转储)
/usr/bin/mandb:zcat < /usr/share/man/man1/pbmtomda.1.gz:错误的系统调用(核心转储)
/usr/bin/mandb:/usr/lib/man-db/manconv -f UTF-8:ISO-8859-1 -t UTF-8//IGNORE -q:错误的系统调用(核心转储)
/usr/bin/mandb:zcat < /usr/share/man/man1/pamfile.1.gz:错误的系统调用(核心转储)
/usr/bin/mandb:zcat:错误的系统调用(核心转储)
/usr/bin/mandb:zcat < /usr/share/man/man1/pamfile.1.gz:错误的系统调用(核心转储)
/usr/bin/mandb:/usr/lib/man-db/manconv -f UTF-8:ISO-8859-1 -t UTF-8//IGNORE -q: 错误的系统调用(核心转储)
/usr/bin/mandb: zcat < /usr/share/man/man1/pnmtorast.1.gz: 错误的系统调用(核心转储)
/usr/bin/mandb: zcat: 错误的系统调用(核心转储)
/usr/bin/mandb: zcat < /usr/share/man/man1/pnmtorast.1.gz: 错误的系统调用(核心转储)
/usr/bin/mandb: /usr/lib/man-db/manconv -f UTF-8:ISO-8859-1 -t UTF-8//IGNORE -q: 错误的系统调用(核心转储)
我相信 Astrill 的某个人将 AppArmor 认定为可能的罪魁祸首,但我没有使用任何名为 Astrill VPN 的软件包。我有 Expressvpn、Ubuntu 网络管理器、pptp-linux 和 openvpn。
我尝试重新安装 man-db 和 apparmor,但没有任何变化。
我现在使用的是 Ubuntu 19.4,但仍然收到这些 mandb 错误消息。每次软件安装或更新都需要很长时间,因为它会达到约 89% 然后开始循环显示这些错误消息。我曾希望等待新版本最终可以自行解决这个问题,但似乎并非如此。任何有关发生了什么的线索以及解决此问题的帮助都将不胜感激。
(上面的编辑是我做的,但我没有登录!)
答案1
感谢您通过电子邮件发送的调试信息。
事实证明这是 ESET File Security 的错误。我以前曾针对此程序应用过解决方法,但显然我需要做更多。
简而言之,这是一种反恶意软件工具,它会将代码注入每个进程,当发生某些事件时,它会向您机器上的单独程序发送消息。现在,man-db 有自己的安全措施,旨在防止恶意文档以某种方式利用处理它们的工具中的错误,这些措施包括将这些工具可以进行的系统调用限制为仅进行文本处理所需的调用。不幸的是,ESET 所做的很难与恶意软件可能决定做的事情区分开来,因此这两种安全措施相互冲突。
我不得不妥协(虽然我最终还是想找到更好的办法),检测 ESET 的安装时间,并允许在这种情况下进行更多的系统调用,但这是一个困难的练习,很容易错过一些。我已经做出了改变以响应您的跟踪,将另一个添加到该列表中。这将需要移植到稳定的 Ubuntu 版本,然后您才能看到它的好处,并且由于其他承诺,我至少要到下周中旬才有时间开始这个过程。与此同时,您有几个选择可以解决这个问题:
- 卸载 ESET File Security(暂时或其他方式)。
- 设置环境变量
MAN_DISABLE_SECCOMP=1
。通过软件更新程序等图形工具持续执行此操作有点困难,但如果您愿意apt
从终端使用,那么您只需记住运行sudo MAN_DISABLE_SECCOMP=1 apt full-upgrade
或sudo MAN_DISABLE_SECCOMP=1 apt install some-package
或其他操作即可。
一旦包含我的更改的软件包可用,我就会更新此答案。(不幸的是,我没有好的方法来确认这个问题是否完全解决了,所以这可能是一个我们必须再次进行的打地鼠练习。)