Установка qmail и MH
Установка Qmail
Следуйте в точности всем инструкциям INSTALL.
Замечания:
Прочтите полностью всю документацию. Цифры означают шаги при установке.
2 - Я устанавливал пользователей и их группы, как описано в INSTALL.ids
7 - ./qmail-makectl не работало на моей машине. Я добавил имя моего домена сам (mickey.n.eunet.de) в /var/qmail/control/me
23 - удостоверьтесь в том, что вы написали именно qmail-smtpd в файле inetd-conf. (Я написал qmail-smptd и искал ошибку два дня :( )
Maildir2smtp
Dan Bernstein создал программу для отправки почты провайдеру из очереди при установке коммутируемого соединения. Этот файл (serialmailxxx) можно скачать с его странички.
Установите эту программу, как описано в руководстве (спасибо за создание руководства Rupert Mazzucco (maz@pap.univie.ac.at), она работает без всяких настроек!
maildir2smtp - blast a maildir across SMTP
maildir2smtp позволяет посылать сообщения через SLIP- или
PPP-соединение. Для того, чтобы это сделать, создайте
новый maildir как указано далее на примере пользователя alias:
# maildirmake ~alias/pppdir
# chown -R alias ~alias/pppdir
поместите
:alias-ppp
в control/virtualdomains и
./pppdir/
в ~alias/.qmail-ppp-default. Не забудьте о дополнительном знаке
"/" в pppdir/. Затем в скрипте установки PPP напишите
maildir2smtp ~alias/pppdir alias-ppp- $IP `hostname`
заменив $IP адресом провайдера.
Замечание:
Пожалуйста, полностью прочтите руководство.
Maildir2smtp требует. чтобы у вашего почтового сервера IP адрес был указан через точки. Если вы его не знаете, то можете узнать при помощи команды ping ВашеИмя@домен.страна.
Эта команда может быть включена в ваш скрипт для входа в систему, после этого при соединении с провайдером ваша почта будет отправляться автоматически.
Установка MH
В добавлении могу сказать, что я заменил /mh-6.8.4/mts/sendmail/smail.c программой mh-qmail-smail.c (написанной Dan Bernstein)
Файл mh-6.8.4/conf/MH выглядит следующим образом:
bin /usr/bin/mh
etc /usr/lib/mh
#mail
#mandir /usr/man
#manuals standard
chown /bin/chown
#cp cp
#ln ln
#remove mv -f
cc gcc
ccoptions -traditional -O2 -m486 -D_NFILE='getdtablesize()'
-DSIGEMT=SIGUSR1
curses -lncurses
#ldoptions -s
#ldoptlibs
lex flex
#oldload off
#ranlib on
mts sendmail
#mf off
#bboards off
#bbdelivery off
#bbhome /usr/spool/bboards
pop on
popdir /usr/lib/mh
sharedlib sys5
slflags -fPIC
slibdir /usr/lib
mailgroup mail
signal void
sprintf int
#editor prompter
#debug off
#regtest off
options ATHENA
options BIND
options DPOP
options DUMB
options FCNTL
options MHE
options MHRC
options MIME
options MORE='"/usr/bin/less"'
options OVERHEAD
options POP2
options POPSERVICE='"pop3"'
options RENAME
options RPATHS
options RPOP
options SOCKETS
options SVR4
options SYS5
options SYS5DIR
options TERMINFO
options UNISTD
options VSPRINTF
Замечания:
Dominic Mitchell (hdm@demon.net) написал в comp.mail.mh (13 июня 1997): "Я скомпилировал только ``mts sendmail'' - прочел я в конференции comp.mail.mh по теме проблем с /smtp. "Не совсем так. С этой опцией МН работает с SMTP, как прямое соединение, а не сетевое. Вам надо добавить строку ~/.mh_profile в: postproc: /usr/local/nmh/lib/spost Это отправит сообщение через sendmail. А так как вы используете qmail, sendmail будет работать как оболочка.'' Спасибо Dominic.
Я закомментировал запуск "mail", потому что хочу управлять почтой при помощи mtstailor
mtstailor
qmail доставляет почту в домашний каталог (~/Mailbox). Я добавил следующее в mtstailor
localname: mickey
localdomain: n.eunet.de
mmdfldir:
mmdflfil: Mailbox
uucpldir:
uucplfil:
mmdelim1: \001\001\001\001\n
mmdelim2: \001\001\001\001\n
mmailid: 0
umincproc:
lockldir:
sendmail: /usr/lib/sendmail
Замечания:
sendmail: /usr/lib/sendmail - это ссылка на оболочку qmail в /var/qmail/bin
MH не всегда понимает тильду (~/). Вместо этого вы можете использовать /home, или вообще ничего (согласно документации это по умолчанию равно $HOME).
Я установил MH и qmail на работе, где моя машина подключена к сети. При этом я добавил строчку в mtstailor: servers: почтовыйсервер.компания.страна
mh_profile
Ниже приведен мой .mh_profile
Path: Mail
draft-folder: drafts
unseen-sequence: unseen
AliasFile: /home/rdn/.mh_aliases
send: -msgid
comp: -form /home/rdn/.mymh-components
MailDrop: /home/rdn/Mailbox
Замечания:
Я добавил строку MailDrop для надежности.
Fetchmail
Я решил использовать fetchmail потому, что почтой пользуется и моя семья. Linux и fetchmail доставляют почту на порт smtp, где qmail вступает в работу.
При установке не возникло никаких проблем, посылка писем в многопользовательский ящик пользователям работает с .fetchmailrc :
poll PersonalMail.Germany.EU.net
protocol pop3
username myname
password mypassword
# следующие две строки делают возможным посылку в многопользовательский ящик
localdomains mydomain.de
is * here
# В FAQ fetchmail говорится, что qmail требует
forcecr
Exmh
Это моя любимая почтовая программа.
Тут есть одна загвоздка - большинство программ TCL/TK имеют установки безопасности. Это решается при помощи скрипта .xserverrc.secure, который поставляется вместе с SuSE.
#!/bin/sh
#
# поместите этот файл в ~/.xserverrc, если вы не хотите давать доступ
# к вашему X-серверу
#
if [ -x /usr/bin/keygen ]; then
if [ ! -x /usr/bin/hostname -a ! -x /bin/hostname \
-a ! -x /usr/bsd/hostname ];
then
echo "startx: can't get my hostname - exiting"
exit 1
else
host=`hostname`
fi
xauth add $host:0 . `/usr/bin/keygen`
sleep 2
xauth add $host/"unix":0 . `/usr/bin/keygen`
exec X :0 -auth .Xauthority $*
else
exec X :0 $*
fi
Procmail
В FAQ qmail говорится что надо добавить
в ~/.qmail строку:
| preline procmail
В версии 3.11pre7 изменилась переменная почтового ящика по умолчанию. Раньше она находилась в config.h. Теперь она в src/authenticate.c:
#define MAILSPOOLHOME "/Mailbox" /* обратите внимание на слэши / */
/* delivers to $HOME/Mailbox */
Я нашел очень много полезных советов по содержимому файла .procmailrc в comp.mail.mh и comp.mail.misc some . Спасибо всем!
# Пример .PROCMAILRC
# Написан Catherine Hampton <ariel@best.com>
# Версия 1.1
# Последнее обновление 1/25/98
#
# Released to the Public Domain.
#
#
# SET VARIABLES
# Внутренние переменные
# нижеследующее было изменено rdn 19980303
# Все говорят, что нужна среда SHELL
SHELL=/bin/sh #Shell используется для запуска procmail. Удостоверьтесь, что эта
#ссылка на ваш sh.
LINEBUF=4096 #Задано для того, чтобы Procmail не "съедал"
#длинные заголовки писем
PATH=$HOME/bin:/bin:/usr/bin:/usr/local/bin:/usr/bin/mh:/usr/lib/mh:
#Пути к вашим программам - лучше их не трогать
VERBOSE=off #Смените это на "on" при испытаниях нового метода,
#чтобы Procmail отмечал каждый свой шаг в журнале
#НЕ ОСТАВЛЯЙТЕ ЭТО ВКЛЮЧЕННЫМ, иначе журналы могут
#переполниться.
# Стандартное расположение файлов и программ
MAILDIR=$HOME/Mail #Вам лучше проверить, существует ли этот каталог
DEFAULT=$HOME/Mailbox #Стандартный ящик входящей почты. Впишите сюда
#верное для вашей системы значение
LOGFILE=$MAILDIR/procmail.log #Расположение журналов. Рекомендуется его задать, иначе
#все ошибки будут посылаться вам по почте
FORMAIL=/usr/bin/formail #Это удобно для систем автоответа.
SENDMAIL=/usr/sbin/sendmail #Это также удобно для систем автоответа. Измените это
#значение в соответствии с вашей системой
В Procmail имеется прекрасная документация. Прочтите руководство и установите файл .procmailrc.
ISDN
Я написал эту главу потому, что ваш ящик не будет работать без PPP-линии к провайдеру. Мне пришлось немного помучаться перед тем, как ISDN начал работать. Дистрибутив SuSE включает себя настройки ISDN, но я бы хотел, чтобы все было еще проще. Все, что здесь написано, было взято из скриптов Bernhard Hailer. (Огромное спасибо)
Файл rc.config загружает необходимые модули во время установки:
#!/bin/bash
# Это адаптированный скрипт, написанный Bernhard Hailer
LOCAL_NUMBER="91311234" # ваш телефон 091311234
REMOTE_NUMBER="0911123456" # телефон провайдера
LOCAL_IP="192.168.0.99" # у меня динамический IP
REMOTE_IP="195.112.123.11" # адрес шлюза провайдера
DEVICE="ippp0"
SYSPATH="/sbin"
ISDNCTRL="$SYSPATH/isdnctrl"
case "$1" in
start)
# активирует isdn
insmod /lib/modules/2.0.33/net/slhc.o
insmod /lib/modules/2.0.33/misc/isdn.o
sleep 1
# загружает модуль hisax
insmod /lib/modules/2.0.33/misc/hisax.o
id=Tel0 type=5 protocol=2 irq=10 io=0x300
echo "Запуск isdn4linux"
# global
$ISDNCTRL verbose 0
$ISDNCTRL addif $DEVICE # создает новый интерфейс
$ISDNCTRL addphone $DEVICE in $REMOTE_NUMBER
$ISDNCTRL addphone $DEVICE out $REMOTE_NUMBER
$ISDNCTRL eaz $DEVICE $LOCAL_NUMBER
$ISDNCTRL l2_prot $DEVICE hdlc
$ISDNCTRL l3_prot $DEVICE trans
$ISDNCTRL encap $DEVICE syncppp
$ISDNCTRL huptimeout $DEVICE 300
$ISDNCTRL chargehup $DEVICE off
$ISDNCTRL secure $DEVICE on
$SYSPATH/ifconfig $DEVICE $LOCAL_IP pointopoint $REMOTE_IP metric 1
$SYSPATH/route add default $DEVICE
$SYSPATH/ipppd /dev/ippp0 file /etc/ppp/options.ipppd &
$SYSPATH/route del default
;;
stop)
#деактивирует isdn
rmmod hisax.o
sleep 1
rmmod isdn.o
rmmod slhc.o
echo "Отключение isdn4linux"
$ISDNCTRL delif ippp0
;;
*)
echo "Использование: $0 (start|stop)"
exit 1
;;
esac
Я использую следующий скрипт для установки коммутируемого соединения isdn on|off
#!/bin/bash
# Это основано на скрипте написанном Bernhard Hailer
IP_ADDRESS="195.112.123.11"
case "$1" in
on)
echo "Вызов ippp0"
/sbin/isdnctrl dial ippp0
# команда sleep дает время на установление РPP-соединения
echo "Пауза 8s для установки соединения PPP"
sleep 8s
/sbin/route add default ippp0
echo "линия открыта - проверка...."
# проверка установления PPP-соединения:
set `ping -qc3 -i1 $IP_ADDRESS 2>/dev/null | grep transmitted`
if [ $4 -gt 0 ];
then
echo "успешно."
echo "Запуск демона fetchmail"
/usr/bin/fetchmail -d 600 -k -v -a -L /var/log/fetchmail
echo "Сбрасываем очередь почты...."
/usr/local/bin/serialmail/maildir2smtp
~alias/pppdir alias-ppp- mail.server.ip.no `hostname`
else
echo "ошибка!"
/sbin/isdnctrl hangup ippp0
fi
;;
off)
echo -n "Отключаем демона fetchmail"
/usr/bin/fetchmail --quit
/sbin/isdnctrl hangup ippp0
/sbin/route del default # удаление маршрута
echo "Отключение прошло успешно"
;;
*)
echo -e "\aИспользование:"
echo "isdn on"
echo "isdn off"
;;
esac
Теперь займемся файлом опций /etc/ppp/options.ipppd
# Основано на:
# Klaus Franken, kfr@suse.de
# Версия: 27.08.97 (5.1)
#
# Этот файл скопирован с /etc/ppp/ioptions.YaST
# в options.<device>
user "myuserid"
# имя системы (только для CHAP!)
# имя my_system_name
# получение адреса IP
# используйте с динамическим адресом IP
ipcp-accept-local
ipcp-accept-remote
noipdefault
# попытка взять адрес из интерфейса
# опции для ipppd (as opposed to pppd)
# используются при статическом IP
#useifip
# запретить сжатие заголовков
-vj
-vjccomp
-ac
-pc
-bsdcomp
# иногда вам будет нужен:
#noccp
# максимальный размер принимаемых данных
mru 1524
# максимальный размер передаваемых данных
mtu 1500
# Если эта машина - сервер, то вам надо убрать пометки на комментариях в следующих строчках
# "+pap" / "+chap" NUR AKTIVIEREN, WENN DIES EIN SERVER IST!!!
#+pap
#+chap
# если у вас проблемы с соединением (нет ответа на первый
# lcp пакет), то попытайтесь уменьшить время повторного цикла. По умолчанию он равен 3 сек,
# попробуйте его уменьшить до 2:
# lcp-restart 2