1. ОСНОВНАЯ УСТАНОВКА

Существует два основных шага при установке sendmail. Во-первых, вы должны скомпилировать и установить бинарные файлы. Это будет достаточно просто, если sendmail уже перенесен в вашу операционную систему. Во-вторых, вы должны сделать рабочий файл конфигурации. Этот файл считывается sendmail при запуске и описывает все известные ему почтовые программы, правила анализа адресов, переписи заголовков сообщений, а также настройки различных опций. Хотя файл конфигурации достаточно сложен, обычно конфигурацию можно построить используя основанный на M4 язык конфигурации.

Остаток этого раздела описывает установку sendmail в том случае, если вы используете одну из уже существующих конфигураций, и стандартные параметры установки для вас вполне приемлимы. Все пути к файлам и примеры заданы от корня поддерева sendmail, для 4.4BSD обычно /usr/src/usr.sbin/sendmail.

Если вы загружаете его с ленты, продолжайте со следующего раздела. Если в вашей системе уже имеется работающий бинарный файл, то вы вполне можете сразу переходить к разделу 1.2.

1.1. Компиляция Sendmail Все исходные файлы для sendmail находятся в подкаталоге sendmail. Для компиляции sendmail перейдите в его каталог и запустите

./Build

Бинарные файлы будут оставлены в соответствующе названном каталоге, например obj.BSD-OS.2.1.i386. Это сделано для того, чтобы в одном и том же дереве исходных файлов могли быть скомпилированы несколько объектных версий.

1.1.1. Подгонка Build Команде Build можно задавать параметры. Во многих случаях их можно использовать только после создания каталога obj.* . Эти команды включают:
 
-L libdirs Список каталогов для поиска библиотек
-I incdirs Список каталогов для поиска включаемых файлов
-E envar= значение Назначить перед компиляцией переменной окружения указанное значение.
-c Перед запуском создать новое дерево obj.*
-f siteconfig Считать указанный файл конфигурации узла. Если этот параметр не указан, Build включает все файлы из $BUILD-TOOLS/Site/site.$oscf.m4 и $BUILD-TOOLS/Site/site.config.m4 , где $BUILDTOOLS обычно ../devtools , а $oscf - то же имя, что используется в каталоге obj.* . Ниже имеется описание файла конфигурации узла. 
-S Пропустить автоконфигурацию. Build не будет автоматически находить библиотеки. Все библиотеки и определения преобразований должны быть указаны в файле конфигурации узла. 

Все остальные параметры передаются в программу make.

1.1.2 Создание Файла Конфигурации Узла Эта секция еще не готова. Пока что лучше всего смотреть файл devtools/README. Различные флаги компиляции можно посмотреть в sendmail/README. 1 .1.3 Подгонка Makefile Sendmail поддерживает два различных формата для локальных (находящихся на диске) версий баз данных, в особенности базы данных aliases . По крайней мере, один из них должен быть определен, если это вообще возможно.
 
NDBM Формат "new DBM", доступный в настоящее время почти во всех системах. До 4.4BSD это был предпочтительный формат. Он позволяет такие сложные вещи, как множество баз данных и закрытие открытой на этот момент базы данных. 
NEWDB Новый пакет базы данных от Berkeley. Если он у вас есть, то используйте его. Он позволяет длинные записи, множество открытых баз данных, кэширование в памяти и многое другое. Вы можете определить его вместе с NDBM; если вы так сделаете, то старые базы данных будут считываться, но когда будет создаваться новая база данных, то она будет уже в формате NEWDB. В случае, если у вас определены NEWDB, NDBM, и NIS, и имя файла aliases будет содержать подстроку "/yp/", при выполнении команды newalias, sendmail создаст и новую и старую версии файла алиасов. Это требуется из-за того, что система Sun NIS/YP считывает версию DBM файла алиасов. Это ужасно, но работает. 

Если ни одна из них не определена, sendmail при каждом запуске будет считывает файл алиасов в память. Этого нужно избегать, так как это может быть достаточно медленно. Существует также несколько методов доступа к удаленным базам данных:
 

NIS Sun's Network Information Services (бывший YP).
NISPLUS Sun's NIS+ services.
NETINFO NeXT's NetInfo service.
HESIOD Hesiod service (from Athena).

Другие флаги компиляции выставляются в conf.h и должны быть уже предопределены для вас, если только вы не занимаетесь портированием в другую систему.

