воскресенье, 13 сентября 2009 г.

Создание почтовой рассылки с помощью mailman, sendmail и FreeBSD.

Все действия происходят на:
# uname -prs
FreeBSD 7.0-RELEASE i386

Ищем нужный для наших целей порт:
# cd /usr/ports
# make search name=mailman

Port: mailman-2.1.12
Path: /usr/ports/mail/mailman
Info: A mailing list manager (MLM) with a user-friendly web front-end
Maint: jmelo@FreeBSD.org
B-deps: python26-2.6.2_2
R-deps: python26-2.6.2_2
WWW: http://www.list.org/


Заходим в найденную нами директорию и даем команду на инсталляцию. При конфигурировании возникает вопрос о том, какой почтовой программой будем пользоваться. В данном случае выбираем:
[X] SENDMAIL for use with sendmail
Порт устанавливает MAIL_GID=mailnull.

Также нам сообщаеться, какие параметры мы можем изменить во время компиляции:
You may change the following build options:
MM_USERNAME=mailman The username of the Mailman user.
MM_USERID=91 The user ID of the Mailman user.
MM_GROUPNAME=mailman The group to which the Mailman user will belong.
MM_GROUPID=MM_USERID The group ID for the Mailman user.
MM_DIR=mailman Mailman will be installed in /usr/local/mailman.
CGI_GID=www The group name or id under which your web server executes CGI scripts.
IMGDIR=www/icons Icon images will be installed in /usr/local/www/icons.


По успешном завершении компиляции выдается такое сообщение:
----------------------------------------------------------------------------
Mailman has been installed, but requires further configuration before use!

You will have to configure both your MTA (mail server) and web server to
integrate with Mailman. If the port's documentation has been installed,
extensive post-installation instructions may be found in:

/usr/local/share/doc/mailman/FreeBSD-post-install-notes

Note (1): If you use an alternate (non-Sendmail) MTA, you MUST be sure
that the correct value of MAIL_GID was used when this port or package
was built. Performing a "make config" in the Mailman port directory
you can choose your MTA with the correct MAIL_GID.

Note (2): The entire Mailman installation resides under /usr/local/mailman
The command-line scripts necessary to administer Mailman have been
installed in /usr/local/mailman/bin

Note (3): As of version 2.1, Mailman's queue runner runs as a daemon and
is started by a script in /usr/local/etc/rc.d
----------------------------------------------------------------------------


SECURITY REPORT сообщает нам про установку таких испоняемых файлов:
/usr/local/mailman/cgi-bin/create
/usr/local/mailman/cgi-bin/subscribe
/usr/local/mailman/mail/mailman
/usr/local/mailman/cgi-bin/listinfo
/usr/local/mailman/cgi-bin/rmlist
/usr/local/mailman/cgi-bin/options
/usr/local/mailman/cgi-bin/private
/usr/local/mailman/cgi-bin/admindb
/usr/local/mailman/cgi-bin/edithtml
/usr/local/mailman/cgi-bin/roster
/usr/local/mailman/cgi-bin/admin
/usr/local/mailman/cgi-bin/confirm

Ну что ж, заглянем в файл, про который нам сказали:
#less /usr/local/share/doc/mailman/FreeBSD-post-install-notes
Выделим основные шаги, которые мы предпримем:
1) Общие послеинсталяционные шаги;
2) Интеграция Mailman с нашим веб сервером, апачем (для других веб серверов указаний нет);
3) Интеграция Mailman с почтовым сервером Sendmail
4) Конфигурирование Apache (странно - то же что второй пункт по моему мнению)

Рассмотрим каждый шаг поподробнее:
1) Прочитайте файлы "INSTALL" и "README" в той же директории, что и этот файл. Без комментариев. Читаем.
Там же есть другая документация, с которой неплохо бы ознакомиться:
# ls /usr/local/share/doc/mailman/
ACKNOWLEDGMENTS README UPGRADING
BUGS README-I18N.en mailman-admin.txt
FAQ README.CONTRIB mailman-install.txt
FreeBSD-post-install-notes README.NETSCAPE mailman-member.txt
INSTALL README.USERAGENT
NEWS TODO


2, 4)
Этот кусок из конфигурационного файла апача дает полное представление об изменениях, которые нам необходимо совершить:
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin ya@my.email
DocumentRoot /usr/local/mailman
ServerName myhost.mydomain.ua
ErrorLog /var/log/apache2/rassylka-error.log
CustomLog /var/log/rassylka-access.log common
ScriptAlias /mailman "/usr/local/mailman/cgi-bin"
Alias /pipermail "/usr/local/mailman/archives/public"
<Directory "/usr/local/mailman">
Options FollowSymLinks ExecCGI
AllowOverride None
Order deny,allow
Deny from all
Allow from x.x.x.x #адреса, с которых разрешен доступ к нашей рассылке
</Directory>
</VirtualHost>


Если мы инсталлируем Mailman в нестандартное место, то надо соответственно изменить изменить "/usr/local/mailman".

3) С sendmail мы делаем следующее. Изменяем файлы virtusertable и aliases:
#cd /etc/mail
#vim virtusertable

