# IFMAIL-HOWTO

## Greg Frydenlund, fidonet 1:125/710

Revision: 1.1 Date: 08/05/1997 8:05:19

    --------------------------------------------------

    Translated by Ilgiz Kalmetev (2:5011/36.6@fidonet)

    ifmail config file translated by Alexey Mahotkin, alexm@hsys.msk.ru

    --------------------------------------------------

Этот документ - попытка описать КАК под Linux настроить, установить и использовать ifmail в качестве шлюза fidonet/internet, sendmail как агент транспортировки почты (mta) и INN в качестве агента транспортировки новостей.

## Введение

За последние несколько лет `ifmail` завоевал большую популярность среди сисопов ftn-узлов, переключающихся с привычных ftn-мейлеров под DOS и программ для гейтования в Интернет на UNIX-мейлеры, выполняющие преобразование форматов ftn<->rfc. Так как число сисопов увеличивается, то находится все больше людей чувствующих себя не в своей тарелке из-за сложности освоения unix. Этот HOWTO поможет снять непонимание, показав насколько можно успешно администрировать юниксовый rfc<->ftn мейлер, используя комбинацию из `ifmail, sendmail и INN`.

## Обратная связь

Любой отзыв может значительно повысить точность данного документа. Большинство из источников этого HOWTO было придумано другими людьми, однако почти все примеры взяты из моей собственной системы. Я всегда выслушаю отклики, будь они конструктивны или нет. Но флейм будет отправлен в `/dev/null`, так как для перепалок я слишком занят. Если вы нашли этот документ полезным в качестве объяснения различных методик, то отправьте пожалуйста мне описание вашего опыта их использования.

## Отказ от ответственности

Как обычно любые ошибки, которые встретятся, являются моими собственными. Это просто введение в `ifmail` и не может рассматриваться как полное руководство по установке интернетовского сервера новостей или, более того, полной системы электронной почты. Кроме того, в мои намерения не входит объяснять все правила работы `sendmail`, потому я настойчиво рекомендую перед установкой `ifmail` сперва прочесть документацию по нему.

## Дополнительные источники

Mail-HOWTO
  для объяснений по настройке вашего сервера почты.
News-HOWTO
  для объяснений по настройке вашего сервера новостей. По INN доступен INN-FAQ, в котором не только освещается множество вопросов, но и объясняется процесс установки как в этом HOWTO.
Serial-HOWTO
  для объяснений по настройке последовательных портов.
NET-2-HOWTO
  для объяснений по настройке loopback-net
Network-Admin-Guide
  для объяснений по настройке сетевых компонент и UUCP.
UUCP-HOWTO
  для объяснений по настройке UUCP-хостов.
Управление UUCP и Usenet от O'Reilly & Associates.

## Где достать последнюю версию данного HOWTO

Если вы располагаете чересчур древней версией этого HOWTO, то можете найти новую редакцию этого документа у Greg Frydenlund (1:125/710 V32B) по имени `ifmail-howto.gz`. также он доступен по WWW на http://www.z2.fidonet.org/ifmail-tx/ifmail-howto.html или через FTP на ftp://ftp.z2.fidonet.org/pub/linux/Fido/ifmail-howto.gz

## Необходимые программы

### ifmail-2.11

`ifmail` - это транспортный пакет rfc<->ftn и ftn<->rfc, который работает совместно с агентом транспортировки новостей и агентом транспортировки почты. Для активизации он использует `getty`. Он очень похож на `uucico` из пакета `UUCP`.

На момент написания последняя версия была 2.11 .

`ifmail` разработал Eugene G. Crosser (crosser@average.org или 2:5020/230).

Последнюю версию можно найти:

- ftp://ftp.average.org/pub/ifmail
- ftp://tsx-11.mit.edu/pub/linux/sources/usr.bin/
- ftp://sunsite.unc.edu/pub/Linux/system/Fido/

или на любом зеркале sunsite.

#### -ifmail-2.10-tx8.4-

tx версии имеют некоторые улучшения, вроде поддержки charset, MIME quoted printable, лучше работают с MSGID, обрабатывают ссылки и различают некоторые PGP. Также есть возможность обрабатывать Gatebau-style преобразования MSGID<->Message-ID.

tx версию поддерживает Pablo Saratxaga (srtxg@linux.chanae.stben.be или 2:293/2219 или 4:850/1.29)

Последнюю версию можно найти: ftp://ftp.z2.fidonet.org/pub/linux/Fido/ или на большинстве зеркал sunsite.

### Агент транспортировки почты (MTA)

Здесь можно выбрать между `smail` и `sendmail V8`. `Smail` меньше и проще в настройке, но имеет несколько маленьких багов. `sendmail V8` не так-то легок в настройке, но существует его конфигурация с макропроцессором `M4`, которая настолько упрощает работу, что конфигурирование `sendmail` становится таким же простым как и `smail`. Я лично перешел с `smail` на `sendmail`.

#### -smail-

В версии 3.1.28.1 `smail` имел ошибки в `uuname-driver` (который очень важен при использовании `UUCP`). Я использовал версию 3.1.29.1. `Slackware` сейчас поставляется с `sendmail` вместе с `smail`, так что с получением `smail` проблем не должно возникнуть.

#### -sendmail V8-

В Slackware sendmail V8 версии 8.8.3, и вряд ли появятся проблемы с использованием последующих версий. Версия 8.8.3 имеет несколько дыр в защите, что имеет значение только если компьютер подключен к Интернет. Тут лучше использовать самую последнюю версию. Любой может взять свежий релиз на ftp://ftp.CS.Berkeley.EDU/ucb/src/sendmail/, но как я уже говорил он входит в дистрибутив Slackware. Это весьма важно для установки полных файлов конфигурации, которые спрятаны в файле со странным именем smailcfg.tgz.

### Агент транспортировки новостей (News-Transport-Agent)

В качестве News-Transport-Agent может использоваться `cnews` или `INN`. Чтобы помочь вам определиться с выбором, ниже описаны некоторые преимущества и недостатки этих программ друг перед другом: cnews состоит в основном из скриптов на языке `shell`, которые не так-то легко отлаживать и они медленнее запускаются. Cnews не может использовать `NNTP` (online-news-protocol). Если вы хотите использовать `NNTP` (например, для различных читалок новостей, которые работают с новостями только через `NNTP`), то вам нужен `nntpd`. Настройка `nntpd` несколько сложнее и не все возможности `NNTP` доступны. `INN` непосредственно поддерживает `NNTP`. Вот почему запускается демон (`innd`) и местные статьи новостей немедленно становятся доступными локальным пользователям. При использовании `cnews` статьи в системе новостей появляются только после определенного отрезка времени (например, через 10 минут). `cnews` некорректно работает, если в `/var/spool/news` остается менее 10 МБ дискового пространства. Я лично использую `INN-1.5.1`, поскольку `INN` в целом легче настраивать, чем `cnews`.

#### -cnews-

Старые дистрибутивы `Slackware` имели весьма урезанный `cnews` (например, не было всех man-страниц), и должны использовать как минимум пакет `cnews` из Slackware 2.1. Как альтернатива, его можно взять из полного `source-distribution` и собрать его сами. Я использовал `performance-release` от 93/02/20. Современные релизы я даже не испытывал. В этом HOWTO информация относится к более старым версиям, и я не планирую развивать это направление в будущем.

#### -INN- (InterNet News server)

Последний `Slackware` содержит как `cnews`, так и `INN`, так что каждый может выбрать. Текущий `INN` должен работать, но я предлагаю собрать и настроить программное обеспечение самим. Я использую `INN-1.5.1`.

### Программа обслуживания последовательных линий

#### -mgetty-sendfax-

`mgetty-sendfax` - это набор программ, разработанных для наблюдения, отправки и приема телефонных звонков и факсов в ОС UNIX. В отличие от `getty` или `uugetty`, которые переводят модем в режим автоответа, `mgetty` так не поступает. Когда поступает звонок, `mgetty` видит `"RING"` и приказывает модему ответить. Отвечая, модем говорит `mgetty`, какого типа звонок поступил. Документация и FAQ `mgetty-sendfax` могут быть найдены на http://www.leo.org/~doering/mgetty/index.html. Исходник можно скачать с большинства зеркал sunsite в `/system/Serial/mgetty+sendfax-0.98.tar.gz`.

#### -getty_ps-

`uugetty` обслуживает начало процесса регистрации в системе. Когда используется модем, он отслеживает поступление звонков и (обычно) выводит строку приглашения "login:" (считывает имя пользователя и передает его программе "/bin/login"). Исходники для `getty_ps` могут быть найдены на большинстве зеркал sunsite в /`system/Serial/getty_ps-2.0.7i.tar.gz`.

### Читалка новостей

Можно использовать любую читалку новостей: `tin, nn, trn, xvnews, xrn, slrn, knews,..` Если используется `cnews`, она должна работать в UUCP-режиме, то есть не только `NNTP`, иначе надо ставить `nntpd`, который достаточно сложен в изучении без документации. Я использую `tin-1.3BETA.950824-color`, потому что `tin` легок в использовании и требует минимальных усилий в настройке. В этом документе я привел несколько приемчиков при работе с `tin`.

### Читалка почты

Здесь также можно использовать свою любимую: `elm, pine, mail, xmail, xmailtool, xfmail,...` `Pine` кажется самый лучший, но вы можете предпочесть другую программу.

### Упаковщики

Некоторые упаковщики имеются в составе дистрибутивов. Если какие-то упаковщики отсутствуют, то их можно взять с серверов вроде `ftp://sunsite.unc.edu/pub/Linux/utils/compress/` :

-ZIP-
  unzip51 может распаковывать еще и новый ZIP-формат. Есть новый zip, который может упаковывать в новом формате.
-ARJ-
  unarj241 распаковывает ARJ-архивы, но под Linux упаковщика нет.
-LZH-
  lha существует и под Linux.
-ARC-
  старый, но очень важный упаковщик, например нодлисты могут паковаться им. Имеет как минимум один порт под Linux.
-RAR-
  unrar101 распаковывает RAR-архивы, но упаковщик я не нашел. Исходники unrar находятся здесь

### TIC-процессор

Есть несколько небольших TIC-процессоров, которые написаны на `PERL`. Особенно может быть рекомендован `tic010b.tgz` (также может быть назван как `lt010b.tgz`) от Cees de Groot (cg@bofh.lake.de, 241:10000/1512). Эта программа является частью пакета `ifmail` начиная с версии 2.8a и может быть найден в каталоге `ifmail/misc/contrib/tic`. Есть и другой TIC-процессор. UTIC - стандартный для Unix TIC процессор и написан Yar Tikhiy

### Права доступа

Права доступа на файлы должны выставляться осторожно, особенно это относится к `INN` и `sendmail`. По соображениям безопасности исполнимые файлы `INN` не должны запускаться, если в системе нет пользователя `news`. По этой причине вы должны сейчас посмотреть и убедиться, что пользователи `news` и `uucp` есть в вашем файле пользователей. Вот выдержка из моего `/etc/passwd`:

>     news:*:9:13::/usr/lib/news:/bin/bash

>     uucp:*:10:14::/var/spool/uucppublic:/bin/bash

Группы `uucp` и `news` должны существовать. Очень важно, чтобы вы вставили пользователей `news, mail, root` и `fnet` в группу `uucp`, чтобы `sendmail` мог SUID, для выполнения `ifmail` для рутинга и обработки нетмейла. Также важно добавить пользователя `uucp` в группу `news`. Вот вырезка из моего `/etc/group` :

