Установка 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