Обзор системы поддержки списков рассылок GNU Mailman

Речь в этой статье пойдет об открытом программном продукте, предназначенном для создания собственных списков рассылки - Mailman (почтальон, англ.). Mailman является одним из классических примеров эффективного использования языка Python и находится на вооружении ряда крупных компаний, среди которых Red Hat, Apple и Dell.

[Андрей Маркелов (www.markelov.net)]

Обзор системы поддержки списков рассылок GNU Mailman.


Впервые опубликованно в журнале "Системный администратор" N7/2004

Речь в статье пойдет об открытом программном продукте, предназначенном для создания собственных списков рассылки - Mailman (почтальон, англ). Сей продукт расположился в Глобальной Паутине по "красивому" адресу - http://www.list.org. Mailman распостраняется в соответствии с General Public License. А используется в своих рассылках такими маститыми IT-компаниями как Red Hat, Apple Computer, Dell Computers, и большим числом GNU проектов включая Samba, Exim, XEmacs. Со списком сайтов, где используется рассматриваемый продукт можно ознакомится по ссылке http://www.list.org/inthenews.html.

    Программа обладает обширным списком возможностей. Вот некоторые из них:
  • управление списками, подпиской и пользовательской конфигурацией через web-интерфейс;
  • модерирование рассылок, поддержка открытых и закрытых списки рассылки, фильтров;
  • поддержка архивов списков рассылки;
  • автоответчик.
    Прежде чем приступить к установке, ознакомимся с требованиям к системе, на которую ставится Mailman:
  • естественно, должен присутствовать почтовый сервис. Mailman работает с Sendmail, Postfix, Exim и qmail. На моей тестовой системе стоял Sendmail, поэтому на него и буду ориентироваться в описании;
  • веб-сервер с поддержкой CGI/1.1 API;
  • GCC 2.8.1 или выше;
  • интерпритатор Python, на котором, собственно, и написана система (с небольшими кусочками кода на C). Поддерживаются версии 2.1 и выше.