>     news::13:news,uucp

>     uucp::14:uucp,news,mail,root,fnet

Также все файлы в spool-каталоге должны быть доступны для записи для этой группы. Мы обсудим это позже.

### Примеры конфигураций

Так как примеры, которые я привожу взяты из моей собственной системы, то они основаны на соответствующих версиях пакетов. Мои пакеты: `Linux kernel 2.0.30, ifmail-2.10-tx8.3, INN-1.5.1` и `sendmail-8.8.5`. Мой Fido-адрес `1:125/710` и мои аплинки `1:125/33` и `1:125/5109`. Вам нужно будет подкорректировать эти и подобные установки под ваши. Я использую два `crontab``а, один для пользователя `fnet` и второй для пользователя news. Прием звонков 24/7 (24 часа в сутки 7 дней в неделю) и звоню аплинкам в основном ночью. В настоящее время, у меня нет UUCP... :(

Пожалуйста, обратите внимание, что настройки могут отличаться, так как каждый дистрибутив линукс может изменяться от версии к версии. Со своей стороны я пытался оговорить такие ситуации, но вы все-таки должны проверить все ссылки на соответствие вашей системе, если примеры не работают так, как показано.

Если у вас пока нет шлюза в Internet, вы должны его поискать, поскольку `ifmail` его прекрасно поддерживает, и значит, что вы можете производить закачку по `UUCP` или как минимум связь через шлюз.

Пожалуйста будьте внимательны:
Не используйте мои адреса при тестировании вашей конфигурации.
Используйте собственные, иначе я буду получать ответы на ваши вопросы.

### Сборка & установка ifmail

Во-первых, вы захотите рапаковать ваш архив с `ifmail`. Я распаковываю его в каталог `/etc` . Вы можете поместить его в любой каталог по вашему желанию. Только помните, что надо правильно изменить все пути. Во-вторых, вы захотите подредактировать главный кофигурационный файл компиляции `/etc/ifmail/CONFIG`. Я удалил их объяснения для краткости.

### ifmail CONFIG

>     CONFIGFILE	= "/etc/ifmail/config"

>     DEBUGFILE	= "/var/log/ifmail/ifdebug"

>     LOGFILE		= "/var/log/ifmail/iflog"

>     MAILLOG		= LOG_LOCAL0

>     NEWSLOG		= LOG_LOCAL0

>     CICOLOG		= LOG_LOCAL0

>     LOCKDIR		= "/var/spool/uucp"

>     PUBDIR		= "/var/spool/uucppublic"

>     NEWSSPOOL	= "/var/spool/news"

>     GEN_OPTS    =	-DDONT_REGATE -DSLAVE_SENDS_NAK_TOO \

>     		-DRNEWSB -DRESTAMP_OLD_POSTINGS=25 -DBELEIVE_ZFIN=1 \

>     		-DKEEP_MSGID_ON_SPLIT -DIGNORE_SOFTCR -DREFERENCES_MSC96 \

>     		-DRELAXED -DFORCEINTL -DHAS_TCP -DAREAS_HACKING \

>     		-DRESTAMP_FUTURE_POSTINGS -DFSCHTML -DMACHIGAI \

>     		-DALLOW_RETURNPATH -DKEEP_TEARLINES_CLEAN

>     #		-DFORCE_REPLYTO -DTERMAIL_HACK

>     #		-DGATEBAU_MSGID -DPUDDLE_GATE -DPCBOARD_GATE -DJE

>     #		-DALLOW_CONTROL	-DIRTY_CHRS -DPARANOID -DNEED_UUCPFROM

>     # Linux:

>     OPTS        =	-DHAS_STATFS -DSTATFS_IN_VFS_H -DHAS_SETSID -DHAS_NDBM_H \

>     		-DDONT_HAVE_TM_GMTOFF -DHAS_TERMIOS_H -DASCII_LOCKFILES \

>     		-DHAS_FSYNC -DHAS_IOCTL_H -DHAS_REGEX_H \

>     		-DHAS_SYSLOG -DNEED_BSY \

>     		-DREGEX_NEED_CARET -DNEED_FORK -DNEED_TRAP \

>     		${GEN_OPTS}

>     BINDIR		= /usr/lib/ifmail

>     OWNER		= fnet

>     GROUP		= uucp

>     MODE		= 0711

>     SMODE		= 4710

Возможно вы захотите изменить пути на более подходящие для вашей системы. Например вы можете назместить журнал с отладочными сообщениями в каталог `/tmp` и журнал работы в `/var/log/ifmail`, который вы тоже можете изменить, это в действительности неважно, поскольку каждый логфайл `ifmail 2.3` также обрабатывается `syslogd`, (мы вернемся к этому позже). `Slackware 3.1` предлагает создавать `lockfile` в `/var/spool/uucp`, что может привести к конфликтам с запущенным `getty` на этом порту. В этом случае можно изменить `/LOCKDIR/` на `/var/spool/uucppublic`. Теперь мы готовы к компиляции. Введите в командной строке:

>     make all

и при отсутствии ошибок

>     make install

При компиляции `ifmail` возможны проблемы. Некоторые дистрибутивы `Slackware` могут иметь `ndbm.h` файл, который может привести к ошибкам компиляции. Чтобы решить эту проблему, отредактируйте файл `/usr/include/ndbm.h` . Поместите эти две строки самыми первыми в файле.

>     #ifndef _NDBM_H_

>     #define _NDBM_H_  1

Затем самой последней строкой добавьте:

>     #endif  /* _NDBM_H_ */

В некоторых дистрибутивах `linux` может отсутствовать файл `ndbm.h`. Вы всегда можете найти их в исходниках пакета `db-devel-1.85-10.ELF.tar.gz` Другая проблема может быть связана с файлом `trap.c` и ядрами ветки 2.1 . Их можно исправить так. Во-первых, удалите `-DNEED_TRAP` (this is not advised) или, во-вторых, добавьте `-DPRE_21_LINUX` в список опций компиляции. Также есть FAQ в `/etc/ifmail/misc`, который вы можете изучить для решения возникших проблем. Сейчас мы установим файл `config` от `ifcico`. Вы найдете его пример в `/etc/ifmail/misc/config`. Скопирйте его в `/etc/ifmail` или в то место, которое было указано в `/etc/ifmail/CONFIG` и подредактируйте его в соответствии со значениями вашей системы.

### Файл config пакета ifmail

>     #

>     #            ФАЙЛ КОHФИГУРАЦИИ IFMAIL

>     #

>     # Copyright (C) Alexey Mahotkin  1999

>     #

>     # $Id: ifmail.config-ru,v 1.1 1999/05/03 16:38:49 alexm Exp $

>     #

>     # Это основной файл конфигурации, используемый программами пакета

>     # ifmail.  По умолчанию он находится в /etc/ifmail/config, но его имя

>     # можно переопределить для каждой программы, используя ключ командной

>     # строки ``-I''.

>     # Этот файл конфигурации ориентирован на версию ifmail 2.14 с

>     # наложенными патчами os5 от Сергея Оськина (ftp://oskin.macomnet.ru).

>     # В дальнейшем я собираюсь четко обозначить, какие параметры можно

>     # использовать только с этими патчами, а какие существуют и в

>     # оригинальном ifmail (http://www.average.org/ifmail/).

>     # Формат этого файла очень прост:

>     #

>     #   <параметр> <значение>

>     #

>     # Регистр букв в параметрах игнорируется.

>     # Пустые строки, строки, содержащие только пробелы, а также строки,

>     # начинающиеся с символа ``#'', игнорируются.

>     # В файл конфигурации можно включить другой файл с помощью директивы

>     # ``include'', например:

>     #

>     # include /etc/ifmail/passwd

>     #

>     ###       Информация о станции

>     #      ====================

>     #

>     # Основной адрес станции

>     #

>     Address 2:5020/433@fidonet

>     #

>     # Дополнительные адреса (AKA)

>     #

>     Address 2:5020/286.16@fidonet

>     #

>     # Здесь описываются данные, передающиеся во время EMSI-сессии.  В

>     # настоящий момент здесь нельзя использовать символы ``]' и ``}'',

>     # поэтому избегайте их.

>     #

>     # Hазвание станции

>     #

>     Name those who go below

>     #

>     # Местонахождение станции

>     #

>     Location Moscow, Russia

>     #

>     # Имя системного оператора

>     #

>     SysOp Alexey Mahotkin

>     #

>     # Телефон станции

>     #

>     Phone +7-095-SEE-NODELIST

>     #

>     # Скорость модема

>     #

>     Speed 9600

>     #

>     # Флаги из нодлиста

>     #

>     Flags XA,V32B,V42B

>     #

>     ###           Журналирование

>     #          ==============

>     #

>     #

>     # ВHИМАHИЕ:  в настоящий момент сессионные пароли записываются в

>     # журнальные файлы, поэтому убедитесь, что эти файлы недоступны для

>     # чтения всеми, кроме владельца.

>     #

>     #

>     # Основной журнальный файл

>     #

>     LogFile /var/log/ifmail/iflog

>     #

>     # Отладочный журнальный файл

>     #

>     DebugFile /var/log/ifmail/ifdebug

>     #

>     # Количество отладочной информации.  Это значение по умолчанию можно

>     # переопределить для каждой конкретной программы с помощью ключа

>     # командной строки ``-x''.

>     #

>     Verbose 0

>     #

>     ###          Пути к программам и файлам

>     #           ==========================

>     #

>     #

>     ##       Каталоги с входящими и выходящими файлами

>     #        -----------------------------------------

>     #

>     # Общий каталог для принятых почтовых пакетов и файлов

>     #

>     Inbound /var/spool/ifmail/inb

>     #

>     # Каталог для почтовых пакетов и файлов, принятых от узлов, с которыми

>     # у нас запароленные сессии

>     #

>     ProtInbound /var/spool/ifmail/inb.prot

>     #

>     # Каталог для почтовых пакетов и файлов, принятых от узлов,

>     # присутствующих в наших нодлистах

>     #

>     ListInbound /var/spool/ifmail/inb.list

>     #

>     # Основной каталог для исходящих почтовых пакетов и файлов блокировок.

>     # Пакеты для узлов из других зон будут помещаться в ``outb.'', а

>     # пакеты для узлов из других доменов -- в ``.''.

>     #

>     Outbound /var/spool/ifmail/outb

>     #

>     # Замена путей для мэйлеров, работающих под DOS.  Если вы укажете этот

>     # параметр, то исходящие почтовые пакеты будут помещаться в Outbound,

>     # но пути к ним в .?LO-файлах будут записываться как указано в этом

>     # параметре.

>     #

>     DosOutbound h:\spool\ifmail\outb

>     #

>     ##          Файловые запросы (FREQ'и)

>     #           -------------------------

>     #

>     # Внешний обработчик файловых запросов.  Если этот параметр не указан,

>     # используются параметры ``public'' и ``magicname''.

>     #

>     Ext_RP /usr/lib/ifmail/ifextrp

>     #

>     # Каталог с файлами, доступными для файлового запроса.

>     #

>     Public /var/spool/uucppublic

>     #

>     # Каталог с исполняемыми файлами для обработки "волшебных" файловых

>     # запросов.  Если в этом каталоге есть запрошенный файл и его можно

>     # выполнить, то он выполняется, и то, что он напечатал на стандартном

>     # выходе, отсылается запрашивавшей системе.  Если он неисполняемый, то

>     # в нем должен находиться список файлов, которые отсылаются в ответ на

>     # файловый запрос.

>     Magic /var/lib/ifmail/magic

>     #

>     ##            Hодлисты

>     #             --------

>     #

>     # Основной нодлист.  Указанное имя при необходимости дополняется

>     # номером .NNN.

>     #

>     Nodelist /var/spool/ifmail/nl.d/nodelist

>     #

>     # Дополнительные нодлисты и нодлисты других зон и доменов.

>     # Предполагается, что они находятся в том же каталоге, что и основной

>     # нодлист.  Формат таков:

>     #

>     #  Nodelist <имя-нодлиста> <стартовый-адрес>

>     #

>     Nodelist pnt5020.ndl  2:5020/0@fidonet

>     Nodelist chatlist  100:0/0@chateaunet

>     Nodelist private.ndl  2:5020/0@fidonet

>     #

>     ##      Преобразование имен

>     #       -------------------

>     #

>     # Файл системных алиасов.  Его формат:

>     #

>     # <имя-пользователя>

>     #

>     SysAlias /var/spool/ifmail/sysalias

>     #

>     # Доменное имя, добавляемое к имени пользователя при использовании

>     # системных алиасов.

>     #

>     MyFQDN pccross.msk.ru

>     #

>     # Если этот параметр указан (HЕ РЕКОМЕHДУЕТСЯ!), то в сообщениях,

>     # адресованных соответствующему пользователю, будут искаться заголовки

>     # RFC.  Если этот параметр не указан, то RFC-заголовки ищутся в начале

>     # всех писем.

>     #

>     # MagicName UUCP

>     #

>     # Преобразование доменов.  Формат:

>     #

>     # DomTrans

>     #

>     # При преобразовании происходит текстуальная замена первого

>     # совпадающего FTN-домена на RFC-домен.  Рекомендуется указывать

>     # начальную точку в имени домена.  Если не указано ни одного параметра

>     # DomTrans, то происходит подстановка по умолчанию ``fidonet'' в

>     # ``fidonet.org''.  Если указан хотя бы один DomTrans, то следует явно

>     # указать необходимость такой подстановки.

>     #

>     DomTrans .n5020.z2.fidonet .fido.pccross.msk.su

>     DomTrans .n5030.z2.fidonet .fido.tctube.spb.su

>     DomTrans .fidonet     .fidonet.org

>     #

>     # Автоматически обновляемая база соответствий имен пользователей и их

>     # адресов.  Если этот параметр не указан или база недоступна, то в

>     # FTN-письмах генерируются кладжи @REPLYADDR и @REPLYTO.

>     #

>     Database /var/spool/ifmail/ifdbm

>     #

>     ##        Прочее

>     #         ------

>     #

>     # Файл, в котором хранятся уникальные ID'ы

>     #

>     Sequencer /var/spool/ifmail/seq

>     #

>     # Файл, в котором хранится описание соответствие имен эхо-конференций

>     # и ньюсгрупп. Формат таков:

>     #

>     # <ЭХО-КОHФЕРЕHЦИЯ> <ньюсгруппа> <область-распространения>

>     #

>     # <область-распространения> обычно "fido7"

>     #

>     Areas /etc/ifmail/Areas

>     #

>     # Таблицы преобразования кодировок символов.  Формат таблиц таков:

>     #

>     # <исходный-символ> <пробел> <выходной-символ>

>     #

>     # Символы могут быть указаны следующим образом:

>     # * символ в одиночных кавычках ('a');

>     # * десятичный номер символа (123);

>     # * восьмиричный номер символа (0123);

>     # * шестнадцатиричный номер символа (0x7f).

>     #

>     # Строки, начинающиеся с символа ``#'' являются комментариями и

>     # игнорируются.

>     #

>     #

>     # Преобразование из RFC-сообщений в FTN-сообщения

>     #

>     OutTab /usr/lib/ifmail/outkoi8alt

>     #

>     # Преобразование из FTN-сообщений в RFC-сообщения

>     #

>     InTab /usr/lib/ifmail/outaltkoi8

>     #

>     ##      Местонахождение различных программ

>     #       ----------------------------------

>     #

>     # Транспорт для отсылания почтовых сообщений.  ``$F'' заменяется на

>     # адрес из поля ``From:'', ``$T'' --- на адрес из поля ``To:''.

>     #

>     sendmail /usr/lib/sendmail -f $F $T

>     #

>     # Программа для постинга статей в ньюсгруппы.

>     #

>     rnews /usr/local/news/bin/rnews

>     #

>     # Программа iftoss, используемая ifunpack

>     #

>     iftoss /usr/lib/ifmail/iftoss

>     #

>     # Программы для распаковки почтовых пакетов, используемые ifunpack.

>     # ``$F'' заменяется на имя почтового пакета.

>     #

>     unzip  /usr/bin/unzip -ojq $F

>     unarj  /usr/bin/unarj e $F

>     unarc  /usr/bin/unpack $F

>     unzoo  /usr/bin/zoo -extract $F

>     #

>     # Программа для упаковки почтового пакета, используемая ifpack.

>     # ``$F'' заменяется на имя почтового пакета, ``$P'' --- на список имен

>     # .PKT-файлов.

>     #

>     packer /usr/bin/zip $F $P

>     #

>     ###        Обработка сообщений

>     #       ===================

>     #

>     # Префиксы имен ньюсгрупп, статьи в которые не следует передавать в

>     # FIDO.

>     #

>     BadGroup relcom.ads.

>     BadGroup relcom.commerce.

>     #

>     # Максимально допустимое количество групп в поле ``Newsgroups:''.

>     # Если статья помещена одновременно в несколько групп, и их количество

>     # превышает максимально допустимое, то статья не попадет в FIDO.  Если

>     # этот параметр не указан или равен нулю, то предела не существует.

>     #

>     MaxGroups 5

>     #

>     # Каким символом заменять пробел между именем и фамилией пользователя.

>     # По умолчанию ``.''.

>     #

>     Dots _

>     #

>     # Помещать ли в FTN-письма поля ``Received:''.  Значение по умолчанию

>     # ``Yes'', рекомендуется ``No''.

>     #

>     Received No

>     #

>     # Максимальный размер пакованного пакета, в байтах.  Если этот размер

>     # превышен, то ifmail создаст следующий пакет.

>     #

>     MaxFSize 300000

>     #

>     # Максимальный размер непакованного пакета, в байтах.

>     # *.?ut files are NOT created if nonzero specified, you must run ifpack

>     # to make packets go out. (XXX) (что это означает?)

>     MaxPSize 30000

>     #

>     # Максимальный размер сообщения, конвертируемого из Internet в FIDO, в

>     # байтах.  Если этот размер превышен, ifmail разбивает сообщение на

>     # несколько частей.  По умолчанию 12300 байт.

>     #

>     MaxMSize 12300

>     #

>     # Типы пакетов (флаворы), не подпадающие под ограничение на размер

>     # пакета.  Такие пакеты также не будут паковаться ifpack'ом, а сразу

>     # помещаются в готовые к отправке пакеты.  Флавор ``m'' означает "весь

>     # нетмейл".

>     #

>     NonPacked cm

>     #

>     # Файл с журналом новостей в формате cnews (XXX: какой файл в INN

>     # можно использовать вместо него?)

>     #

>     NewsLog /usr/lib/new/log

>     #

>     # Временная база данных SEEN-BY'ев.

>     #

>     MsgIDBM /tmp/ifmsids

>     #

>     ###        Опции управления модемом

>     #          ========================

>     # С этой строки, значения могут быть указаные логическими выражениями в

>     # round brackets. Допустимые операторы: '!', '&', '|', 'xor'.

>     # Возможны элементы:

>     # - Флаги нодлиста (наприемр, "CM", "MNP", "V32" итд.)

>     # - speed <оператор> <число>

>     #         где <оператор> - это '=', '!=', '<', '>', '<=', '>='

>     # - address <маска>

>     #         где <маска> - это (возможно неполный) фидоадрес, например, "5020/*"

>     # - time <интервал>[,<интервал>,...]

>     #         где <интервал> - запись с указанием дней и времени, например,

>     #         Wk2000-0900,Sat1800-0000,Sun

>     # - phone <префикс>

>     #         например, "phone 7-095-"

>     # Параметры дозвонки

>     # Параметры "ModemPort", "ModemReset", "ModemDial", "ModemHangup".

>     # Если параметр из этого списка определяется несколько раз, то используется

>     # первое подходящее значение

>     # Параметры "PhoneTrans", "ModemConnect", "ModemError".

>     # Если параметр из этого списка определяется несколько раз, то используются

>     # все эти значения.

>     # В отправляемых и ожидаемых строках можно делать следующие подстановки:

>     # \\	символ '\'

>     # \r	возврат каретки (0x0d)

>     # \n	новая строка (0x0a)

>     # \t	табуляция (0x09)

>     # \b	забой (0x08)

>     # \s	пробел (0x20)

>     # \NNN	(где N - восьмеричная цифра) - символ с восьмеричным кодом NNN

>     # \d	задержка 1 секунда (только для отправляемых строк)

>     # \p	пауза 1/4 секунды (только для отправляемых строк)

>     # \T	преобразовывать телефонный номер (только для отправляемых строк)

>     # \D	не преобразовывать телефонный номер (только для отправляемых строк)

>     # ModemPort представляет собой список портов, отделенных пробелами, с указанием

>     # возможной скорости соединения (через двоеточие); если скорость указана с

>     # символом 'L' впереди, то это скорость залочки, иначе будет установлена

>     # максимальная скорость, а настоящая скорость будет взята из нодлиста. Если

>     # скоротсь не указана (или равна нулю), то принимается скорость предыдущего

>     # порта.

>     #ModemPort	(time Any0000-0900,Sat,Sun) ttyS0

>     ModemPort	ttyS0:L38400

>     # Модем занимает порт /dev/ttyS0, FIFO залочен на 38400 (без FIFO он должен

>     # быть залочен на 19200). Я пишу ttyS1, а не cua1, поскольку использую

>     # mgetty. Почему мне приходится это делать объяснено в документации к

>     # mgetty+sendfax от Gert Doering.

>     #для uugetty используется эта опция

>     #modemPort	cua1:38400

>     #для mgetty используется эта опция

>     ModemPort	ttyS1

>     # Строки PhoneTrans - это правила преобразования первых цифр телефонного номера

>     # для звонков по локальным или междугородним номерам. В примере ниже код

>     # страны 7, а городской код 095. Для номеров, начинающихся с "7-095-"

>     # удаляется и номер становится семизначным. Для номеров, начинающихся с "7-",

>     # но не с "7-095-", удаляется только "7-" и номер становится междугородним

>     # с префиксом "8W". Для всех прочих номеров осуществляется международный звонок

>     # с добавлением префикса "8W10" к 11-значному номеру. Синтаксис:

>     # "PhoneTrans <что-удалять> / <что-подставялть-взамен>"

>     PhoneTrans	7-095	/

>     PhoneTrans	7-	/ 8W

>     PhoneTrans		/ 8W10

>     # Команда сброса модема

>     ModemReset	ATZ\r

>     # Команда, с помощью которой модем звонит

>     ModemDial	ATDP\T\r

>     # Команда, заставляющая модем положить трубку

>     ModemHangup	ATZ\r

>     # Положительный ответ модема в ответ на выполнение команды

>     ModemOK		OK

>     # Вместо одной строки "CONNECT" я пишу несколько "Connect"-строк для корректного

>     # указания скорости соединенния в журнальном файле.

>     ModemConnect    CONNECT\s76800\r

>     ModemConnect    CONNECT\s57600\r

>     ModemConnect    CONNECT\s38400\r

>     ModemConnect    CONNECT\s19200\r

>     ModemConnect    CONNECT\s16800\r

>     ModemConnect    CONNECT\s14400\r

>     ModemConnect    CONNECT\s12000\r

>     ModemConnect    CONNECT\s1200\r

>     ModemConnect    CONNECT\s9600\r

>     ModemConnect    CONNECT\s7200\r

>     ModemConnect    CONNECT\s4800\r

>     ModemConnect    CONNECT\s2400\r

>     ModemConnect    CONNECT\r

>     ModemError	BUSY

>     ModemError	NO\sCARRIER

>     ModemError	NO\sDIAL

>     ModemError	RING\r

>     ModemError	ERROR

>     # Время ожидания строк "OK" и "CONNECT". Нельзя применять логические выражения

>     TimeoutReset	3

>     TimeoutConnect	30

>     # Задержка в секундах перед каждым звонком в "автоматическом" режиме.

>     # Игнорируется если список адресов задан явно в командной строке

>     DialDelay       0

>     # Опции дозвонки (зависимости от времени, адреса и флагов нодлиста).

>     # Применяются в порядке их указания. Допустимые опции "[No]Call", "[No]Hold",

>     # "[No]PUA", "[No]EMSI", "[No]WaZOO", "[No]Freqs", "[No]Zmodem", "[No]ZedZap",

>     # "[No]Janus", "[No]Hydra". Здесь, WaZOO установливается для рукопожатия

>     # YooHoo/2U2, но не для схемы передачи. Рукопожатие FTS-0001 и схема DietIFNA

>     # не могут быть запрещены (поскольку они заложены в стандарте). Опция "Hold"

>     # действительно замораживает "замороженные" пакеты и файлы: не отправляет их,

>     # если наша система инициировала соединение, "NoHold" отправит "замороженные"

>     # пакеты, если наша система инициировала соединение. "NoPUA" устанавливается

>     # для "No PickUp All", т.е. PUP ("Pick Up Primary").  NoCall запрещает

>     # исходящие звонки. Этот флаг не имеет значения, если адреса заданы явно в

>     # командной строке. Опции по умолчанию - "все разрешено"

>     #options	((!CM) & time Any0700-0200) Nocall

>     #options	(time Any0900-2100 & ! address 2:5020/*) Nocall

>     options	(time Any0001-2359) Call NoHold PUA EMSI WaZOO Zmodem ZedZap TCP

### Файл Areas пакета ifmail

Сейчас вам нужно определить ваши области фидошных конференций. Пример имеется в `/etc/ifmail/misc/areas`. Скопируйте его в `/etc/ifmail` или туда, куда вы указали в `/etc/ifmail/CONFIG`, и отредактируйте в соответствии с набором выписываемых вами эхоконференций.

>     # Преобразование areatags в группы новостей (with distribution) и наоборот.

>     # Все AREA tags должны быть в верхнем регистре (без исключения).

>     # AREA			newsgroup		distribution

>     C_ECHO			     fido.C_ECHO		fido

>     C_PLUSPLUS		  fido.C_PLUSPLUS	fido

>     NET_DEV			    fido.FIDONET_DEV	fido

>     FTP_FIDO		    fido.FTP_FIDO		fido

>     FTSC_PUBLIC		 fido.FTSC_PUBLIC	fido

>     LINUX			      fido.LINUX		fido

>     NET_125			    fido.NET_125		fido

>     OFFLINE			    fido.OFFLINE		fido

>     PASCAL			     fido.PASCAL		fido

>     PERL			       fido.PERL		fido

>     UFGATE			     fido.UFGATE		fido

>     UNIX			       fido.UNIX		fido

>     HAWAII			     surf.HAWAII		surf

>     SO.CALIF		    surf.SO.CALIF		surf

>     C_PROG			     prog.C_PROG		prog

>     CPLUSPLUS		   prog.CPLUSPLUS	prog

>     PASCALPROG		  prog.PASCALPROG	prog

>     DELPHI			     prog.DELPHI		prog

>     # Строка со '*' в поле "AREA" определяет группу новостей по умолчанию

>     # и distribution.  '*' в поле "newsgroup", если есть, расширяется до

>     # первоначального areatag (с приведением букв к нижнему регистру).

>     *			junk.*			local

>     # Строка со '*' в поле "newsgroup" определяет areatag по умолчанию.

>     # '*' в поле "AREA", если есть, расширяется до первоначальной группы новостей

>     # (с приведением букв к верхнему регистру).  (Distribution is insignificant).

>     BAD.*			*

>     # Вы можете указать строку с отдельной звездочкой в поле "AREA" и

>     # с отдельной звездочкой в поле "newsgroup". Это приведет к взаимообратным

>     # преобразованиям - areatag станет newsgroup с буквами в верхнем регистре,

>     # а группа новостей станет areatag с буквами в верхнем регистре.

>     # Такая фишка не рекомендуется.

>     # *			*			world

### Журналы регистрации ifmail

Для получения log-сообщений от `ifcico` вы должны правильно настроить `syslogd`. Поэтому начинаем редактировать `/etc/syslog.config`. Сообщения `ifcico` будут поступать как `local0.*`. Для этого добавим строку:

>     local0.*        /var/log/ifmail

(Внимание: использовать пробелы для разделения параметров НЕЛЬЗЯ, только ТАБУЛЯЦИЯ)

Таким образом все log-сообщения от ifcico пойдут в /var/log/ifmail. Если используется contemporary версия syslogd, то вы должны ввести :

>     killall -1 syslogd

Это должно информировать демона, что нужно перечитать файлы конфигурации, и рестартовать.

Сейчас создаем подкаталоги `ifmail` в `/var/spool/ifmail`. Помимо стандартного /outbound/ для Fido вы должны будете создать каталоги для других сетей. Владельцем этих каталогов должен быть fnet.uucp, а права доступа 775. ifcico может создать каталоги и при отсутствии сетей, но вы должны будете сменить права доступа самостоятельно.

Вам также требуется добавить пользователя `fnet` в ваш `/etc/passwd` . Пользователь `fnet` используется как владелец всех исполняемых файлов ifmail. Позже вы увидите, что это будет очень удобно, когда настраивается `crontab` для создаются почтовые запросы аплинкам, или для периодической обработки нодлиста и распаки входных пакетов с эхопочтой. Вот выдержка из моего `/etc/passwd`:

>     fnet:*:15:14::/etc/ifmail:/bin/bash

или

>     fnet:*:15:14::/etc/ifmail:

Постоянно идут дебаты, по поводу необходимости иметь шелл. По причинам безопасности конечно, вам не стоит предоставлять возможность доступа к системе и использовать `ifpoll` для звонка на узлы вне вашей зоны.

Однако, если у вас нет пользователей или ваша пользователи надежные люди, то ничего плохого в предоставлении шелла нет. Вы можете захотеть время от времени запускать `ifpoll` вручную через `su`. Я думаю вам нужно определиться в этом вопросе самим с учетом особенностей вашей системы.

### Компилятор нодлиста

Все нодлисты, как указано в config-файле, должны лежать в каталоге `/var/spool/ifmail/nodelist`. Вызываем `ifindex`, который создаст `index.dir` и `index.pag`, которые содержат откомпилированный ноделист. Поскольку `ifindex` не слишком быстр, вы можете перед компиляцией урезать нодлист до нужных вам размеров (напрмер, ограничиться только вашей зоной). Вы можете спользовать этот скрипт. Поправьте в нем значения в соответствии с вашими.

>     #!/bin/sh

>     #

>     # /var/spool/ifmail/nodelist/strip.nodelist

>     #

>     if [ ! $1 ]

>     then

>         echo Syntax Error!

>         echo Start with $0 xxx, whereas xxx is the number of the latest

>         echo nodelist.

>         exit

>     fi

>     NODELIST=NODELIST.$1

>     if [ ! -s $NODELIST ]

>     then

>         echo $NODELIST is not a correct nodelist

>         exit

>     fi

>     NLSHORT=nl_short.$1

>     if [ -s $NLSHORT ]

>     then

>         echo $NLSHORT already exists, moving to $NLSHORT.bak

>         mv -f $NLSHORT $NLSHORT.bak

>     fi

>     head -n 2 $NODELIST >> $NLSHORT

>     grep ',1-[0-9][0-9][0-9]-\|^Zone,1' $NODELIST >> $NLSHORT

>     echo Done.

Вы можете запускать скрипт так: `strip.nodelist xxx`, гдеe `xxx` - номер последнего нодлиста. Скрипт генерирует `nl_short.xxx` из `nodelist.xxx`.

А что с `diffs`? Начиная с `ifmail-2.6` имеется программа `nlpatch`, включенная в состав пакета, которая разбирается со старыми нодлистами и применяет последние `diff`, например:

>     nlpatch NODELIST.123 NODEDIFF.130

создаст 130-й нодлист.

Для обработки еженедельных `nodediff``ов я использую скрипт `/etc/ifmail/misc/getnodelist`. Я скопировал его в мой `/usr/lib/ifmail`, установив владельца `fnet.uucp` с правами доступа 764, и вызываю раз в неделю из `crontab` от пользователя `fnet`. Вы можете подправить скрипт под вашу систему.