1.1.4 . Компилляция и установка После описанного выше локального системного конфигурирования, вы должны скомпилировать и установить систему. Во многих системах лучший для этого способ - сценарий "Build ":

./Build

Он использует uname (1) для выбора подходящего для вашей системы Makefile.

Если вы устанавливаете все на стандартные места, то произвести установку можно с помощью

./Build install

Это должно установить бинарный файл в /usr/sbin и создать ссылки /usr/bin/newaliases и /usr/bin/mailq на /usr/sbin/sendmail. В системах 4.4BSD это также сформатирует и установит инструкции (man pages).

1.2. Файлы Конфигурации Sendmail не может работать без файла конфигурации. Конфигурация определяет механизмы доставки почты, понимаемые этим узлом, как их использовать, как перенаправлять почту на удаленные почтовые системы, и многие другие настроечные параметры. Этот файл конфигурации подробнее описан в дальнейших частях этого документа.

Поначалу конфигурация sendmail может напугать и запутать вас. Мир сложен, и почтовая конфигурация - всего лишь его отражение. Комплект поставки включает конфигурационный пакет, основанный на m4, скрывающий большинство из сложностей.

Файлы конфигурации, по сравнению с предыдущими версиями, стали проще, во многом из-за того, что и мир стал проще; в частности, текстовые файлы хостов официально устранены, и теперь нет необходимости "прятать" хосты за зарегистрированным шлюзом в Internet.

Эти файлы также учитывают, что большинство ваших соседей используют UUCP адресацию на основе доменов; что означает, что вместо именования хостов как "host!user" они будут использовать "host.domain!user". Файлы конфигурации могут быть переделаны так, чтобы обходить это, но это намного сложнее.

Наши файлы конфигурации обрабатываются m4 для облегчения внесения локальных изменений; каталог cf в поставке sendmail содержит исходные файлы. Этот каталог содержит несколько подкаталогов:
 

cf Описания хостов. Это могут быть литерные имена хостов (например, "ucbvax.mc"), если хосты являются шлюзами, или более общие описания (типа "generic-solaris2.mc" - как общее описание хостов, соединенных по SMTP под управлением ОС Solaris 2.x. ). Файлы, имена которых заканчиваются на .mc ("Master Configuration") являются входными описаниями; выходные находятся в соответствующих файлах .cf . Общая структура этих файлов описывается ниже. 
domain Зависящие от узла описания поддоменов. Описывают, как ваша организация хочет осуществлять адресацию. Например, domain/ CS.Berkeley.EDU.m4 - это наше описание для хостов в поддомене CS.Berkeley.EDU. На них ссылаются, используя m4 макрос DOMAIN в файле .mc.
feature Определения специфических особенностей, которые могут быть нужны какому-либо определенному хосту в вашем узле. На них ссылаются, используя m4 макрос FEATURE. Например - use_cw_file (говорит sendmail считыватьть при запуске файл /etc/mail/local-host-names, чтобы найти список локальных имен). 
hack Локальные особенности. На него ссылаются, используя m4 макрос HACK. Лучше всего не использовать.
m4 Независимые от узла включаемые m4 (1) файлы, содержащие общую для всех конфигурационных файлов информацию. Этот каталог можно рассматривать как каталог "#include".
mailer Определения почтовых программ, на которые ссылаются используя m4 макрос MAILER. Типы почтовых программ, известных в этой поставке: fax, local, smtp, uucp, и usenet. Например, чтобы включить поддержку почтовых программ основанных на UUCP, используйте "MAILER(uucp)". 
ostype Определения, описывающие окружение различных операционных систем (например, местонахождения вспомогательных файлов). На них ссылаются используя m4 макрос OSTYPE.
sh Файлы оболочки, используемые процессом постройки m4 . С этим у вас не должно быть проблем.
siteconfig Локальная информация о связях UUCP. Этот каталог был замещен mailertable ; все новые конфигурации должны использовать mailertable для маршрутизации UUCP (и всего остального). 

Если вы в новом домене (т.е., компании), вам, возможно, захочется создать файл cf/domain для вашего домена. В основном он состоит из описаний ретрансляторов (relay definitions) и особенностей, которые бы использовались на всех узлах: например, описание домена Berkeley определяет ретрансляторы для BitNET и UUCP. Они очень специфичны для Berkeley и должны быть полностью квалифицированными доменными именами internet. Пожалуйста, проверьте их приемлемость для вашего домена.

Поддомены в Berkeley также представлены в каталоге cf/domain. Например, домен CS.Berkeley.EDU - поддомен Computer Science, EECS.Berkeley.EDU- поддомен Electrical Engineering and Computer Sciences , а S2K.Berkeley.EDU - это поддомен Sequoia 2000. Возможно, вам захочется добавить соответствующие вашему домену файлы.

Вам нужно будет использовать или создать файлы .mc для ваших хостов в подкаталоге cf/cf . Это детально описано в файле cf/README.

1 .3. Подробности Файлов Инсталляции Этот раздел описывает файлы, необходимые для установки sendmail. 1.3.1. /usr/sbin/sendmail Бинарный файл sendmail находится в /usr/sbin1 . Он должен иметь бит смены владельца на пользователя root. В целях безопасности, владельцем каталогов /, /usr, и /usr/sbin должен быть root, а их пермиссии должны быть 7552. 1.3.2. /etc/mail/sendmail.cf Это файл конфигурации для sendmail3. Это единственный небиблиотечный файл, имя которого вкомпилировано в sendmail4.

Файл конфигурации обычно создается с использованием описанных выше файлов из поставки. Если у вас необычная конфигурация системы, то, возможно, вам понадобиться создать специальную версию. Формат этого файла более подробно описан в последующих разделах этого документа.

1.3.3. /usr/bin/newaliases Команда newaliases должна быть всего лишь ссылкой на sendmail:

rm -f /usr/bin/newaliases

ln -s /usr/sbin/sendmail /usr/bin/newaliases

Он должен быть создан там, где его найдет системный путь поиска.

1.3.4. /usr/bin/hoststat Команда hoststat также должна быть всего лишь ссылкой на sendmail , таким же образом, что и newaliases . Эта команда выдает статус последней почтовой транзакции со всеми удаленными хостами. Флаг -v не даст обрезать показываемый статус. Он работает только если выставлена опция HostStatusDirectory. 1.3.5. /usr/bin/purgestat Эта команда также является ссылкой на sendmail . Она обнуляет устаревшую информацию (Timeout.hoststatus), сохраненную в дереве HostStatusDirectory. 1.3.6. /var/spool/mqueue Для хранения почтовой очереди должен быть создан каталог /var/spool/mqueue . Этот каталог должен иметь пермиссии 700 и принадлежать пользователю root.
Настоящий путь к этому каталогу определяется оцией Q в файле sendmail.cf. Для того, чтобы использовать множество очередей, назначьте значение, оканчивающееся *. Например, /var/spool/mqueue/qd* будет использовать все каталоги или символические ссылки на каталоги, начинающиеся с "qd" в /var/spool/mqueue как каталоги для очереди. Не изменяйте структуру каталога очереди во время работы программы sendmail.
Если эти каталоги имеют подкаталоги или символические ссылки на каталоги названные "qf", "df" и "xf", то они будут использованы для различных типов файлов очередей. То есть, файлы данных будут сохраняться в подкаталоге "df", файлы транскрипта в "xf", а все остальные - в "qf". 1.3.7. /var/spool/mqueue/.hoststat Это обычное значение опции HostStatusDirectory , содержащей один файл на хост, с которым этот sendmail недавно разговаривал. Обычно это подкаталог в mqueue. 1.3.8. /etc/mail/aliases Системные псевдонимы содержатся в "/etc/mail/aliases". Пример этого файла имеется в "sendmail/aliases", в нем имеются некоторые псевдонимы, которые должны быть определены:

cp lib/aliases /etc/mail/aliases

edit /etc/mail/aliases

Вы должны добавить в этот файл любые псевдонимы, необходимые в вашей системе.

Обычно sendmail смотрит на версии этих файлов в виде баз данных, хранящихся и в "/etc/aliases.dir" и в "/etc/aliases.pag" или "/etc/aliases.db", в зависимости от используемой вами пакета баз данных. Путь к этому файлу определяется опцией AliasFile в файле sendmail.cf.

1.3.9. /etc/rc или /etc/init.d/sendmail При перезагрузке системы необходимо запускать демон sendmail . Этот демон обеспечивает две функции: он слушает сокет SMTP на случай соединений (чтобы получать почту с удаленных систем), а также периодически обрабатывает очередь, чтобы, как только удаленные хосты станут доступны, доставить на них почту.

Добавьте в ваш "/etc/rc" (или "/etc/rc.local" в зависимости от системы) в то место, где он запускает демоны (для систем на основе BSD) , или в один из файлов запуска, обычно это "/etc/init.d/sendmail" ( в системах на основе System-V), следующие строчки:

if [ -f /usr/sbin/sendmail -a -f /etc/sendmail.cf ]; then

(cd /var/spool/mqueue; rm -f [lnx]f*)

/usr/sbin/sendmail -bd -q30m &

echo -n ' sendmail' /dev/console

fi

Команды "cd" и "rm" здесь даются для того, чтобы гарантировать, что все файлы-замки (lock files) были уничтожены; посторонние файлы-замки могут остаться, если система вдруг "упадет" посреди обработки сообщения. Строка, которая на самом деле запускает sendmail , имеет два флага: "-bd" заставляет его слушать на порту SMTP, а "-q30m" заставляет его производить обработку очереди каждые полчаса.

Некоторые используют более сложный сценарий запуска, удаляющий файлы qf нулевой длины, и файлы df, для которых нет ни одного файла qf. Пример сложного сценария запуска представлен на рис.1.
 
 
 

# remove zero length qf files 
for qffile in qf* 
do  if [ -r $qffile ] 
then  if [ ! -s $qffile ] 
then  echo -n " <zero: $qffile" /dev/console 
rm -f $qffile 
fi
fi
done 
# rename tf files to be qf if the qf does not exist 
for tffile in tf* 
do  qffile=`echo $tffile | sed 's/t/q/'` 
if [ -r $tffile -a ! -f $qffile ] 
then  echo -n " <recovering: $tffile" /dev/console 
mv $tffile $qffile 
else  echo -n " <extra: $tffile" /dev/console 
rm -f $tffile 
fi
done 
# remove df files with no corresponding qf files 
for dffile in df* 
do  qffile=`echo $dffile | sed 's/d/q/'` 
if [ -r $dffile -a ! -f $qffile ] 
then  echo -n " <incomplete: $dffile" /dev/console 
mv $dffile `echo $dffile | sed 's/d/D/'` 
fi
done 
# announce files that have been saved during disaster recovery
for xffile in [A-Z]f* 
do  echo -n " <panic: $xffile" /dev/console done

рис.1 - Комплексный сценарий запуска

Если ваша версия UNIX не поддерживает Berkeley TCP/IP, не включайте флаг -bd.

1.3.10. /etc/mail/helpfile

Это файл помощи, используемый командой SMTP HELP . Он должен быть скопирован из "sendmail/helpfile":

cp sendmail/helpfile /etc/mail/helpfile

Настоящий путь к этому файлу определяется опцией HelpFile в файле sendmail.cf.

1.3.11. /etc/mail/statistics Если вы хотите собирать статистику о количестве прошедшей почты, вы должны создать файл "/etc/mail/statistics":

cp /dev/null /etc/mail/statistics
chmod 666 /etc/mail/statistics

Этот файл не увеличивается. Он распечатывается программой "mailstats/mailstats.c." Настоящий путь к этому файлу определяется опцией S в файле sendmail.cf.

1.3.12. /usr/bin/mailq Если sendmail запущен как "mailq," то это будет равнозначно запуску sendmail с флагом -bp (т.е., sendmail распечатает содержание почтовой очереди, см далее). Он должен быть ссылкой на /usr/sbin/sendmail.


1. В 4.4BSD и более новых системах это обычно /usr/sbin; многие системы устанвливают его в /usr/lib. И насколько я понимаю это /usr/ucblib в System V Release 4. [назад]

2. Некоторые поставщики поставляют его так, что его владельцем является bin; это может создать дыру в безопасности, которая не связана напрямую с sendmail. Другие каталоги, которые должны иметь ограничения по владельцу и пермиссиям - это /bin, /usr/bin, /etc, /usr/etc, /lib, и /usr/lib. [назад]

3. На самом деле, пути могут различаться, от системы к системе; /etc - наиболее предпочтительный каталог. Некоторые старые системы устанавливают его в /usr/lib/sendmail.cf, и я также видел его в /usr/ucblib и /etc/mail. Если вы хотите поместить его в другое место, добавьте к передаваемым в компилятор флагам флаг D_PATH_SENDMAIL.CF=\"/file/name\". Перемещать этот файл не рекомендуется: другие программы и сценарии знают об этом местонахождении. [назад]

4. Системные библиотеки могут взаимодействовать с другими файлами; в частности, системные библиотечные подпрограммы, вызываемые sendmail, возможно могут обращаться к /etc/passwd и /etc/resolv.conf. [назад]


╘2001 Александр С. Плотников