Назад | Перейти на главную страницу

Exim не запускается - Ошибка при загрузке модуля поиска mysql.so

Мне пришлось изменить пароль 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 и тем, как она обрабатывает флаги оптимизации. Но это не подтверждается никакими доказательствами или фактами, это просто догадка.