Алексей Киреев wrote:
> Виктор, я пытаюсь прикрутить модуль kas3.c, взятый с Вашего сайта
> (http://mta.org.ua/exim-4.69-conf/dlfunc/kas3/kas3.c)
понял
> Сделал Makefile на основе Вашего, исходники exim4, конечно, доступны (иначе
> не собирался exim-dlfunc.so).
>
> EXIMSRC =/usr/local/src/deb/exim-dlfunc/exim4-4.72/src
> EXIM2SRC
> =/usr/local/src/deb/exim-dlfunc/exim4-4.72/build-tree/build-exim4-daemon-custom
> KASINCLUDE =/usr/local/ap-mailfilter3/include
> INCLUDE =-I${EXIMSRC} -I${EXIM2SRC} -I/usr/local/include -I${KASINCLUDE}
> OBJS =kas3.o
> CFLAGS =-O2 -shared ${INCLUDE} -fPIC -g
> CLIBS =-L/usr/lib
> STATICLIBS =-L/usr/local/ap-mailfilter3/lib -lspamtest
> BINDIR =/usr/lib
>
> all: exim-dlfunc
> exim-dlfunc: exim-dlfunc.so
>
> exim-dlfunc.so: kas3.o
> gcc $(CFLAGS) -o $@ $(CLIBS) $(OBJS) $(STATICLIBS)
>
> install: all
> cp -f exim-dlfunc.so ${BINDIR}
>
> clean:
> rm -f *.o *.so
>
> %.o: %.c
> gcc -c $(CFLAGS) $< -o $@
>
> При сборке выполняеются следующие 2 команды:
>
> gcc -c -O2 -shared -I/usr/local/src/deb/exim-dlfunc/exim4-4.72/src
> -I/usr/local/src/deb/exim-dlfunc/exim4-4.72/build-tree/build-exim4-
> sr/local/ap-mailfilter3/include -fPIC -g kas3.c -o kas3.o
> gcc -O2 -shared -I/usr/local/src/deb/exim-dlfunc/exim4-4.72/src
> -I/usr/local/src/deb/exim-dlfunc/exim4-4.72/build-tree/build-exim4-dae
> local/ap-mailfilter3/include -fPIC -g -o exim-dlfunc.so -L/usr/lib kas3.o
> -L/usr/local/ap-mailfilter3/lib -lspamtest
сборка нормально должна проходить
> Пропатчил exim4 патчем
> (http://mta.org.ua/exim-4.68-conf/patches/exim-4.68-remove_header/patch-src::remove_header.patch),
> но после подключения модуля exim-dlfunc.so получил ошибку при приёме письма:
>
> 2012-02-22 23:05:06 1S0HUw-0002AP-7G dlopen "/usr/lib/exim-dlfunc.so" failed:
> /usr/lib/exim-dlfunc.so: undefined symbol: acl_removed_headers
при этом strings `which exim` | grep acl_removed_headers выдавало пустую
строку или acl_removed_headers?
> Я подумал, что не пропатчился exim, поэтому закомментировал в файле kas3.c
> строки, имеющие отношение к acl_removed_headers, скомпилировал снова
> exim-dlfunc.so и получил уже другую ошибку:
легче было бы взять чуть более свежий dlfunc:
http://mta.org.ua/exim-4.76-conf/dlfunc/kas3/kas3.c
в нем использование патча patch-src::remove_header.patch регулируется
директивой условной компиляции WITH_EXPERIMENTAL_REMOVE_HEADER
> 2012-02-23 21:48:46 1S0cmP-0004xo-R5 dlopen "/usr/lib/exim-dlfunc.so" failed:
> /usr/lib/exim-dlfunc.so: undefined symbol: split_spool_directory. Это точно в
> экзиме есть,
ну да. split_spool_directory испльзуется вне зависимости от директив
условной компиляции
> поэтому я подумал об неправильной сборке самого exim4 и начал изучать
> ситуацию. Нашёл обсуждение за 2008 год, мой случай такой же. Но пока не
> получается :(
я год назад пытался найти зависимость от сборки с поддержкой и без
поддержки perl и выводом сообщения об ошибке "Undefined symbol
"acl_added_headers"" - безуспешно.
судя по исходникам exim'а, поддержка dlfunc и поддержка perl никак не
связаны.
мало того, под FreeBSD у меня используются dlfunc на полутора десятках
серверов.
на четырех из них точно используются acl_added_headers,
acl_removed_headers и split_spool_directory. на трех из них используется
именно dlfunc для интеграции с KAS3, правда изначально на одном (а
сейчас на двух из трех) dlfunc kas3 была собрана под AMD64. но это в
данном случае роли не играет.
и таких проблем с доступом к переменным exim'а в работе dlfunc я не
видел, пока год назад Вячеслав не написал о проблемах работы dlfunc для
интеграции со спамообороной.
> Начал менять в Makefile (который в debian называется EDITME.exim4-custom)
> значение переменной EXTRALIBS.
> Ещё дополнительно пробовал ставить -Wl,-export-dynamic и -rdynamic (согласно
> п.3.4 http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html) - но
> без результата.
>
> Perl собирается работает, с помощью него я сделал занесение в memcache ошибок
> авторизации и проверку.
подозреваю, что в данном случае лучший вариант - писать
http://bugs.exim.org/
> P.S. Не пойму, как писать в этот лист? Отвечать на адрес листа или на адрес
> автора объявления и копию на адрес листа? А то получилось, что мне Лена
> ответила, я написал ответ - а в лист это не попало.
так вроде в Reply-To писем из листа указано [email protected]
Лена просто при ответе использовала Reply to all, поэтому ее письмо ушло
и в лист и на личный адрес. ну и при ответе на ее письмо, отосланное на
личный адрес, ответ ушел лично Лене.
где-то так...
> 24 февраля 2012, 00:08 от Victor Ustugov <[email protected]>:
>> Алексей Киреев wrote:
>>> Здравствуйте.
>>
>> приветствую
>>
>>> Не получается собрать exim в debian для работы с dlopen. В логах:
>>>
>>> 2012-02-23 21:48:46 1S0cmP-0004xo-R5 dlopen "/usr/lib/exim-dlfunc.so"
>>> failed: /usr/lib/exim-dlfunc.so: undefined symbol: split_spool_directory
>>
>> исходники exim'а доступны на момент сборки dlfunc? в соседнем письме
>> Лена в строке сборки указала
>> -I/usr/ports/mail/exim/work/exim-4.77/build-FreeBSD-i386
>> -L/usr/local/lib - это именно то, о чем я пишу.
>>
>> если исходники exim'а на момент сборки доступны, то есть еще одна не
>> совсем очевидная причина вышеуказанной проблемы.
>>
>> подобная проблема может проявляться, если exim собран без поддержки perl'а.
>>
>> чуть больше года назад эта проблема уже обсуждалась в листе:
>> http://mailground.net/pipermail/exim-users/2011-January/000242.html
>>
>>> Пытался сделать следующее (ситуация один в один с той, что описана тут -
>>> http://comments.gmane.org/gmane.mail.exim.user/80545):
>>>
>>> EXTRALIBS=-lpam --export-dynamic - ошибка та же
>>>
>>> EXTRALIBS=-lpam --export-dynamic -ldl - ошибка та же
>>>
>>> EXTRALIBS=-lpam --export-dynamic -export-dynamic - ошибка та же
>>>
>>> EXTRALIBS=-lpam -export-dynamic -shared - тут экзим вообще не работает,
>>> падает в корку
>>>
>>> EXTRALIBS=-Wl,-E -lpam -export-dynamic - ошибка та же
>>>
>>> Для проверки, что вообще флаги принимают участие - сделал:
>>>
>>> EXTRALIBS=-lpam -export-dynamic -lek-flag, компиляция завершилась ошибкой:
>>>
>>> ...
>>> gcc -o exim
>>> /usr/bin/ld: cannot find -lek-flag
>>> collect2: ld returned 1 exit status
>>> make[1]: *** [exim] Error 1
>>> make[1]: Leaving directory
>>> `/usr/local/src/deb/exim-dlfunc/exim4-4.72/build-tree/build-Linux-i386'
>>> make: *** [build-exim4-daemon-custom/exim] Ошибка 2
>>> dpkg-buildpackage: ошибка: debian/rules build возвратил код ошибки 2
>>>
>>> Что посоветуете?
>>
>> вот другой рабочий пример сборки dlfunc на FreeBSD с двумя функциями:
>>
>> gcc -c -O2 -shared
>> -I/usr/ports/mail/exim/work/exim-4.77/build-FreeBSD-i386
>> -I/usr/local/include -fPIC -g ip2country.c -o ip2country.o
>> gcc -c -O2 -shared
>> -I/usr/ports/mail/exim/work/exim-4.77/build-FreeBSD-i386
>> -I/usr/local/include -fPIC -g rspamd.c -o rspamd.o
>> gcc -O2 -shared -I/usr/ports/mail/exim/work/exim-4.77/build-FreeBSD-i386
>> -I/usr/local/include -fPIC -g -o exim-dlfunc.so -L/usr/local/lib -lGeoIP
>> ip2country.o rspamd.o
--
Best wishes Victor Ustugov mailto:[email protected]
public GnuPG/PGP key: http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 77186900, 371808614 nic-handle: CRV-UANIC
_______________________________________________
Exim-users mailing list
[email protected]
http://mailground.net/mailman/listinfo/exim-users