Обзор системы
поддержки списков рассылок GNU Mailman
Андрей Маркелов
Нет, это, конечно, не милиция (надеюсь, вы не используете знания, полученные
со страниц журнала, в целях, противоречащих вашему местному законодательству). Речь
пойдет об открытом программном продукте, предназначенном для создания
собственных списков рассылки – Mailman (в переводе с англ. – почтальон). Сей
продукт расположился в глобальной паутине по адресу http://www.list.org. Mailman распространяется в
соответствии с General Public License. Используется в своих рассылках такими
маститыми IT-компаниями, как Red Hat, Apple Computer, Dell Computers и большим
числом GNU-проектов, включая The XFree86 Project, Samba, Exim, XEmacs. Со
списком сайтов, где используется рассматриваемый продукт, можно ознакомиться по
ссылке http://www.list.org/inthenews.html.
Программа обладает обширным
списком возможностей. Вот некоторые из них:
n Управление списками, подпиской и
пользовательской конфигурацией через веб-интерфейс.
n Модерирование рассылок, поддержка открытых и
закрытых списков рассылки, фильтров.
n Поддержка архивов списков рассылки.
n Автоответчик.
Прежде чем приступить к установке,
ознакомимся с требованиями к системе, на которую ставится Mailman:
n Естественно, должен присутствовать почтовый
сервис. Mailman работает с Sendmail, Postfix, Exim и qmail. На моей тестовой
системе стоял Sendmail, поэтому на него и буду ориентироваться в описании.
n Веб-сервер с поддержкой CGI/1.1 API.
n GCC 2.8.1 или выше.
n Интерпретатор 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
<Directory “/usr/local/mailman/archives/public/”>
AddDefaultCharset Off
</Directory>
Таким образом, мы предписываем Apache, что из
указанного каталога разрешается выполнять CGI-скрипты, создаем алиас для /archives/public/
и выключаем для этого каталога кодировку «по умолчанию».
Потом копируем логотипы Mailman, Python, GNU Logo
в доступное вашему веб-серверу место, и не забываем перезапустить сам веб-сервер:
cp /usr/local/mailman/icons/*
/var/www/icons
service httpd restart
Создаем служебный «site-wide»-список под
названием mailman:
./bin/newlist mailman
По запросу вводим mail ведущего список и пароль
(на этот адрес будет выслано письмо с подтверждением и указанным паролем).
Теперь, согласно инструкциям, выданным после
отработки команды, добавляем в /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.
Я не буду подробно описывать интерфейс
администратора и настройки списков, поскольку все параметры снабжены вполне
понятными описаниями на русском языке.