mailman@mydomain.ua mailman
mailman-admin@mydomain.ua mailman-admin
mailman-bounces@mydomain.ua mailman-confirm
mailman-confirm@mydomain.ua mailman-confirm
mailman-join@mydomain.ua mailman-join
mailman-leave@mydomain.ua mailman-leave
mailman-owner@mydomain.ua mailman-owner
mailman-request@mydomain.ua mailman-request
mailman-subscribe@mydomain.ua mailman-subscribe
mailman-unsubscribe@mydomain.ua mailman-unsubscribe

trial@mydomain.ua trial
trial-admin@mydomain.ua trial-admin
trial-bounces@mydomain.ua trial-confirm
trial-confirm@mydomain.ua trial-confirm
trial-join@mydomain.ua trial-join
trial-leave@mydomain.ua trial-leave
trial-owner@mydomain.ua trial-owner
trial-request@mydomain.ua trial-request
trial-subscribe@mydomain.ua trial-subscribe
trial-unsubscribe@mydomain.ua trial-unsubscribe


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

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

#make
#make stop && make start

Это мы почтовый сервер рестартанули. Теперь стартанем наш апач.
Добавляем в /etc/rc.conf такую строчку:
apache2_enable="YES"
Потом делаем такие действия:
#mkdir /var/log/apache2
#chown www:www /var/log/apache2
#/usr/local/etc/rc.d/apache2 start

Теперь займемся собственно mailman-ом.
#vim /usr/local/mailman/Mailman/mm_cfg.py
В качестве образца переменных в этом файле смотрим /usr/local/mailman/Mailman/Defaults.py
Нам важны следующие переменные:
DEFAULT_EMAIL_HOST = 'mydomain.ua'
DEFAULT_URL_HOST = 'mydomain.ua'
Вообще-то они устанавливаются автоматом.
Далее устанавливаем пароль администратора наших рассылок:
# /usr/local/mailman/bin/mmsitepass

Создаем листы рассылки - служебный mailman и наш лист(листы), которым(и) будем пользоваться. Делаем это так.
Открываем в браузере url http://mydomain.ua/mailman/admin
Name of list: имя листа - trial
Initial list owner address: тут соответствующий почтовый адрес
Initial list password: создаем пароль
Confirm initial password: подтверждаем
Initial list of supported languages. Выбираем язык интерфейса. Есть и украинский и русский
List creator's (authentication) password:(здесь вводим пароль созданный mmsitepass)

# vi /etc/rc.conf
Добавляем строку:
mailman_enable="YES"
# /usr/local/etc/rc.d/mailman start

Смотрим, что у нас появилось в процессах:
# ps ax|grep mailman
2480 ?? Is 0:00.02 /usr/local/bin/python2.6 /usr/local/mailman/bin/mailmanctl -s -q start
2481 ?? S 0:00.57 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=ArchRunner:0:1 -s
2482 ?? S 0:00.57 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=BounceRunner:0:1 -s
2483 ?? S 0:00.58 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=CommandRunner:0:1 -s
2484 ?? D 0:00.59 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=IncomingRunner:0:1 -s
2485 ?? S 0:00.59 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=NewsRunner:0:1 -s
2486 ?? S 0:00.67 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=OutgoingRunner:0:1 -s
2487 ?? S 0:00.65 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=VirginRunner:0:1 -s
2488 ?? I 0:00.51 /usr/local/bin/python2.6 /usr/local/mailman/bin/qrunner --runner=RetryRunner:0:1 -s

Получаем на указанный адрес такие вот два письма:
Subject: Your new mailing list: trial
From: mailman-owner@myhost.mydomain.ua
Sender: trial-bounces@myhost.mydomain.ua
To: ya@mydomain.ua

The mailing list `trial' has just been created for you. The following
is some basic information about your mailing list.

Your mailing list password is:

mailmanbsdrarmaile

You need this password to configure your mailing list. You also need
it to handle administrative requests, such as approving mail if you
choose to run a moderated list.

You can configure your mailing list at the following web page:

http://myhost.mydomain.ua/mailman/admin/trial

The web page for users of your mailing list is:

http://myhost.mydomain.ua/mailman/listinfo/trial

You can even customize these web pages from the list configuration
page. However, you do need to know HTML to be able to do this.

There is also an email-based interface for users (not administrators)
of your list; you can get info about using it by sending a message
with just the word `help' as subject or in the body, to:

trial-request@myhost.mydomain.ua

To unsubscribe a user: from the mailing list 'listinfo' web page,
click on or enter the user's email address as if you were that user.
Where that user would put in their password to unsubscribe, put in
your admin password. You can also use your password to change
member's options, including digestification, delivery disabling, etc.

Please address all questions to mailman-owner@myhost.mydomain.ua

И второе письмо:
Subject: Mailing list creation request for list trial
From: mailman-owner@myhost.mydomain.ua
Sender: mailman-bounces@myhost.mydomain.ua
To: mailman-owner@myhost.mydomain.ua

The mailing list `trial' has been created via the through-the-web
interface. In order to complete the activation of this mailing list, the
proper /etc/aliases (or equivalent) file must be updated. The program
`newaliases' may also have to be run.

Here are the entries for the /etc/aliases file:

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

Собственно говоря - все.
Список созданных рассылок можно увидеть на:
http://myhost.mydomain.ua/mailman/listinfo
Оригинал статьи можно посмотреть тут.

Комментариев нет: