January 3rd, 2010

404

лингвистическое

Слово "комменты" можно считать принятым в русский язык.

Однако, производные глаголы несколько отличаются.

"Президент так комментировал обращение..."
"Президент так откомментил запись ..."

Сказать "Президент так комментил обращение..." язык не повернётся. "комментил" не применимо, потому что "комментировать" - глагол, означающий некую длительность процесса комментирования, а "комментить" - это помещать уже написанный комментарий (операция практически мгновенная и не представляющая из себя длительности, и не являющаяся при этом интересной).
404

mailman && posftfix

Какая-то фундаментальная херня - postfix отказывается принимать почту для @list.domain.ru, мотивируя, что таких в relay_recipient_maps нет.

Эксперимент с отдельной таблицей разрешённого провалился. Попробую домен прописать в этот самый relay_recipient_maps...


... ага, сработало.

Теперь:

warning: connect to transport mailmain: No such file or directory

при том, что в master.cf

mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py
${nexthop} ${user}

а в transport:
list.domain.ru mailmain:


Либо я что-то не так понял, либо тут что-то не работает...

Ага, забыл mailman_destination_recipient_limit = 1
... всё равно deffered... Или я что-то не понимаю, или тут что-то не так...
404

postfix & mailman

... ощущаю странную ситуацию молчащего гугла. Отказаться от postfix-to-mailman.py и возвращаться к унылым алиасам? Не хочется. Надо разбираться.

почему postfix говорит, что warning: connect to transport mailmain: No such file or directory, если /etc/postfix/master.cf написано:

mailman unix - n n - - pipe
flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}

И файл существует:

lrwxrwxrwx 1 root root 34 Jan 3 06:41 /usr/lib/mailman/bin/postfix-to-mailman.py -> /etc/mailman/postfix-to-mailman.py
-rwxr-xr-x 1 root root 5765 Jan 3 09:10 /etc/mailman/postfix-to-mailman.py

Его смущает симлинк? Глупость, postfix не апач, чтобы думать о FollowSymlink для исполняемых файлов.

Ошибка в скрипте? Так просто не разобраться, но как минимум, он запускается без ошибки (Illegal invocation: '/etc/mailman/postfix-to-mailman.py')



.... ПЛЯ!

... Я раз 15 сделал эту опечатку. Разумеется, 16ый раз остался незамеченным. MAILMAN, а не mailmain...
404

абстрактное

Знаете, про степень объективности чего-либо судить можно по тому, к чему сводится спор о названии "этого". Например: Столица Абхазии называется "Кучум" или "Кардык"? Попытка выяснить источники названия упрутся в одно "а кто решает как оно называется?". То же касается и большинства человеческих вопросов.

С другой стороны, попытка выяснить, что есть "бета-лучи" приведёт не к спору о том, как называть электрон, а к поиску доказательства наличия "отрицательно заряженных частиц". ИМХО именно тут и проходит грань науки. Если источником достоверности (не в смысле Википедии, а в общем рассмотрении) оказывается человек (или, ещё хуже, организация), то к науке это не имеет ни малейшего отношения.

У подобных дисциплин должно быть другое название. Например, "геральдика" ни чуть на науку не претендует - и ничуть же от этого не страдает. Ровно такой же статус должен быть у любых других исследований/систематизаций того, что зависит от решения человека или группы людей.
404

HOWTO mailman+postfix /debian

Итак, улучшенный метод настройки, не связанный с алиасами - скрипт postfix-to-mailman.py.

Краткая теория: postfix - почтовый клиент
mailman - менеджер почтовых листов (или рассылок - как сконфигурируешь).
debian lenny - новая, улучшенная и бесплатная версия Microsoft Windows Server.

Идея конфигурации - выделение адресов для рассылок в отдельный домен. Если наш домен domain.ru, то для рассылок мы будем использовать list.domain.ru. Это позволит нам безболезненно использовать "красивые" имена, вроде info, или даже фамилии сотрудника, ведущего рассылку, не боясь пересечься с обычными пользовательскими емейлами.

Обычно настройка мейлмена выглядит следующим, весьма неприглядным образом:

Мы настраиваем передачу сообщений в /etc/aliases через pipe. Если у нас при этом несколько доменов, то картинка выглядит так:
Прописать в таблице принимаемых адресов емейлы с переадресацией на алиас, прописать алиас. С учётом, что каждая рассылка - это пачка адресов (subscribe, unsubscribe, join, leave, request, bounce и т.д.), то 2-3-5-10 рассылок превращается в сложную и скучную работу.

Существуют версии конфигурации, при которых алиасы генерируются автоматически, но это тоже не очень хорошо, потому что алиасы надо ещё обновить карту.

Есть более красивое решение - регистрация mailman как _ТРАНСПОРТА_ postfix'a. Это неким образом хак, но хак очень красивый и стильный: мы объявляем, что за "доставку" почты домена (например, list.domain.ru) отвечает особый тип транспорта - mailman. Это позволяет нам работать с доменом рассылок, как с любым другим доменом _релеинга_. Нам не надо объяснять postfix'у, что нужно делать с почтой для этого домена, нам надо просто сказать "передай mailman'у, а он уже сам разберётся куда это "передать".

Важные места настройки:
0) Установка софта
1) Сам мейлмен, точнее, его серверные настройки. Он должен быть в курсе того, что он обслуживает.
2) Апач, который обеспечивает веб-интерфейс mailman'а. На самом деле, веб-интерфейс важнее, чем кажется, потому что он используется не только как страницы с информацией или для администрирования, но и для выполнения таких вещей, как принятие кодов подтверждения для подписки/отписки.
3) postfix (в конце-концов, именно он принимает почту)
4) DNS - нам нужно прописать адреса для приёма почты и веб-интерфейса.
5) Настройки рассылок (уровень администратора рассылок).


0. Установка

Я полагаю, что апач, postfix и bind (или их аналоги) уже установлены. Установка mailman: aptitude install mailman.

Обратите внимание на то., что после установки mailman, он не работоспособен - нужно создать служебный список рассылки с названием 'mailman'. С этим лучше не торопиться, т.к. есть нюанс с именем домена по-умолчанию.

1. Настройка mailman

Вся серверная конфигурация mailman - файл /etc/mailman/mm_cfg.py, да это обычный питон файл. Что очень удобно, если нужно что-то "посчитать в процессе.

Основные важные моменты:

DEFAULT_URL_PATTERN = 'http://%s/mailman/'
PRIVATE_ARCHIVE_URL = '/mailman/private'

Мы поменяем стиль адресов, спрятав большинстве случаев 'cgi-bin' из адреса веб-интерфейса.

Далее более важное. Дефолтная конфигурация maiman'а рассчитана на _ОДИН_ обслуживаемый домен. Если у нас он один, то пишем:
DEFAULT_EMAIL_HOST = 'list.domain.ru'
DEFAULT_URL_HOST = 'list.domain.ru'