>     #!/bin/sh

>     # Check и see if we got a fresh nodediff, unpack и apply it и rebuild

>     # the index.

>     INB=/var/spool/ifmail/inbound

>     NLDIR=/var/spool/ifmail/nodelist

>     UNPACKER="/usr/bin/unzip -o"

>     PATCHER=/usr/lib/ifmail/nlpatch

>     INDEXER=/usr/lib/ifmail/ifindex

>     NDMASK='nodediff*'

>     NLMASK='NODELIST*'

>     if cd ${INB} ; then

>     	DIFF=`ls ${NDMASK}`

>     	if [ ! -f ${NDMASK} ] ; then

>     		echo No diff file

>     		exit 0

>     	fi

>     else

>     	echo Cannot chdir to ${INB}

>     	exit 1

>     fi

>     echo Processing ${DIFF}

>     if cd ${NLDIR} ; then

>     	if cp ${INB}/${DIFF} . ; then

>     		rm -f ${INB}/${DIFF}

>     	else

>     		echo Cannot copy ${INB}/${DIFF} to ${NLDIR}

>     		exit 1

>     	fi

>     else

>     	echo Cannot chdir to ${NLDIR}

>     	exit 1

>     fi

>     if ${UNPACKER} ${DIFF} ; then

>     	rm -f ${DIFF}

>     	DIFF=`ls ${NDMASK}`

>     else

>     	echo Could not unpack ${DIFF}

>     	exit 1

>     fi

>     if [ ! -f ${DIFF} ] ; then

>     	echo Nodediff was unpacked to unknown name

>     	exit 1

>     fi

>     NLIST=`ls ${NLMASK}`

>     if [ ! -f ${NLIST} ] ; then

>     	echo Nodediff was unpacked to unknown name

>     	exit 1

>     fi

>     echo applying ${DIFF} to ${NLIST}

>     if ${PATCHER} ${NLIST} ${DIFF} ; then

>     	rm -f ${NLIST} ${DIFF}

>     	exec ${INDEXER}

>     else

>     	echo Error compiling new nodelist

>     	exit 1

>     fi

### Пакеты ifmail

`ifmail` создает пакеты по принципу `Binkly`, который использует те же преобразования имен как и `Binkly`. Например, вот три расширения имен пакетов используемые `ifmail` и `Binkly`.

>     .hlo         =   pkt заморожен

>     .flo         =   pkt готов к отправке

>     .clo         =   pkt is crash

`ifmail` сохранит эти пакеты в подкаталогах, которые он создает используя сочетание ваших номеров сети/узла и номеров сети/узла адреса назначения.

### Скачивание почты и распаковка

Для дозвонки до линков я использую скрипт `/etc/ifmail/misc/contrib/ifpoll`, в который внес несколько маленьких изменений. Этот скрипт я вызываю каждую ночь из `crontab` пользователя `fnet` для прозвонки к моему хабу.

>     #!/bin/sh

>     # ver 0.7

>     # ifpoll, скачать почту с узла моего босса или узла, заданного в командной

>     # строке первым аргументом

>     #

>     # Я запускаю этот скрипт каждый день через crond, но вы можете запускать его

>     # ручками :) Запускайте его от имени владельца ifcico

>     # rasca, berlin 1993 (Rasca Gmelch, 2:2410/305.4)

>     #

>     # где находятся "ifcico" и "ifpack"

>     FIDOPATH=/usr/lib/ifmail

>     # журнал ifcico

>     IFLOG=/var/log/messages

>     # владелец "ifcico"

>     IFCICO_OWNER=fnet

>     # sysop of fido stuff

>     IFCICO_SYSOP=postmaster

>     # адрес моего босса (адрес по умолчанию)

>     NODE="f33.n125.z1.fidonet.org"

>     # число попыток дозвона до NODE

>     MaxTry=2

>     # задержка между исходящими звонками

>     DELAY=10

>     # куда выдавать содержимое журнала - файл или tty/console

>     INFO_TTY=/dev/tty1

>     echo "`date \"+%b %d %T\"` ifpoll[$$]: starting"

>     # напомнит мне, что не надо запускать от root..

>     #

>     if [ `whoami` != "$IFCICO_OWNER" ]; then

>     	echo "*** run $0 as the owner of ifcico ***"

>     	echo "`date \"+%b %d %T\"` ifpoll[$$]: wrong uid (rc 2)"

>     	exit 2

>     fi

>     # argv[1] - возможный узел для звонка

>     #

>     if [ "$1" != "" ]; then

>     	if [ "$1" = "-?" ] || [ "$1" = "-h" ]; then

>     		echo "usage: ifpoll []"

>     		exit 3

>     	else

>     		NODE=$1

>     	fi

>     fi

>     # давайте запакуем пакеты ...

>     #

>     $FIDOPATH/ifpack -f

>     # повторять пока ifcico не соединиться или MaxTry не достигнет указанной

>     # величины

>     i=1; errlv=1

>     while let 'i <= MaxTry' && let 'errlv != 0'

>     do

>     	echo -n "`date \"+%b %d %T\"` ifpoll[$$]: $i. try ($NODE) "

>     	#

>     	# запуск ifcico в режиме мастера ..

>     	#

>     	chmod 664 /dev/ttyS1

>             $FIDOPATH/ifcico -r1 $NODE

>     	errlv=$?

>     	if [ $errlv != "0" ]; then

>     		echo "failed :( "

>     		if [ $i != $MaxTry ]; then

>     			sleep $DELAY

>     		fi

>     		let i=i+1

>     	else

>     		echo "ok :)"

>     	fi

>     done

>     # если прозвонились, то распаковываем..

>     #

>     if [ $errlv = "0" ]; then

>     	echo "`date \"+%b %d %T\"` ifpoll[$$]: unpacking.. "

>     	$FIDOPATH/ifunpack

>     	# добавьте здесь несколько строк для обработки tic-файлов или

>     	# пришедших файллистов или еще чего-нибудь..

>     else

>             # отправить мне почту о неудачном звонке

>             echo "`date \"+%b %d %T\"` ifpoll[$$]: Failed :("

>             echo "`date \"+%b %d %T\"` ifpoll[$$]: Sending message :("

>     	# Я изменил это, поскольку mailx - стандарт для большинства систем

>     	tail --lines=20 $IFLOG | mailx -s "ifpoll: failed" $IFCICO_SYSOP > /dev/null

>     fi

>     echo "`date \"+%b %d %T\"` ifpoll[$$]: finished (rc $errlv)"

>     # вернуть код ошибки ifcico

>     exit $errlv

Если запустить этот скрипт без параметров, он автоматически начнет звонить моему аплинку, или вы можете указать параметром узел, на который хотите позвонить (в pfnz-формате, например, `ifpoll f26.n9996.z96`). Он вначале запакует весь netmail/echomail и позвонит на узел. Затем, после успешного соединения, попытается распаковать прибывшие пакеты. При возникновении сложностей с прозвоном пользователь `fnet` отправит 20 строк в файл `/var/log/syslog`, так что вы можете определить причину проблемы (напр., сигнал `BUSY`, отсутствие ответа, и т.д.). Конечно, скрипт надо отредактировать в соответствии с вашей системой.

Для распаковки пришедшей почты я запускаю вот этот скрипт, называемый `ifmailcheck` в `crontab` как пользователь `fnet`. Он ищет в `/var/spool/ifmail/inb` ftn эхопакеты и, если они есть, вызывает `ifunpack`.

>     #!/bin/sh

>     # ifmailcheck, I call this script every hour

>     #