Я проверял установку системы на дистрибутиве White Box Enterprise Linux 3 (http://www.whiteboxlinux.org/), который является версией Red Hat Enterprise Linux 3, заново собранной из свободно доступных исходников.

В моем случае интеграция "почтальона" производилась с веб-сервером Apache. Далее в статье будет дан необходимый минимум сведений, достаточный для установки Mailman и создания своего собственного списка рассылки.

Установка

Скачиваем с сайта проекта, либо с одного из зеркал архив mailman.tar.gz. Последняя версия "почтальона" на момент написания статьи была 2.1.5. Конечно, можно было бы найти и поставить Mailman из rpm-файла. Безусловно, так было бы проще, но, учитывая, что не все читатели используют системы на основе менеджера пакетов rpm, рассмотрим установку из исходных текстов. Разархивируем скачанный файл в каталог /tmp.

gunzip mailman.tar.gz
tar -xvf mailman.tar

Для дальнейших действий требуются полномочия супервизора. Создаем пользователя mailman, являющегося членом группы mailman. В дистрибутивах, основывающихся на Red Hat Linux это делается одной командой:

useradd mailman

Теперь создаем директорию, в которую будет установлен Mailman и даем на нее права:

mkdir /usr/local/mailman
chgrp mailman /usr/local/mailman
chmod a+rx,g+ws /usr/local/mailman

Далее заходим в систему как пользователь mailman, или другой пользователь которого Вы предварительно включили в группу mailman. Важно чтоб эти шаги выполнялись не от лица суперпользователя:

cd /tmp/mailman-2.1.5/
./configure --with-cgi-gid=apache --with-mail-gid=mail
make install

Теперь проверим корректность разрешений на файлы при помощи специального скрипта, входящего в пакет:

cd /usr/local/mailman
./bin/check_perms

Скрипт должен выдать сообщение о том, что проблем с правами не обнаружено. Далее, даем команду exit, и уже под пользователем root правим httpd.conf, добавив туда строчки:

ScriptAlias /mailman/ /usr/local/mailman/cgi-bin/
Alias /pipermail/ /usr/local/mailman/archives/public

А в описание директории /usr/local/mailman/archives/public/ добавляем

AddDefaultCharset Off

Таким образом мы указываем Апачу, что из указанного каталога разрешается выполнять CGI-скрипты, создаем алиас для /archives/public/ и выключаем для этого каталога кодировку "по умолчанию".

Потом копируем логотипы Mailman, Python, GNU Logo в доступное Вашему веб-серверу место, и не забываем рестартовать сам веб-сервер:

cp /usr/local/mailman/icons/* /var/www/icons
service httpd restart

Создаем служебный "site-wide" список под названием mailman:

./bin/newlist mailman

По запросу вводим мэйл ведущего список и пароль (на этот адрес будет выслано письмо с подтверждением, и указанным паролем).

Теперь, согласно инструкциям, выданным после отработки команды, добавляем в /etc/aliases псевдонимы (в качестве примера был создан список под именем test):

test:              "|/usr/local/mailman/mail/mailman post test"
test-admin:        "|/usr/local/mailman/mail/mailman admin test"
test-bounces:      "|/usr/local/mailman/mail/mailman bounces test"
test-confirm:      "|/usr/local/mailman/mail/mailman confirm test"
test-join:         "|/usr/local/mailman/mail/mailman join test"
test-leave:        "|/usr/local/mailman/mail/mailman leave test"
test-owner:        "|/usr/local/mailman/mail/mailman owner test"
test-request:      "|/usr/local/mailman/mail/mailman request test"
test-subscribe:    "|/usr/local/mailman/mail/mailman subscribe test"
test-unsubscribe:  "|/usr/local/mailman/mail/mailman unsubscribe test"

Кроме, того, если Ваш Sendmail идет со включенной по умолчанию опцией smrsh, ограничивающей исполнение скриптов через MTA (а в случае использования дистрибутивов, не базирующихся на Red Hat Linux это именно так), то Вам необходимо в каталоге /etc/smrsh/ создать симлинк на mailman:

cd /etc/smrsh/
ln -s /usr/local/mailman/mail/mailman mailman

Следующий шаг - создание списка периодически выполняемых задач при помощи crontab (например, оповещение администратора о запросах на включение пользователей в список рассылки):

cd /usr/local/mailman/cron
crontab -u mailman crontab.in
cd ..

Теперь запустим демона вручную, а на будущее добавим возможность автоматического старта после перезагрузки сервера. Команды для дистрибутивов, поддерживающих chkconfig следующие:

./bin/mailmanctl start
cp scripts/mailman /etc/init.d/mailman
chkconfig -add mailman

Проверьте правильность выставленных значений переменных DEFAULT_EMAIL_HOST и DEFAULT_URL_HOST в файле ./Mailman/Defaults.py. Они должны содержать полное имя вашего почтового и веб-серверов.

Далее применяем шаблон сайта (его можно было предварительно отредактировать, но мы все оставим по умолчанию). Шаблон содержит практически все настройки системы, и хорошо задокументирован. При первой, тестовой установке я предлагаю его не изменять, так как с настройками можно "поиграться" и через веб-интерфейс. Так будет намного нагляднее.

./bin/config_list -I data/sitelist.cfg mailman

Теперь задаем пароль администратора сайта. Он понадобится для создания публичных списков рассылки.

./bin/mmsitepass

Если в процессе конфигурирования у вас что-то пойдет не очень гладко, рекомендую просмотреть FAQ по адресу http://www.python.org/cgi-bin/faqw-mm.py?req=index. Также обратите внимание на логи "почтальона", ведущиеся в каталоге /usr/local/mailman/logs/, и возможные блокировки в /usr/local/mailman/loсks/.

Создаем список рассылки

Теперь у нас все готово для создания первого списка рассылки. Идем по ссылке http://сервер.домен.ru/mailman/create, и заполняем поля: имя списка, пароль, почтовый ящик владельца, язык. В самом последнем поле вводим пароль администратора сайта, который мы задавали командой mmsitepass.

После успешного создания списка, Вам придет письмо с подтверждением, и будет доступна ссылка http://сервер.домен.ru /mailman/admin/имя_списка, по которой можно вызвать интерфейс администратора. А по http://сервер.домен.ru/mailman/listinfo/имя_списка можно подписаться на список. Также по http://сервер.домен.ru /mailman/listinfo приведен общий перечень всех списков рассылки, существующих на сайте. Естественно, в нем пока присутствует только один элемент.

Протестировать новый список, предварительно подписавшись на него можно отправив письмо на адрес имя_списка@сервер.домен.ru.

Я не буду подробно описывать интерфейс администратора и настройки списков, поскольку все параметры снабжены вполне понятными описаниями на русском языке.

Андрей Маркелов.
2004 г.

[ опубликовано 18/08/2004 ]

Андрей Маркелов (www.markelov.net) - Обзор системы поддержки списков рассылок GNU Mailman   Версия для печати