(обратите внимание, установка mailman по-умолчанию прописывает тут myhostname из /etc/postfix/main.cf, что в большинстве среднего размера почтовых систем совершенно неприемлимо.

Если же у нас несколько доменов рассылки, то мы должны обратить внимание на строчку 'add_virtualhost'. Мы можем добавить несколько доменов рассылки (с некоторыми ограничениями).

Я обычно делаю это так:
maillist_hosts=("list.example.ru","list.site.ru","list.shopping.ru","list.gov.ru")

for host in maillist_hosts:
        add_virtualhost(host,host)


Далее, очевидный DEFAUL_SERVER_LANGUAGE (я предпочитаю 'ru'). Это не всегда срабатывает, часть сообщений всё равно будут по-английски.

Далее:

MTA=None.

Это нужно для того, чтобы администратору не приходили лишние сообщения при создании рассылки. Эти сообщения обычно содержат инструкции по прописыванию aliase'ов, но у нас решение, в котором этого не нужно.

После этого mailman'у нужен список рассылки mailman. Он создаётся командой

newlist mailman.

После ответа на вопрос, можно запустить mailman: /etc/init.d/mailman start. Он должен успешно запуститься, а указанному при создании листа рассылки емейлу должно прийти оповещение. Если нет - следует разобраться почему: /var/log/mail.log, /var/log/mailman/*

2. Настройка апача

В этой конфигурации я полагаю, что virtual hosts в апаче уже настроены.

Создаём файл конфигурации для сайта 'lists': /etc/apache2/sites-avaible/lists (эта конфигурация будет применяться для нескольких списков рассылки, так что используется 'generic' имя, если речь идёт о единственном сайте, то следует использовать его полное имя, например, 'list.domain.ru'):

<VirtualHost *:80>
    ServerName list.domain.ru
    ServerAlias www.list.domain.ru list.gov.ru www.gov.ru list.example.com www.example.ru 
    DocumentRoot /var/www/lists
    ErrorLog /var/log/apache2/lists-error.log
    CustomLog /var/log/apache2/lists-access.log combined

        # We can find mailman here:
        ScriptAlias /cgi-bin/mailman/ /usr/lib/cgi-bin/mailman/
        # And the public archives:
        Alias /pipermail/ /var/lib/mailman/archives/public/
        # Logos:
        Alias /images/mailman/ /usr/share/images/mailman/

        <Directory /usr/lib/cgi-bin/mailman/>
            AllowOverride None
            Options ExecCGI
            AddHandler cgi-script .cgi
            Order allow,deny
            Allow from all
        </Directory> 
        <Directory /var/lib/mailman/archives/public/> 
            Options Indexes FollowSymlinks
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
        <Directory /usr/share/images/mailman/>
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
    

    
<Directory /var/lib/mailman/archives/>
    Options Indexes FollowSymLinks
    AllowOverride None
</Directory> 
ScriptAlias /admin /usr/lib/cgi-bin/mailman/admin
ScriptAlias /admindb /usr/lib/cgi-bin/mailman/admindb
ScriptAlias /confirm /usr/lib/cgi-bin/mailman/confirm
ScriptAlias /create /usr/lib/cgi-bin/mailman/create
ScriptAlias /edithtml /usr/lib/cgi-bin/mailman/edithtml
ScriptAlias /listinfo /usr/lib/cgi-bin/mailman/listinfo
ScriptAlias /options /usr/lib/cgi-bin/mailman/options
ScriptAlias /private /usr/lib/cgi-bin/mailman/private
ScriptAlias /rmlist /usr/lib/cgi-bin/mailman/rmlist
ScriptAlias /roster /usr/lib/cgi-bin/mailman/roster
ScriptAlias /subscribe /usr/lib/cgi-bin/mailman/subscribe
ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/
</VirtualHost>


Создаём каталог /var/www/lists (или другое имя, если вы его решили поменять и поменяли в конфиге апача).
Создаём там index.html с приветствием и ссылкой на "/listinfo". Обратите внимание, если у вас несколько доменов, то следует использовать только относительные пути, а Redirect в .htaccess использовать нельзя.

3. postfix

Тут самое интересное. Конфигураций постфикса неисчислимое количество, так что укажу на места, которые надо настроить:

1) Прописать или добавить list.* домены в relay_domains.
2) Создать или добавить в transport_maps наши домены:
/etc/posftfix/transport:
list.domain:ru          mailman:
list.gov.ru                 mailman:
list.example.com    mailman:

3) Если у нас есть relay_recipient_maps, то следует прописать туда наши списки. Можно добросовестно выписат туда все адреса для всех рассылок (утомляет), а можно схалтурить и написать
@list.domain.ru       OK
@list.gov.ru             OK
@list.example.com OK


(напоминаю, что все карты нужно скомпилировать с помощью poftmap имя_карты, например, postmap transport).

4) Настоящая магия тут:

в каталоге /etc/postfix/master.cf должно появиться после установки mailman:
mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}


4. DNS

Прописываем для каждого из доменов (делать отдельно делегированные поддомены обычно нецелесообразно):

list IN A ip_of_server.
www.lsit CNAME list
list IN MX 10, list

5. Настройка списков рассылки
Если что-то не так с паролем создания списков, то есть скрипт (запускать от рута) /usr/lib/mailman/bin/mmsitepass, который позволяет сбросить основной пароль.

Для создания списка рассылки надо зайти на http://list.domain.ru/mailman и через навигацию попасть в интерфейс создания рассылки. Далее тут всё понятно и можно следовать мануалам с list.org. Обратите внимание, что если у вас НЕСКОЛЬКО list.*, то

1) С какого домена рассылку создаёте, в таком домене она и появляется. Зайдёте на list.domain.ru и создадите news, будет news@list.domain.ru, зайдёте на list.gov.ru и создадите elect, будет elect@list.gov.ru.

2) В пределах mailman'а имена рассылок (без учёта домена) должны быть уникальными. Другими словами, невозможно создать news@domain.ru и news@gov.ru на одном сервере. Следует использовать различающиеся имена.