>     if (test -r /var/spool/ifmail/inbound/*.pkt)

>        then

>        /usr/lib/ifmail/ifunpack

>     fi

### ifmail crontab

Здесь crontab я использую как пользователь `fnet`. Вы можете настроить его под вашу систему. Если вы плохо понимаете синтаксис `crontab`, то почитайте '`man crontab`' для подробных объяснений как это все делается, создайте и отредактируйте crontab.

>     SHELL=/bin/sh

>     MAILTO=fnet

>     #=========================================================================

>     # ifmail crontab:

>     #=========================================================================

>     #

>     # Звонить моему аплинку в 4:30 утра для ежедневного обмена почтой

>     #

>     30 4 * * *		/usr/lib/ifmail/ifpoll

>     #

>     # Каждый час проверять, не пришли ли пакеты

>     #

>     59 * * * *		/usr/lib/ifmail/ifmailcheck

>     #

>     # Утром в понедельник поискать новый nodediff и обработать его

>     #

>     30 2 * * mon 		/usr/lib/ifmail/getnodelist

Дополнительная информация по `ifmail` есть в `/etc/ifmail/ifcico/README`, также имеются маны.

`man ifmail`
`man iftoss`

### Настройка sendmail V8

Если `sendmail` установлен, вы должны установить набор конфигурационных файлов, которые в дистрибутиве Slackware спрятаны в архиве `smailcnf.tgz`. Вы найдете их в `/usr/src/sendmail/cf`. В этом каталоге должен быть `README` размером примерно 50KB, коотрый описывает новый метод настройки.

`sendmail` управляется через настроечный файл (размером примерно 20KB) (`/etc/sendmail.cf`), который вы вовсе не должны переписывать заново (как думают многие, кто боится `sendmail`). Вам также нужен макропроцессор `M4`, и маленький конфигурационный файл (mc-File) в `/usr/src/sendmail/cf/cf`. `M4` создаст ваш `/etc/sendmail.cf` из этого файла и несколько других настроечных файлов, которые вам не нужно изменять.

Вот объяснение, что означает "`F=8mDMFhuSC, S=51/31, R=21`" в вашем файле `sendmail.cf` в определении агента отправки в fidonet:

F секция содержит флаги, которые описывают поведение агентов доставки.

Ниже расписаны флаги:

8 = использовать 8 бит
m = позволить отправку нескольким адресатам
D = форсировать вставку даты в заголовок сообщения
M = форсировать вставку идентификационной информации в заголовок сообщения
F = форсировать вставку информации об отправителе в заголовок сообщения
h = сохранить раегистр букв имени хоста
u = сохранить раегистр букв имени пользователя

Флаг C указывает `sendmail` добавить домен адресата без one (домен отправителя. Полезно для отправки кому-либо на вашей собственной BBS); и флаг S указывает `sendmail` выполнить агента доставки (в случае `ifmail`) с использованием его собственных UID и GID, указанных выражением U= . Если U= выражение пропущено или 0, `sendmail` запускает агента доставки от `root` (заметьте: в версиях `sendmail` выше v8.7, нет выражения U= , так что флаг S указывает `sendmail` всегда запускать агента доставки от `root`). У меня не указано выражение U= , так что `ifmail` запускается от `root`, что меня вполне устраивает.

Секция S указывает набор правил записи отправителя; правило 51 для "конверта" и правило 31, используемое для заголовка. Наконец, секция R указывает набор правил записи адресата. В этом случае набор правил 21 используется для записи и заголовка, и "конверта". Посмотрите ваш файл `sendmail.cf`, чтобы найти правила и узнать, что они делают.

Между прочим, эта информация почерпнута из книги "`sendmail, 2nd edition`" Bryan Costales и Eric Allman (автора `sendmail`), выпущенной O'Reilly & Associates (`ISBN 1-56592-222-0`). Я настойчиво рекомендую ее каждому, кто работает с `sendmail`. Она очень понятно и доходчиво написана, с большим количеством примеров. Затем надо рассказать о `IFMAIL`. Поэтому вам следует создать файл `/usr/src/sendmail/cf/mailer/ftn.m4` со следующим содержимым:

>     # /usr/src/sendmail/cf/mailer/ftn.m4

>     #

>     # IFMAIL FTN mailer for sendmail V8

>     #

>     # MAILER(smtp) и MAILER(uucp) must be included!

>     #

>     PUSHDIVERT(-1)

>     ifdef(`FTN_MAILER_PATH',, `define(`FTN_MAILER_PATH', /usr/lib/ifmail/ifmail)')

>     ifdef(`FTN_MAILER_USER',, `define(`FTN_MAILER_USER', `fnet:uucp')')

>     ifdef(`FTN_MAILER_ARGS',, `define(`FTN_MAILER_ARGS', `ifmail -r $h $u')')

>     ifdef(`FTN_MAILER_FLAGS',, `define(`FTN_MAILER_FLAGS', `8mDFMuSC')')

>     ifdef(`FTN_MAX_SIZE',, `define(`FTN_MAX_SIZE', 100000)')

>     POPDIVERT

>     #####################################

>     ###    FTN Mailer specification   ###

>     #####################################

>     VERSIONID(`ftn.m4 V1.5')

>     ifdef(`_MAILER_smtp_',

>     '# ifmail mailer

>     Mftn,   P=FTN_MAILER_PATH, F=FTN_MAILER_FLAGS, S=11, R=21,

>     	_OPTIONS(`UUCP_MAILER_CHARSET',`C=', `, ')U=FTN_MAILER_USER,

>             ifdef(`_FTN_MAILER_MAX', `M=FTN_MAILER_MAX, ')A=FTN_MAILER_ARGS')

Как видите настройка `ifmail` не так сложна, и мы не совершаем чего-то из ряда вон выходящего, мы просто используем определение мейлера "`ftn`" так же, как и предопределенные мейлеры "`smtp`", "`uucp`" и т.д.

Сейчас давайте займемся настройкой mc-файла. Я назвал его `/mymachine.mc`, но имя не так важно, главное, чтобы он располагался в `/usr/src/sendmail/cf/cf`. `mymachine.mc` выглядит примерно так:

>     # /usr/src/sendmail/cf/cf/mymachine.mc

>     #

>     # sendmail V8 configuration for mymachine.mc

>     # using UUCP и IFMAIL

>     #

>     include(`../m4/cf.m4')

>     VERSIONID(`mymachine.mc V1.15')

>     OSTYPE(linux)dnl

>     define(`confUSE_ERRORS_TO', `True')dnl

>     define(`confCOPY_ERRORS_TO', `postmaster')dnl

>     define(`confMIME_FORMAT_ERRORS', `False')dnl

>     FEATURE(notsticky)dnl

>     FEATURE(mailertable,hash -o /etc/sendmail/mailertable)dnl

>     FEATURE(always_add_domain)dnl

>     FEATURE(nodns)dnl

>     FEATURE(nocanonify)dnl

>     MAILER(local)dnl

>     MAILER(ftn)dnl

>     MAILER(smtp)dnl

>     MAILER(uucp)dnl

>     #Cwsome-uucp-host-name

>     Cwf4.n211.z21.prognet

>     Cwf64.n9996.z69.surfnet

>     Cwf710.n125.z1.fidonet.org

>     # define(`SMART_HOST', uucp-dom:some-uucp-host-name)

>     define(`SMART_HOST', ftn:f710.n125.z1.fidonet.org)

>     LOCAL_RULE_3

>     # Route fidonet.org, prognet и surfnet via FTN!

>     R$* < $* z1.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* z2.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* z3.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* z4.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* z5.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* z6.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* prognet > $*		$1 < $2 f1.n211.z21.prognet > $3

>     R$* < $* surfnet > $*		$1 < $2 f60.n9991.z96.surfnet > $3

В начале определяется операционная система (linux), затем мы определяем, что вся MAILERDAEMON-почта также должна отправляться postmaster`у, т.о. он сможет найти ошибки быстрее и исправить их. Затем даны некоторые опции для моей настройки, но вы можете переделать их под ваши нужды. Кроме того определены мейлеры "`local`" (для пользователей на той же машине, которые отправляются `deliver`, `mail.local` или procmail), "`ftn`" (Fido-соместимые сети через `ifmail`), "`smtp`" (отправка через online-mail-protocol SMTP) и "`uucp`" (отправка через UUCP). Последние два не нужны для системы, подключенной к Интернет только через `ifmail`, но мейлер "ftn" основан на них (вот почему ftn.m4 такой короткий). В строках, начинающихся с Cw определены различные имена моего компьютера:

>     define(`SMART_HOST', ftn:f33.n125.z1.fidonet.org)

вся почта которая не ущла другими путями будет отправлена через `ifmail` моему fido-аплинку. если у вас есть UUCP-аплинк, то вы можете заместить эти строки:

>     define(`SMART_HOST', uucp-dom:some-uucp-host-name)

которые отправляют такую почту моему UUCP-аплинку с именем some-uucp-host-name.

В конце mymachine.mc я поместил специальные конструкции:

>     LOCAL_RULE_3

>     # Route fidonet.org и prognet via FTN!

>     R$* < $* z1.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* z2.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* z3.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* z4.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* z5.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* z6.fidonet.org > $*		$1 < $2 f33.n125.z1.fidonet.org > $3

>     R$* < $* prognet > $*		$1 < $2 f1.n211.z21.prognet > $3

>     R$* < $* surfnet > $*		$1 < $2 f60.n9991.z96.surfnet > $3

Здесь `z1.fidonet.org,..,z6.fidonet.org` отображаются в `f33.n125.z1.fidonet.org` и все `*.prognet` в `f1.n221.z21.prognet`, т.о. вся Fido-почта, адресованная в различные Fidonet-зоны будет отправлена моим аплинкам, которые отправят их через FTP (вметсо UUCP). Пожалуйста заметьте: Должен быть как минимум один символ табуляции между $* и $1 (не только пробелы).

Поэтому мы выше определили файл `/etc/sendmail/mailertable`. В этом файле определены "исключения" из маршрута по умолчанию, например маршрут через фидо.

>     .prognet    	ftn:f1.n211.z21.prognet

>     .surfnet        ftn:f60.n9991.z96.surfnet

Как видно вся фидопочта идет через фидо. Эта `mailertable` должна быть скомпилирована в базу данных после любых изменений. Используйте следующие команды в каталоге `/etc/sendmail`:

>     makemap hash mailertable.db < mailertable

Если вы получили ошибку "`makemap: Type hash not supported in this version`", то кажется вы установили Slackware 3.0, который не поддерживает hash-типы (не спрашивайте меня почему). Тогда вы должны использовать такую команду:

>     makemap dbm mailertable < mailertable

в том же каталоге. Но сейчас в должны изменить строку `mailertable` в файле `mymachine.mc` с `hash` на `dbm`. Измените строку так:

>     FEATURE(mailertable,dbm -o /etc/sendmail/mailertable)dnl

Проблемы исчезнут. После редактирования `mymachine.mc`, мы можем создать из него `sendmail.cf` . Перейдите в каталог `/usr/src/sendmail/cf/cf` и выполните здесь pmake `mymachine.cf` . Этим вы создадите `/usr/src/sendmail/cf/cf/obj/mymachine.cf` Переименуйте этот файл в `/etc/sendmail.cf` и настройка завершена. Если pmake не установлен, то сделайте так:

>     m4 mymachine.mc > obj/mymachine.cf

Есть несколько других вещей, нужных вам для ручного редактирования `sendmail.cf` . Во-первых, посморите опцию `O MatchGECOS` и раскомментируйте ее. Это позволит использовать полные имена типа `Greg Frydenlund` вместо логинов типа `gfryde01`. Во-вторых, посмотрите секцию доверенных (trusted) пользователей и добавьте "`Tfnet uucp`". Это позволит `sendmail` применять SUID для `fnet.uucp` при выполнении `ifmail`.

Проделав все это вы готовы создать ваш почтовый alias-файл. Источник выглядит наподобие этого. Применение почтовых алиасов - только одна из мощных возможностей `sendmail`, которая позволяет перенаправлять почту другим сайтам и пользователям. Его не тяжело администрировать. Почта для пользователя слева перенаправляется пользователю справа. Мой файл `alias`:

>     #

>     # /etc/aliases

>     #

>     # compile this file by issueing the command: newaliases

>     #

>     nobody: /dev/null

>     root: gfryde01

>     support: gfryde01

>     admin: gfryde01

>     operator: gfryde01

>     postmaster: gfryde01

>     faxadmin: gfryde01

>     usenet: gfryde01

>     sysop: gfryde01

>     uucp: gfryde01

>     news: gfryde01

>     mail: gfryde01

>     fnet: gfryde01

>     fido: gfryde01

>     greg_frydenlund: gfryde01

>     greg.frydenlund: gfryde01

>     gregfrydenlund: gfryde01

Этот файл должен быть скомпилирован командой `newaliases` после каждого изменения.

Сейчас запустим sendmail как демон:

>     /usr/sbin/sendmail -bd -q 15m

Добавьте вышеприведенную команду в `/etc/rc.d/rc.local`. На большинстве систем она уже определена в `/etc/rc.d/rc.M` . Кроме того можно запускать `sendmail` по `cron`, и заставить `inetd` слушать порт. Для этого вставляем в crontab пользователя `root`:

>     */20  * * * *   /usr/sbin/sendmail -q

а `/etc/inetd.conf` вставляем:

>     smtp  stream  tcp   nowait  root  /usr/sbin/tcpd  /usr/sbin/sendmail -bs

Не забудьте выполнить `kill -HUP inetd` после изменения `inetd.conf`, чтобы информировать `inetd` об изменениях. `sendmail` будет писать свои журнальные сообщения через `syslogd`. Я рекомендцю следующую запись в `/etc/syslog.conf`:

>     mail.*                      /var/log/mail

Не забывайте перезапустить `syslogd` после этих изменений через `killall -1` как уже описано в главе Настройка `ifcico`. Чтобы проверить записывающие правила `sendmail` для fidonet-адресов, запустите `sendmail` командой

>     sendmail -bt

Введите эту команду в строке приглашения, и вы должны увидеть примерно вот это.

>     > 3,0 me@f10.n125.z1.fidonet.org

Последняя строка в этом спискее ниже представляет интерес для нас.

>     rewrite: ruleset   3     input: me @ f10 . n125 . z1 . fidonet . org

>     rewrite: ruleset  96     input: < me @ f10 . n125 . z1 . fidonet . org . >

>     rewrite: ruleset  96   returns: < me @ f10 . n125 . z1 . fidonet . org . >

>     rewrite: ruleset   3   returns: < me @ f10 . n125 . z1 . fidonet . org . >

>     rewrite: ruleset   0     input: < me @ f10 . n125 . z1 . fidonet . org . >

>     rewrite: ruleset  98     input: < me @ f10 . n125 . z1 . fidonet . org . >

>     rewrite: ruleset  98   returns: < me @ f10 . n125 . z1 . fidonet . org . >

>     rewrite: ruleset   0   returns: $# ftn $@ f33 . n125 . z1 $: me < @ f33 . n125

>     . z1 . fidonet . org >

Вы можете видеть внизу этого списка, что мейлер ftn - это как раз то, что мы хотим. Я предлагаю вам испытать другой адрес (me@localhost), чтобы удостовериться, что sendmail обрабатвает все правила соответственно для вашей собственной системы.

### Настройка INN

Во-первых, надо установить INN. Slackware приходит с INN и устанавливает его в `/usr/lib/news`. Вдобавок, я рекомендую вам заглянуть в (только для Slackware) каталог `/usr/lib/news/tools.linux` и почитать про особенности установки, скрипты и faq. Также вы можете использовать либо уже собранные исполняемые файлы, либо скомпилированные вами. Я предпочитаю скомпилированные мною и находящиеся в исходниках `example-config.data` для linux. Я правлю его так, чтобы пути соответствовали установкам моей Slackware (по умолчанию было `/use/local/...ick`). Советую указать пути в соответствии с вашей системой, или сделайте как я и установите INN в каталог `/usr/lib/news`.

INN запускается как демон, так что вам не нужен сервис nntp, определенный в файле `inetd.conf` . Закомментируйте строку и не забудьте после этого перезапустить `inetd` выполнив `kill -HUP inetd-PID`.

Если вы установили INN в первый раз или из исходников, как я, то сделайте несколько изменений в `/usr/lib/news` и его подкаталогах. Я буду последовательно объяснять настpойку каждого файла:

Во-первых, некоторые маленькие файлы `/usr/lib/news/passwd.nntp` и /usr/lib/news/nntpsend.ctl должны содержать только комментарии и ничего больше. Вам также нужно создать файлы историй, выполнив скрипт `/usr/lib/news/bin/makehistory` от пользователя `news`.

`/usr/lib/news/hosts.nntp` содержит только следующие строки:

>     ##  hosts.nntp - names и addresses that feed us news

>     ##  Format

>     ##      <host>:

>     ##      <host>:<password>

>     ##  <host> can be a name или IP address; no wildcards.  Any hosts not

>     ##  listed here are handed off to nnrpd.

>     localhost:

>     f710.n125.z1.fidonet.org:

Так только моему компьютеру позволен доступ к моему NNTP-серверу.

`/usr/lib/news/nnrp.access` должен выглядеть приблизительно так:

>     ##  nnrp.access - access file for on-campus NNTP sites

>     ##  Format:

>     ##      <host>:<perm>:<user>:<pass>:<groups>

>     ##  Connecting host must be found in this file; the last match found is

>     ##  used, so put defaults first.

>     ##      <host>          Wildcard name или IP address

>     ##      <perm>          R to read; P to post

>     ##      <user>          Username for authentication before posting

>     ##      <pass>          Password, for same reason

>     ##      <groups>        группы новостей patterns that can be read или not read

>     ##  To disable posting put a space in the <user> и <pass> fields, since

>     ##  there is no way for client to enter one.

>     ##

>     ## Default is no access, no way to authentication, и no groups.

>     *:: -no- : -no- :!*

>     ##  Foo, Incorporated, hosts have no password, can read anything.

>     *:Read Post:::local.*

>     localhost:Read Post:::*

>     f710.n125.z1.fidonet.org:Read Post:::*

Так каждый может читать и писать через NNRP (это протокол, по которому каждая читалка новостей общается с сервером новостей) в группы новостей, чьи имена начинаются с `local.*`. Им не позволено читать и писать в другие группы новостей. На моем компьютере каждый имеет права на чтение и запись в каждую группу новостей.

Далее настраиваем `/usr/lib/news/inn.conf` примерно так:

>     ##  inn.conf -- inn configuration data

>     ##  Format:

>     ##      <parameter>:<whitespace><value>

>     ##  Used by various programs и libinn.  The following parameters are defined:

>     ##      domain          Local domain, without leading period.

>     ##      fromhost        What to put in the From line; default is FQDN

>     ##                      of the local host.

>     ##      moderatormailer Where to mail moderated postings, if not found

>     ##                      in the moderators file; see moderators(5).

>     ##      pathhost        What to put in the Path и Xref headers; default

>     ##                      is FQDN of the local host.

>     ##      organization    If $ORGANIZATION doesn't exist.  What to put in

>     ##                      the Organization header if blank.

>     ##      server          If $NNTPSERVER doesn't exist.  Local NNTP server

>     ##                      host to connect to.

>     ##

>     ## orginization line will be substituted for your origin line in echomail

>     organization:-={OCEAN BEACH BBS....San Francisco, CA}=-

>     server:localhost

>     fromhost:f710.n125.z1.fidonet.org

Наиболее важный файл конфигурации INN - это `/usr/lib/news/newsfeeds`, который определяет, какие группы новостей куда отправлять.

>     ##  newsfeeds - determine where Usenet articles get sent

>     ##  Format:

>     ##	site[/exclude,exclude...]\

>     ##		:pattern,pattern...[/distrib,distrib...]\

>     ##		:flag,flag...\

>     ##		:param

>     ##  Summary of flags:

>     ##	<size		Article must be less then size bytes.

>     ##	Aitems		Article checks -- d (must have Distribution header)

>     ##			p (don't check for site in Path header).

>     ##	Bhigh/low	Internal buffer size before writing to output.

>     ##	H[count]	Article must have less then count hops; default is 1.

>     ##	Isize		Internal buffer size (if a file feed)

>     ##	Nm		Only moderated groups that match the patterns.

>     ##	Nu		Only unmoderated groups that match the patterns.

>     ##	Ssize		Start spooling if more than size bytes get queued.

>     ##	Ttype		Feed types -- f (file) m (funnel; param names the

>     ##			real entry) p (pipe to program) c (send to stdin

>     ##			channel of param's sub-process); x (like c, but

>     ##			handles commands on stdin).

>     ##	Witems		What to write -- b (article bytesize) f (full path)

>     ##			g (first newsgroup) m (Message-ID) n (relative

>     ##			path) s (site that fed article) t (time received)

>     ##			* (names of funnel feed-in's или all sites that get

>     ##			the article) N (Newsgroups header) D (Distribution

>     ##			header) H (all headers) O (overview data) R

>     ##			(replication data).

>     ##  Param field depends on T flag.  For Tf, relative paths are from the

>     ##  out.going directory.  For Tp и Tc, it is a shell command to execute.

>     ##  If a Tm refers to this entry (which will have its own T param) then "*"

>     ##  is expanded to all the funnel sites that triggered this one.  Useful

>     ##  for spawning one mail process, e.g.

>     ##

>     ##  This file is complicated -- see newsfeeds.5!

>     # ME указывает, к каким группам новостей должен быть доступ

>     ME\

>     	:*,!control,!<local>.*\

>     	::

>     overview\

>     	:*:Tc.WO:/usr/lib/news/bin/overchan

>     #

>     # Моя фидошная подписка

>     #

>     f33.n125.z1.fidonet.org/f33.n125\

>     	:fido.*,!fido.NET_125,!control*,!junk*,!local*\

>     	:Tf,Wfb,B16384/1024:

>     #

>     # My nets admin hub

>     #

>     f5109.n125.z1.fidonet.org/f5109.n125\

>     	:fido.NET_125,!fido.*,!local*,!junk*,!control\

>     	:Tf,Wfb,B16384/1024:

>     #

>     # Мои подписки в других сетях

>     #

>     f1.n211.z21.prognet.ftn/f1.n211\

>     	:prog.*,!fido.*,!local*,!junk*,!control\

>     	:Tf,Wfb,B16384/1024:

>     f60.n9991.z96.surfnet.ftn/f60.n9991\

>     	:surfnet.*,!prog.*,!fido.*,!local*,!junk*,!control\

>     	:Tf,Wfb,B16384/1024:

Затем правим `/usr/lib/news/expire.ctl`, который определяет, когда содержимое групп новостей устаревает.

>     ##  expire.ctl - expire control file

>     ##  Format:

>     ##	/remember/:<keep>

>     ##	<patterns>:<modflag>:<keep>:<default>:<purge>

>     ##  First line gives history retention; other lines specify expiration

>     ##  for newsgroups.  Must have a "*:A:..." line which is the default.

>     ##	<patterns>	wildmat-style patterns for the newsgroups

>     ##	<modflag>	Pick one of M U A -- modifies pattern to be only

>     ##			moderated, unmoderated, или all groups

>     ##	<keep>		Mininum number of days to keep article

>     ##	<default>	Default number of days to keep the article

>     ##	<purge>		Flush article after this many days

>     ##  <keep>, <default>, и <purge> can be floating-point numbers или the

>     ##  word "never."  Times are based on when received unless -p is used;

>     ##  see expire.8

>     ##  If article expires before 14 days, we still remember it for 14 days in

>     ##  case we get offered it again.  Depending on what you use for the innd

>     ##  -c flag и how paranoid you are about old news, you might want to

>     ##  make this 28, 30, etc.

>     /remember/:30

>     # Хранить все группы новостей минимум 3, максимум 90 и обычно 5 дней

>     # (с момента прибытия)

>     *:A:3:5:90

>     *:U:3:5:90

>     # Хранить модерируемые группы новостей дольше

>     *:M:5:9:90

>     # Хранить модерируемые c.o.l.* 1 месяц

>     comp.os.linux.*:M:5:30:30

>     # Хранить fido дольше, чем по умолчанию.

>     fido*:A:3:9:90

>     # Удалять junk очень быстро.

>     fido.junk:A:3:4:90

Конечно, вы можете установить все так, как нужно вам. Но вы не должны сокращать время хранения (особенно для Fido) до минимума, так как сообщения идут до вашей системы довольно долго и могут устаpевать немедленно. Сейчас вам нужно добавить некоторые Fido конференции в ваш файл active. Вы можете сделать это двумя путями, запустить скрипт `/usr/lib/news/bin/newgroup` или вручную отредактировать файл `/usr/lib/news/active`. Я растолкую потом. Формат новой группы новостей записи в файле `active` :

>     <Areas tag> <10 0's> <9 0's & 1> <y>

>     fido.LINUX 0000000000 0000000001 y

>     fido.PASCAL 0000000000 0000000001 y

Сейчас копируем файл `etc/ifmail/misc/inn/send-ifmail` в `/usr/lib/news` и изменяем владельца на `news.news. send-ifmail` вызывается периодически из crontab как пользователь news, чтобы поместить отправляемые статьи из `/var/spool/news/out.going` в `/var/spool/ifmail/outb` для отправки через `ifcico`.

Чтобы получить пересылаемые новости, для нее должен быть заведен каталог, который называется `/var/spool/news/out.going`, с владельцем `news.news` и правами доступа 775. В отличие от `cnews` в этом каталоге не должно быть никаких подкаталогов для `newsfeeds`, так как INN использует только один файл для подписки, который он создает сам. Если вы "апгрейдитесь" с `cnews` до INN, вы должны удалить существующие каталоги.

Поскольку INN работает с демоном, который всегда запущен, он должен стартовать при загрузке. Добавьте следующее в конце `/etc/rc.d/rc.M` перед вызовом `rc.local`:

>       /usr/lib/news/etc/rc.news &

Для первого испытания INN этот скрипт может быть запущен вручную (как пользователь `news`). Но помните, что только один `innd` работает в это время, не запускайте другие программы INN, пока вы работаете под пользователем `news`.

В некоторых дистрибутивах другой NNTP-демон (`nntpd`) определен для cnews в `/etc/inetd.conf`. Тогда `innd` не может стартовать, так как TCP-порт уже занят. Тогда закомментируйте эту строку и перезапустите `inetd` командой `kill -HUP inetd.PID`.

Чтобы заставить INN работать правильно добавьте в `crontab` пользователя `news` :

>     SHELL=/bin/sh

>     MAILTO=news

>     #=========================================================================

>     # INN crontab:

>     #=========================================================================

>     #

>     # Offer spooled news batches to ifnews of outgoing echomail

>     #

>     30 */3 * * *		/usr/lib/news/send-ifmail f33.n125.z1.fidonet.org

>     # Send spooled news to uucp uplink

>     #

>     #35 */3 * * *		/usr/lib/news/send-uucp "uucp-feed-name"

>     # Run news.daily every morning at 6am

>     #

>     0 6 * * *		/usr/lib/news/bin/news.daily < dev/null

>     # offer spooled news (that was spooled into /news/in.coming directory when the

>     # innd server wasn't available) again to the innd server.

>     #

>     13,33,53 * * * *	/usr/lib/news/rnews -U

Каждые три часа пакеты для всех Fido-систем и UUCP-систем пакуются (конечно, без UUCP-соединения вы можете пропустить посленюю часть). Далее производится ежедневная очистка, о чем сообщается через почту. Затем будут обработаны все не отправленные статьи.

Следующая вещь, которую мы сделаем - создание групп новостей. Для этого и для большинства других изменений в системе новостей используется команда ctlinnd. Она вызывается только пользователем news и вы можете найти ее в каталоге `/usr/lib/news/bin`.

Новые группы новостей создаются командой `ctlinnd newgroup fido.LINUX` (где `fido.LINUX` взято в качестве примера). Вы можете использовать различные опции, которые объяснены в мане по `ctlinnd(8)`. Вы должны создать группы новостей `control, junk и fido.junk`, которые содержат сообщения управления (например, cancel), статьи для неизвестных групп новостей и статьи для областей, не определенных в `/etc/ifmail/areas`.

Чтобы иметь описания групп новостей в читалке новостей, ва вероятно захотите создать файл `/usr/lib/news/newsgroups`, который содержит имя группы новостей и ее описание (разделенные табуляцией) в каждой строке. Порядок групп не важен, из повторяющихся строк будет отображена только первая.

Так как INN посылает свои log-сообщения через `syslog`, нам надо сделать такие изменения в `/etc/syslog.conf`:

>     news.crit                               /var/log/news/news.crit

>     news.err                                /var/log/news/news.err

>     news.notice                             /var/log/news/news.notice

Теперь создайте каталог `/var/log/news`, и перезапустите ваш `syslogd`. Для прочей информации по INN, переходе с cnews на INN, проблемами пр. прочтите весьма информативный INN-FAQ и маны.

### gettys & inittab

`getty` используется для наблюдения за состоянием последовательной линии, и при поступлении звонка он передает звонящего соответствующей программе. Есть два `getty`, которые очень хорошо работают с `ifmail` - `getty_ps` и `mgetty+sendfax-0.98`. Я использую `mgetty+sendfax`, так как он работает и с `uucp`, и с `fido` звонками.

Чтобы использовать `mgetty` вам нужно отредактировать его несколько конфигурационных файлов, но из них только один самый важный - это файл `login-config.dist` . Вот мой файл `/etc/mgetty-0.98/login-config.dist` :

>     # login.config

>     #

>     # This is a sample "login dispatcher" configuration file for mgetty

>     #

>     # Format:

>     #	username userid utmp_entry login_program [arguments]

>     #

>     # Meaning:

>     #       for a "username" entered at mgettys login: prompt, call

>     #	"login_program" with [arguments], with the uid set to "userid",

>     #	and a USER_PROCESS utmp entry with ut_user = "utmp_entry"

>     #

>     # username may be prefixed / suffixed by "*" (wildcard)

>     #

>     # userid is a valid user name from /etc/passwd, или "-" to not set

>     #  a login user id и keep the uid/euid root (needed for /bin/login)

>     #

>     # utmp_entry is what will appear in the "who" listing. Use "-" to not

>     #  set an utmp entry (a must for /bin/login), use "@" to set it to the

>     #  username entered. Maximum length is 8 characters.

>     #

>     # login_program is the program that will be exec()ed, with the arguments

>     #  passed in [arguments]. A "@" in the arguments will be replaced with the

>     #  username entered. Warning: if no "@" is given, the login_program has

>     #  no way to know what user name the user entered.

>     #

>     #

>     # SAMPLES:

>     # Use this one with my Taylor-UUCP patch (taylor104.p1) и Taylor-UUCP

>     #  passwd files. (Big advantage: tuucp can use the same passwd file for

>     #  serial dial-in и tcp dial-in [uucico running as in.uucpd]).

>     #

>     #U*	uucp	@	/usr/lib/uucp/uucico -L @

>     #

>     # If you use Taylor UUCP 1.05, use that:

>     #

>     U*	uucp	@	/usr/lib/uucp/uucico -l -u @

>     #

>     # Use this one for fido calls (login name /FIDO/ is handled specially)

>     #

>     # You need Eugene Crosser's "ifmail" package for this to work.

>     # mgetty has to be compiled with "-DFIDO" in the options list, otherwise a

>     # fido call won't  be detected.

>     #

>     /FIDO/	fnet	uucp	/usr/lib/ifmail/ifcico @

>     #

>     #

>     # An example where no login name in the argument list is desired:

>     #  automatically telnetting to machine "smarty" for a given login name

>     #

>     #telnet-smarty	gast	telnet	/usr/bin/telnet -8 smarty

>     #

>     # This is the "standard" behaviour - *dont* set a userid или utmp

>     #  entry here, otherwise /bin/login will fail!

>     #  This entry isn't really necessary: if it's missing, the built-in

>     #  default will do exactly this.

>     #

>     *	-	-	/bin/login @

Если вы используете `getty_ps`, не забудьте добавить `#define FIDO` в `tune.h`. Вам также надо будет определить конфигурационный файл для ttyS-устройства, которое вы используете. Примеры есть в `/etc/default` для `uugetty` и в архиве. Вот мой `/etc/default/uugetty.ttyS1` :

>     ALTLOCK=cua1

>     ALTLINE=cua1

>     INITLINE=cua1

>     TIMEOUT=60

>     DEBUG=110

>     INIT="" ATZS0=1\r OK

>     # Its very important to include these two lines. Otherwise fido callers

>     # will go undetected. Also some older versions of uugetty are case sensitive

>     # so watch for this in the example configs that accompanied your archive.

>     FIDO=/usr/lib/ifmail/ifcico

>     EMSI=yes

>     WAITFOR=RING

>     CONNECT="" ATA\r CONNECT

>     DELAY=1

>     HANGUP=yes

Далее вам нужно добавить строку в ваш `/etc/inittab` для вашего `getty`. Вот мой `/etc/initta`b :

>     # Serial lines

>     # This is my mgetty line for com port 2 .

>     s1:35:respawn:/usr/sbin/mgetty -D -s 38400 ttyS1

>     #

>     # You can add this line instead to your inittab if your using uugetty

>     #s1:35:respawn:/sbin/uugetty -d /etc/default/uugetty.ttyS1 -t 180 ttyS1 38400

Первое поле определяет устройство. Вторая runlevel`ы, для которых действительны значения остальных полей. Третье поле '`respawn:`' перезапускает программы, если она завершит свою работу. Четвертое поле - путь и имя программы для запуска и параметры, нужные для запуска `getty`. Более подробно описано в '`man inittab`'.

### News/Echomail чтение и написание

Я использую в качестве читалки новостей `tin` версии `tin-1.3BETA.950824-color`. Так как `tin`, подобно остальным читалкам новостей не был написан с учетом Fido, в нем нет ответа на какой-то адрес, а ответ отправляется к "`all`", однако `ifmail` может адресовать письма с ответами на определенный адрес, если добавить дополнительное поле в заголовке статьи `X-Comment-To`: В вашем файле `~/.tin/attributes` добавьте строки.

>     scope=fido.*

>     x_comment_to=ON

### Mail/Netmail чтение и написание

Я использую `Pine`. Вам не нужно ставить что-то специализированное, вам только нужно использовать pfnz-нотацию при указании адреса. Например

>     Greg Frydenlund 1:125/720

пишется как

>     Greg.Frydenlund@.f710.n125.z1.fidonet.org

или

>     Greg.Frydenlund@f710.n125.z1.fidonet.org (Greg Frydenlund)

А

>     Greg Frydenlund 21:100/64.

пишется как

>     Greg.Frydenlund@f64.n100.z21.prognet

Другой важный момент - отправка почты другим мейлерам (`Areafix, FileMgr`). Часто возникают проблемы с почтой, созданной `ifmail`. Так как почта часто имеет в первой строке "`* To: address`", что интерпретируется некоторыми мейлерами как команда для всех Areas ("`*`"). Если вы не желаете иметь такие строки, то можете ввести в меню `Setup` под `User-Defined-Header` (перед отправкой сообщения) дополнительную строку заголовка:

>     X-Flags: N

Другая проблема - `FileScan` и некоторые другие мейлеры имеют привычку брать адрес не из заголовка, а из message-ID. Но там содержится не FTN-адрес (Z:N/F.P), а Internet-адрес. Это можно исправить:

>     X-Flags: M

, чтобы генерировался обычный `Fido-message-ID` (для различных сетей соответствующие адреса).

Конечно вы может комбинировать `X-flags`. Я к примеру использую для всех писем к роботам:

>     X-Flags: MN

Если вы хотите отправить `crashmails`, нужно добавить дополнительно "`/X-Flags: C`". Если вы пишите пойнту, почта обрушится на его босса.

Также аттачи возможны. Добавьте "`X-Flags: F`" и имя файла (с путем!) в строке `subject`.

Ели вы хотите установить флаги для всей почты, вы должны создать файл типа `~/.elm/elmheaders`, который содержит только строки заголовка, например:

>     X-Flags: MN

Эти строки будут добавлены во все сообщения.

Если X-Flags не дают видимого эффекта, посмотрите логи `ifmail`, так как `ifmail` возможно выскажется по этому поводу. Но надо продумать доступность `X-Flags`, иначе каждый сможет создавать crashmails и файловые запросы и отправлять их с вашего сайта.

### Фрекание файлов

Для файловых запросов можно использовать perl-скрипт `ifreq`, который расположен в `etc/ifmail/misc/contrib`. Некоторые freq-процессоры под DOS имеют проблемы с отсутствием символа перевода строки в конце строки. Ниже патч для этого:

>     --- ifreq~      Sat Aug  6 14:41:28 1994

>     +++ ifreq       Sat Oct  8 12:05:09 1994

>     @@ -73,7 +73,7 @@

>     # open the flofile for appending

>     open(FLOFILE, ">>" . $reqfile) || die "can't open $reqfile";

>     while (@files) {

>     -                       print (FLOFILE shift(@files), "\n");

>     +                       print (FLOFILE shift(@files), "\r\n");

>     }

>     close(FLOFILE);

### Решение проблем

Если что-то работает не так (несмотря на мои объяснения), вы имеете различные возможности отыскать ошибки и исправить их. В пакете `ifmail` есть программа, предназначенная для этого - `ifstat`, которая сообщает какие пакеты на какой адрес лежат на холде. Не смущайтесь, если эти пакеты уменьшаются после запуска `ifpoll`, поскольку почта упаковывается в ZIP файлы. Другое хорошее место, в которое рекомендуется заглянуть - это файлы `/var/log/syslog` или `/var/log/messages`.

#### Почта не обрабатывается

В этом случае было бы очень полезно увеличить уровень отладки `ifmail` в /etc/sendmail.cf. Чтобы сделать это, добавьте параметр -4 в `ifmail` (если вам этого недостаточно, то по мне лучше установить -8). Для получения отладочных сообщений, я отправляю копию почты на несуществующий адрес, так что я получаю сообщение со всеми отладочными сообщениями в `/var/spool/mqueue`. Если такое сообщение не приходит, то это может означать, что некоторые права доступа не правильно установлены, что может заставлять систему ожидать (можно увидеть, что `sendmail` и `ifmail` остаются запущенными). Используйте журнальные сообщения `sendmail`, присылвемые через файл `syslog` и "странные" сообщения лежащие в `/var/spool/mqueue`.

#### Эхоконференции не обрабатываются

INN должен обрабатывать статьи немедленно и складывать их в файлы `/var/spool/news/out.going/*`. после запуска `send-ifmail` они должны исчезнуть оттуда и вы должны найти их в `/var/spool/ifmail/outbound`. Также проверьте права доступа ваших каталогов и удостоверьтесь, что `ifnews` имеет доступ по чтению/записи в них (`/tmp`, `/var/spool/ifmail/fidonet` и `/var/spool/news/out-going/*`).

Кроме того надо просмотреть все журнальные файлы (логи):

>     sendmail

>             /var/log/mail

>     INN

>             /usr/local/lib/news/log

>             /usr/local/lib/news/errlog

>             /var/log/inn/*

>     ifmail

>             /var/log/ifmail/iflog

>             /var/log/ifmail/ifdebug

Чтобы проверить сохдание пакетов или исправления проблем в уже существующих пакетах вы должны использовать программу Inspect (под DOS), которая прекрасно идет под `dosemu`. Разрешите dosemu доступ к соответствующим каталогам и запустите DOSEmu как пользователь `fnet` или `news`, после этого вы можете изменить файлы .pkt и архивы.

### Благодарности

Следующие люди помогли своими комментариями и пр. в написании этого HOWTO:
`roland@spinnsker.rhein.be (Roland Rosenfeld) 2:2450/111.13
Armageddon@icemans.ndh.com (Oliver Much) 2:2453/690.12
andij@andi.tricbbs.fn.sub.org/ (Andreas Jellinghaus)
uli@corno.cologne.de/ (Ulrich Villers) 2:2450/115.3
martin@erde.GUN.de/ (Martin Seine) 2:2448/413.100
piet@smallchange.rhein.de/ (Peter Theisohn) 2:2450/30
mg@genyosha.in-chemnitz.de/ (Mike Gaertner) 2:249/5060.17
srtxg@linux.chanae.stben.be (Pablo Saratxaga) 2:293/2219
Todd Burroughs 1:259/604

`
Добавления и информацию об обнаруженных ошибках присылайте мне немедленно!