我已经安装了两次 SpamAssassin,一次使用 yum install spamassassin,一次从 cpan 下载源代码。
SpamAssassin 本身运行并报告其自身为在 Perl 5.22.0 上运行的 v3.4.1,但每当我使用“service spamassassin start”将其作为守护进程运行时,spamd 都会失败并出现以下错误:-
# service spamassassin start
Starting spamd: Can't use 'defined(%hash)' (Maybe you should just omit the defined()?) at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/Dns.pm line 757.
Compilation failed in require at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/Message/Metadata/Received.pm line 49.
BEGIN failed--compilation aborted at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/Message/Metadata/Received.pm line 49.
Compilation failed in require at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/Message/Metadata.pm line 58.
BEGIN failed--compilation aborted at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/Message/Metadata.pm line 58.
Compilation failed in require at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/Message.pm line 51.
BEGIN failed--compilation aborted at /usr/share/perl5/vendor_perl/Mail/SpamAssassin/Message.pm line 51.
Compilation failed in require at /usr/share/perl5/vendor_perl/Mail/SpamAssassin.pm line 75.
BEGIN failed--compilation aborted at /usr/share/perl5/vendor_perl/Mail/SpamAssassin.pm line 75.
Compilation failed in require at /usr/bin/spamd line 85.
BEGIN failed--compilation aborted at /usr/bin/spamd line 85.
[FAILED]
我怀疑 SA 及其模块已安装在不同的 perl 包含目录中,因为 perl v5.22.0 版本从 /usr/local/lib/perl5/site_perl/5.22.00 和其他目录中获取其模块,但它们都包含 5.22.0。
我尝试使用 cpan 重新安装 Mail::SpamAssassin,但它一直告诉我我拥有最新版本。我也尝试从 cpan.org 源(安装)安装它,但它没有安装任何依赖项,我不知道需要什么。
我曾尝试使用 cpan fforce 安装 Mail::SpamAssassin,但没有什么效果。
Spamd 使用 perl v5.22.0 运行,因此应该(我认为)访问 5.22.0 包含目录。
我现在完全陷入困境了。
如何让 SpamAssassin 与 Postfix 和 Dovecot 一起运行,以便清除我收到的大量垃圾邮件。
如果无法运行 SpamAssassin,还有其他选择吗?
任何帮助将非常感激。
答案1
事实证明 spamd 需要在 perl 5.10.1(此服务器上最初安装的版本)下运行。因此,不必使用以下代码:-
#!/usr/bin/perl -T -w
它只是需要
#!/usr/bin/perl5.10.1 -T -w
部分线索是在错误消息中(读取了错误的包含文件),主要归因于 thrig 的评论 - 谢谢