Мне пришлось изменить пароль root для MySQL на сервере. 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
Я проверил / eximdisable в / etc /, там ничего нет.
Дисковое пространство используется на 85%, файловые дескрипторы используются на 7%.
Оказывается, это не имеет ничего общего с версией gcc или ошибками оптимизации. Вместо этого это неполная компиляция / ссылка на двоичный файл exim. Для gcc есть флаг (-rdynamic), указывающий компоновщику экспортировать символы, которые будут видны динамически загружаемым модулям. Этот флаг необходимо передать gcc при сборке mysql.so и при сборке бинарного файла Exim.
Если этот RPM основан на файле exim.spec Fedora (мой был), я обнаружил, что есть патчи, которые устанавливают переменную LFLAGS в Local/Makefile
, но тогда команда make переопределяет LFLAGS в командной строке. Просто переместите все, что вы устанавливаете для LFLAGS, в свой Local / Makefile и удалите его из команды make:
# This used to be set on the make commandline
echo 'LFLAGS+=-pie' >> Local/Makefile
#
# Then further down where the make command is,
# remove the LFLAGS= setting, leaving only:
make _lib=%{_lib} FULLECHO=
Другие, вероятно, все, что вам нужно, это добавить в конец вашего Local/Makefile
:
LFLAGS+=-rdynamic -ldl
# _OR_
EXTRALIBS_EXIM+=-rdynamic -ldl
Более подробная информация доступна здесь: https://stackoverflow.com/a/482556/611911
Примечание. Хотя вы приняли первый предоставленный мной ответ, на самом деле он только говорит: «Да, у меня тоже была проблема». Этот ответ фактически решает проблему. :-)
Exim
не могу загрузить mysql.so
потому что не построил. Вы должны убедиться, что у вас есть как минимум mysql-client
установлен правильно.
Я видел это недавно. Я построил несколько оборотов Exim 4.84 для друга на серверах Amazon EC2 на базе CentOS 6 (вы не говорите, какую версию серверов Amazon вы используете). Мне пришлось перенастроить файл спецификации, чтобы скомпилировать и связать модуль mysql непосредственно с двоичным файлом Exim, вместо того, чтобы сделать его загружаемым модулем. Я не знаю, почему эта глобальная переменная не видна загружаемому модулю mysql на серверах Amazon, потому что она видна на любой другой архитектуре, на которой я когда-либо создавал Exim.
Моя первая догадка заключается в том, что это как-то связано с версией gcc и тем, как она обрабатывает флаги оптимизации. Но это не подтверждается никакими доказательствами или фактами, это просто догадка.