我不得不在服务器上更改 MySQL 的 root 密码。Exim 还为用户等使用 MySQL。
我不认为 Exim/Dovecot 使用了那个密码,但现在事情并不顺利,我很确定它们是相关的。
当我尝试启动 Exim 时:
Starting exim: Error loading mysql.so: /usr/lib64/exim/4.72-6.6.amzn1/lookups/mysql.so: undefined symbol: mysql_servers
2014-09-13 19:13:22 Error loading lookup module mysql.so: NULL
运行服务--status-all
给了我
exim dead but subsys locked
我在 /etc/ 中检查了 /eximdisable,但那里什么也没有。
磁盘空间已使用 85%,文件句柄已使用 7%。
事实证明,它与 gcc 版本或优化失败无关。相反,它是 exim 二进制文件的不完整编译/链接。gcc 有一个标志(-rdynamic)来告诉链接器导出符号以对动态加载的模块可见。在构建 mysql.so和构建 Exim 二进制文件时,必须将此标志传递给 gcc 。
如果这个 RPM 是基于 Fedora exim.spec 文件(我的是),我发现有一些补丁设置了 LFLAGS 变量
Local/Makefile
,但是 make 命令会覆盖命令行上的 LFLAGS。只需将您设置 LFLAGS 的任何内容移动到您的 Local/Makefile 中,然后将其从 make 命令中删除:其他人,您可能只需要添加到您的末尾
Local/Makefile
:此处提供更多详细信息: https ://stackoverflow.com/a/482556/611911
注意:虽然您接受了我提供的第一个答案,但它所做的只是说“是的,我也遇到了问题”。这个答案实际上解决了这个问题。:-)
Exim
无法加载mysql.so
,因为它尚未构建。您必须确保至少mysql-client
已正确安装。我最近看到了这个。我在基于 CentOS 6 的 Amazon EC2 服务器上为朋友构建了一些 Exim 4.84 rpm(您没有说您正在运行哪个版本的 Amazon 服务器)。我不得不重新配置规范文件来编译 mysql 模块并将其直接链接到 Exim 二进制文件中,而不是使其成为可加载模块。我不知道为什么这个全局变量对亚马逊服务器上的 mysql 可加载模块不可见,因为它在我构建 Exim 的所有其他架构上都是可见的。
我的第一个预感是它与 gcc 版本以及它如何处理优化标志有关。但这没有任何证据或事实支持,这只是一种预感。