[exim-conf] механизм сборки exim 4.71 из MacPorts для Mac OS X

Victor Ustugov victor на corvax.kiev.ua
Вт Янв 22 04:12:40 EET 2013


приветствую

Victor Ustugov wrote:

> реализован пробный вариант механизма сборки pkgsrc exim 4.80.1 для Mac OS X:
> http://mta.org.ua/exim-4.76-conf/packages/pkgsrc-macosx/exim-4.80.1/

реализован пробный механизм сборки exim 4.71 из MacPorts:
http://mta.org.ua/exim-4.76-conf/packages/ports-macosx/exim-4.71_2/

версии софта там такие же старые, как и в портах OpenBSD.

т. о. задача автоматизации сборки exim со своими патчами под данную
систему портов носит практически чисто академический характер.

> опции сборки такие же, как для pkgsrc под другие системы.
> пример указания опций сборки:
> http://mta.org.ua/exim-4.76-conf/packages/pkgsrc-macosx/exim-4.80.1/Makefile.local.sample

опции сборки (по крайней мере касательно накладываемых патчей) почти
такой же, как для других механизмов сборки exim 4.71.

за исключением того, что я изначально отказался от патча
patch-src::dlopen-localscan.patch (все равно local_scan я нигде не
использую), patch-src::expand-primary_hostname.patch (лучше указывать в
site/configure.general вычисляемое значение active_hostname),
patch-src::hide_ldap_error.patch и patch-src::hide_ldap_pass.patch (их
функционал дублируется патчем patch-src::hide_expand_error.patch)

набор применяемых патчей можно менять в файле Makefile.local.
пример можно посмотреть в файле Makefile.local.sample.

что касается других параметров сборки - я пока добавил поддержку sqlite
и dlfunc в виде штатного для MacPorts механизма variant'ов.

пример указания выполнять сборку exim с поддержкой sqlite и dlfunc можно
посмотреть в уже упомянутом файле Makefile.local.sample.

> отличается pkgsrc для Mac OS X наличием файла настроек
> /System/Library/LaunchDaemons/org.exim.exim.plist для общесистемного
> менеджера сервисов launchd с использованием org.exim.exim в качестве
> значения Label.

в MacPorts такой файл создается автоматически на основании директив
startupitem.* в файле сборки порта Portfile. так что с этим возиться не
пришлось.

> стартовать exim при этом можно двумя способами - с помощью launchctl и
> с помощью традиционного стартового скрипта из /usr/pkg/etc/rc.d:
> 
> /bin/launchctl start org.exim.exim
> /usr/pkg/etc/rc.d/exim start

при сборке из MacPorts стартовать exim можно несколькими способами:

/opt/local/share/exim/exim.sh start - собственно стартовый скрипт

/opt/local/etc/LaunchDaemons/org.macports.exim/exim.wrapper start -
wrapper для вышеуказанного скрипта, который используется при
необходимости launchctl - управляющим интерфейсом для launchd

/bin/launchctl start org.macports.exim - с этим способом старта пока
проблемы, хотя он должен быть самым корректным при использовании launchd

> на самом деле стартовый скрипт /usr/pkg/etc/rc.d/exim стартует и
> останавливает exim путем запуска того же /bin/launchctl с label
> org.exim.exim

в случае MacPorts цепочка удлинилась на один стартовый скрипт

> аналога mail wrapper'а я не обнаружил, поэтому в сообщение
> /usr/pkgsrc/mail/exim/MESSAGE я просто добавил совет забекапить
> /usr/sbin/sendmail и создать одноименную символическую ссылку на
> /usr/pkg/sbin/exim.

такая же ситуация с mail wrapper'ом и при использовании MacPorts

> тестировалось все это на Mac OS X 10.8.2 Mountain Lion.
> 
> пока не удалось решить проблему сборки dlfunc ip2country с GeoIP,
> поэтому в значениях confIP2COUNTRY_BACKEND нельзя использовать DLFUNC.

проблема сборки dlfunc решена. она касалась не только и не столько
ip2country, сколько сборки динамически загружаемых библиотек на Mac OS X
вообще.

и gcc и линковщики ведут себя совсем не так, как на других системах -
при компиляции нужно указывать -fno-common, при сборке -shared нужно
заменять на -dynamiclib и обязательно указывать -undefined
dynamic_lookup (разве что придется собирать dlfunc, функции из которой
вообще не будут обращаться к данным в памяти exim'а, а будут только
читать данные из файлов), нельзя выполнять strip, обязательно нужно
указывать -arch.

пришлось писать отдельный Makefile для сборки dlfunc под Mac OS X
(точнее под Darwin).

заодно под Mac OS X поменялось имя файла динамически загружаемой
библиотеки - exim-dlfunc.so заменено на exim-dlfunc.dylib

место расположения файла тоже поменялось. вернее теперь оно зависит от
операционной системы и пакетного менеджера - при использовании pkgsrc
собранный файл копируется в /usr/pkg/libexec/exim, при использовании
MacPorts собранный файл копируется в /opt/local/libexec/exim, в
остальных случаях - в /usr/local/libexec/exim

> если exim будет собираться с поддержкой SPF, то libspf2 лучше собрать с
> использованием отдельного механизма, а не с помощью сборки штатного pkgsrc:
> http://mta.org.ua/exim-4.76-conf/packages/pkgsrc-macosx/libspf2-1.2.9/

в MacPorts нет порта для libspf2. поэтому при необходимости проверять
соответствие адреса хоста отправителя SPF записи домена отправителя
нужно использовать `SPFD' в качестве значения переменной
`confSPF2_BACKEND' в site/conf.

в MacPorts нужно установить порт p5-mail-spf и использовать spfd и его
состава.

мне не удалось создать файл для запуска spfd средствами launchd.
p5-mail-spf - это stub port, реально spfd собрался у меня из порта
p5.12-mail-spf. для p5.12-mail-spf отдельного Portfile нет, а в Portfile
для p5-mail-spf все настройки startupitem.* были проигнорированы при сборке.

т. о. стартовые скрипты и файл для launchd придется настраивать вручную.

нужно создать каталог /opt/local/share/p5-mail-spf и сохранить в нем файл:

http://mta.org.ua/exim-4.76-conf/packages/ports-macosx/p5-mail-spf-2.7.0_3/files/share/p5-mail-spf/spfd.sh

далее нужно создать каталог
/opt/local/etc/LaunchDaemons/org.macports.spfd и сохранить в нем файлы:

http://mta.org.ua/exim-4.76-conf/packages/ports-macosx/p5-mail-spf-2.7.0_3/files/etc/LaunchDaemons/org.macports.spfd/spfd.wrapper

http://mta.org.ua/exim-4.76-conf/packages/ports-macosx/p5-mail-spf-2.7.0_3/files/etc/LaunchDaemons/org.macports.spfd/org.macports.spfd.plist

после этого нужно выполнить:

/bin/launchctl load -w
/opt/local/etc/LaunchDaemons/org.macports.spfd/org.macports.spfd.plist

это позволит полноценно работать с SPF записями без использования
библиотеки libspf2.

-- 
Best wishes Victor Ustugov   mailto:victor на corvax.kiev.ua
public GnuPG/PGP key:        http://victor.corvax.kiev.ua/corvax.asc
ICQ UIN: 77186900, 371808614 nic-handle: CRV-UANIC




Подробная информация о списке рассылки exim-conf