Фидо под Linux. Практическое руководство. Часть 3. CrashMail
 
Продолжаем настраивать софт для работы с FTN-сетями под Linux. Следующим этапом необходимо установить и настроить тоссер: программу, которая будет обрабатывать входящие пакеты и распределять сообщения по базам эхо-областей. Одной из таких программ является CrashMail. Именно ее установкой и настройкой мы сейчас займемся.

Немного об особенностях CrashMail. Во-первых, данный тоссер, согласно руководству, не предназначен для новичков. Причина в отсутствии какой-либо документации, помимо README в комплекте пакета CrashMail и комментариев в конфигурационном файле. Однако, CashMail — это один из самых быстрых тоссеров. И это одна из главных причин, по которым для установки был выбран именно он. Также в поставку данного тоссера входит множество полезных утилит для компиляции нодлиста, просмотра нодлиста, создания и постинга сообщений, просмотра статистики и внешний упаковщик (purge) баз эхо-областей. Еще раз хочется отметить как невероятную скорость линковки сообщений тоссера, так и его работу в целом. Автор этого пакета — Johan Billing (billing@df.lth.se). Последнюю версию CrashMail можно взять с www.freshmeat.net. CrashMail может работать на платформах Linux, OS/2 и Windows. Поэтому будьте внимательны при поиске архива с программой. В имени файла должен присутствовать идентификатор платформы, под которую скомпилированы исходники. Это важно, если вы копируете архив с готовыми/скомпилированными программами. Совсем недавно Johan выпустил еще и tic-процессор под названием CrashTick.
Итак, вы скачали архив CrashMail, например, cmVERSIONlinux.zip, где VERSION — это версия программы. Для начала распакуем архив в директорию, где вы предполагаете содержать программы для работы с Fidonet. Пусть это будет /usr/local/fido. Тогда выполним следующие команды:
mkdir /usr/local/fido/crashmail
unzip cmVERSIONlinux.zip /usr/local/fido/crashmail
После этого у вас в директории /usr/local/fido/crashmail будут располагаться все необходимые файлы для работы тоссера CrashMail, в том числе и конфигурационный файл. Он носит имя crashmail.prefs. Помимо него, там будут находиться:
crashmail — непосредственно сам тоссер.
crashexport — программа-утилита для экспортирования списка эхо-конференций в формат понятный GoldEd. Однако GoldEd вполне может понимать и сам crashmail.prefs, впрочем, об этом мы поговорим в следующей статье.
crashgetnode — позволяет получать всю информацию по заданному узлу из нодлиста.
crashlist — компилятор нодлиста. Создает индексы понятные для crashmail, используется для ускорения при поиске в нодлисте.
crashmaint — упаковщик баз.
crashstats — статистика.
crashwrite — утилита, при помощи которой можно организовывать постоянный постинг сообщений в конференции и просто посылать письма. Другими словами, она позволяет создавать исходящие пакеты на основе входных данных. После эти пакеты можно поставить в очередь при помощи crashmail.
Перед тем, как ознакомиться с работой тоссера, настроим его. Вся конфигурационная информация содержится в файле crashmail.prefs. По умолчанию crashmail ищет его в текущей директории, но при помощи определенного параметра можно указать его непосредственное местоположение. О параметрах поговорим позже, а сейчас начнем редактировать главный конфигурационный файл, crashmail.prefs.
Первый параметр в конфигурационном файле определяет имя оператора данной машины, т.е. ваше имя:
SYSOP "Alexey Litvinuke"
Заметьте, что параметры, принимающие строковые значения, заключаются в двойные кавычки. Далее мы определяем имя и путь к лог-файлу, а также уровень ведения лога. Всего их, как видно из комментария, шесть:
1 — минимальный
2 — небольшой
3 — нормальный
4 — экстра
5 — большой
6 — отладочный
В зависимости от возрастания уровня лога, вы сможете впоследствии получить более подробную информацию о работе вашего тоссера, но чем больше лог, тем, соответственно, больше места на диске он занимает, а для многих это больной вопрос. Последний уровень лога используется при отладке (проверке правильности) работы тоссера. В этом случае он фиксирует практически все, что делает. Нам же должно хватить 3-го уровня.
LOGFILE "/var/log/fidonet/crashmail.log"
LOGLEVEL 3
Следующие два параметра определяют правила обработки тоссером одинаковых сообщений (они обычно именуются dupами). Первый параметр, DUPEFILE, определяет имя файла таблицы дубликатов, а второй — максимальный размер этой таблицы. Каждое сообщение может занимать примерно 39 байт в этой таблице. А второй параметр, DUPEMODE, указывает тоссеру, что ему делать с дубликатами. Для второго параметра существует множество из трех взаимоисключающих элементов:
BAD — переносить сообщения в BAD-область;
KILL — убивать/уничтожать дубликаты;
IGNORE — не проверять на дубликаты (позволяет заметно выиграть в скорости).
Имеем:
DUPEFILE "/var/spool/fidonet/dupes.jam"
DUPEMODE BAD
Следующий параметр LOOPMODE нам не интересен, оставим его без изменения. Он нужен для того, чтобы отлавливать loop-сообщения. Эта опция предназначена скорее для нод, нежели для поинтов.
Определим максимальный размер .pkt-файлов и пакетов, генерируемых crashmail'ом. Это вовсе не означает, что если пакет превысит границу, он будет удален. crashmail просто будет разбивать пакеты на части. Размер задается в килобайтах!
MAXPKTSIZE 50
MAXBUNDLESIZE 100

DEFAULTZONE 2
Определяем зону по умолчанию.
Пропишем путь к нодлисту. Параметру NODELIST передается путь к нодлисту и тип последнего. Тип можно узнать, выполнив crashmail с параметром version: "./crashmail version".
NODELIST /var/spool/fidonet/nodelist/ CMNL
Далее идут определения путей к INBOUND и OUTBOUND. Как вы уже наверняка знаете, в первом ifcico сохраняет всю входящую почту, а из второго забирает. Пути к этим директориям должны быть, естественно, одни и те же.
INBOUND "/var/spool/fidonet/inbound"
OUTBOUND "/var/spool/fidonet/outbound"
TEMPDIR "/usr/local/fido/tmp"
TEMPDIR — директория, куда будут временно распаковываться пакеты-архивы с почтой.
CREATEPKTDIR "/usr/local/fido/tmp"
В этой директории crashmail создает исходящие .pkt-файлы для их дальнейшей архивации и отправки в директорию PACKETDIR, которая и должна быть OUTBOUND'ом. Но вы может указать и другую директорию, главное, чтобы ifcico знал, где ему смотреть исходящую почту:
PACKETDIR "/var/spool/fidonet/outbound"
Далее определим файл, где crashmail будет собирать статистическую информацию об эхо-областях и узлах для crashstats:
STATSFILE "/var/log/fidonet/crashmail.stats"
Дальше идут ключевые слова без параметров. Нам необходимо внести лишь незначительные изменения, поэтому кратко определим их значение.
STRIPRE — удаляет все вхождения "Re:", "Re[x]:" и пр. в поле темы письма (subject) перед их импортом.
FORCEINTL — добавлять INTL-строку в сообщения.
NOROUTE — запрещает crashmail'у назначать правила роутинга для netmail;
ANSWERRECEIPT и ANSWERAUDIT оставим закомментированными. Они необходимы лишь узлам, для того чтобы обрабатывать areafix-запросы.
CHECKSEENBY — не отправлять почту узлам, которые уже присутствуют в поле SEENBY. Оставим закомментированным. Нужно в основном только узлам.
CHECKPKTDEST — проверка на то, нам ли пришла почта, и если в поле получателя нет ни одного локального AKA, почта не будет обрабатывать. Это нам ни к чему. Оставим закомментированным. 
IMPORTEMPTYNETMAIL — импортировать пустые письма. Оставляем закомментированным.
IMPORTAREAFIX — импортировать письма areafix'у (запросы) в локальный netmail. Нужно лишь в том случае, если вы узел и хотите смотреть, на что подписываются ваши поинты. Оставляем закомментированным.
NODIRECTATTACH — отключает опцию, которая устанавливает флаг Direct на все письма с приаттаченными (присоединенными) файлами. Сегодня мало кто позволяет своим поинтам аттачить файлы за пределы одного узла. Оставляем закомментированным.
BOUNCEPOINTS — отправляет все письма, адресованные на несуществующие поинты, боссу. Оставляем закомментированным.
IMPORTSEENBY — импортировать SEEN-BY поля. Дает вам возможность проследить путь, который прошло сообщение.
AREAFIXREMOVE — удаляет область, если никто на нее не подписан. Оставляем закомментированным.
WEEKDAYNAMING — пакеты именуются в соответствии с днем недели.
ADDTID — добавляет поле TID к сообщениям.
ALLOWRESCAN — позволяет пересканировать эхо-области для узла из AreaFix.
FORWARDPASSTHRU — все области, на которые подписываются поинты, становятся в режим pass-thru, т.е. не импортируются в личную базу владельца узла. Оставляем закомментированным.
ALLOWKILLSENT — эта опция позволяет удалять сообщения, помеченные редактором сообщений флажком KillSent. Т.е. они будут удаляться с локальной машины автоматически после отправки.
Некоторые параметры я все же опустил за ненадобностью. В нашем случае вы можете оставить их закомментированными.
После этого идет определение групп эхо-областей. 
GROUP A "Имя группы 1"
GROUP B "Имя группы 2"
и т.д.
Параметр BOUNCE оставляем закомментированным. Он не представляет для нас ничего интересного, по крайней мере, на начальном этапе.
FILEATTACHE — определяет шаблоны адресов, по которым можно отправлять сообщения с приаттаченными файлами. В случае если они не определены, то при попытке посылки сообщения с присоединенным файлом будет возвращено сообщение об ошибке в netmail. Закомментируем эту строчку.
После этого мы задаем правила выставления флагов пакетам для отправки в соответствии с шаблоном адреса получателя:
CHANGE * 2:*/*.* Crash
Это правило заставляет crashmail сменить любой флаг любого пакета на Crash. Т.е. "отправить немедленно". Остальные флаги можно посмотреть в многочисленных документах, посвященных FTN-сетям. Этого правила нам достаточно. Для того чтобы наш тоссер упаковывал и распаковывал пакеты с почтой, необходимо, чтобы он знал сигнатуру, путь, имя файла и параметры используемого архиватора. Практически все узлы сегодня пользуются архиватором ZIP, но это не обязательно.
PACKER "ZIP" "zip %a %f" "unzip %a" "PK"
PACKER "RAR" "rar %a %f" "rar x %a" "Rar!"
Имена, заключенные в кавычки, будут использоваться далее при определении ваших узлов.
Опишем все свои AKA (Also Known As):
AKA 2:454/2.110
ADDNODE 2:454/2
DOMAIN "FidoNet"

AKA 2:454/23.41
ADDNODE 2:454/23
DOMAIN "FidoNet"

AKA 2:454/5.75
ADDNODE 2:454/5
DOMAIN "FidoNet"

AKA 2:454/26.8
ADDNODE 2:454/26
DOMAIN "FidoNet"
После этого нужно задать параметры каждому узлу ваших AKA. Это делается при помощи параметра NODE. Он может содержать очень много опций, поэтому мы не будем рассматривать их все. Просто пропишите их приблизительно вот таким образом:
NODE 2:454/2 "ZIP" "" PACKNETMAIL AUTOADD
NODE 2:454/23 "ZIP" "" PACKNETMAIL AUTOADD
NODE 2:454/5 "ZIP" "" PACKNETMAIL AUTOADD
NODE 2:454/26 "ZIP" "" PACKNETMAIL AUTOADD
PACKNETMAIL — указывает, что для этого узла нужно паковать исходящую почту. А AUTOADD разрешает автоматически создавать эхо-области, полученные с этого узла и несуществующие у нас.
Опустите все нижеследующие опции и переходите сразу к определению правил роутинга netmail'а. Они задаются ключевым словом ROUTE.
ROUTE "2:454/23.*" "2:454/23.0" 2:454/23.41
ROUTE "2:454/5.*" "2:454/5.0" 2:454/5.75
ROUTE "2:454/26.*" "2:454/26.0" 2:454/26.8
ROUTE "*:*/*.*" "2:454/2.0" 2:454/2.110
Правило роутинга каждого сообщения выбирается последовательным перебором всех правил сверху вниз. Вышеприведенные строчки можно описать словами: если сообщение предназначено для поинта узла 2:454/23, то отправить его через 2:454/23, если для поинта 2:454/5, то через 2:454/5, если 2:454/26, то через 2:454/26 — в любом другом случае письма адресатам отправлять через 2:454/2.
MSG_HIGHWATER и MSG_WRITEBACK закомментируйте. Они нам не понадобятся.
JAM_QUICKLINK — увеличивает скорость линковки за счет игнорирования строк сообщений.
JAM_MAXOPEN — задает максимальное количество Jam-баз, которые crashmail может держать открытыми одновременно. Число 5 будет как раз к месту.
Итак, мы завершили основную часть настройки crashmail :). Осталось лишь разобраться с не менее важной частью — это определение эхо-областей. Многие, кто пытался настроить crashmail, испытывали трудности с определением автоматического создания областей. Это случалось во многом из-за того, что плохо и невнимательно читались комментарии к параметрам. Итак, начнем определять для начала основные эхо-области вручную:
NETMAIL "NETMAIL.2" "2:454/2.110" JAM "/var/spool/fidonet/netmail/netmail2"
NETMAIL "NETMAIL.5" "2:454/5.75" JAM "/var/spool/fidonet/netmail/netmail5"
NETMAIL "NETMAIL.23" "2:454/23.41" JAM "/var/spool/fidonet/netmail/netmail23"
NETMAIL "NETMAIL.26" "2:454/26.8" JAM "/var/spool/fidonet/netmail/netmail26"
Для каждого узла мы создали отдельную почтовую netmail-область в Jam-формате.
AREA "BAD" 2:454/2.110 JAM "/var/spool/fidonet/echo/bad"
Область BAD является обязательной для объявления. А далее нужно прописать то, что обычно забывают сделать те, кто не внимательно читает комментарии. Нужно описать правила создания новых эхо-областей. Они описываются для каждого узла отдельно:
AREA "DEFAULT" 2:454/2.110 JAM "/var/ spool/fidonet/echo/%a"
KEEPDAYS 3
AREA "DEFAULT" 2:454/23.41 JAM "/var/ spool/fidonet/echo/%a"
KEEPDAYS 3
AREA "DEFAULT" 2:454/26.8 JAM "/var/ spool/fidonet/echo/%a"
KEEPDAYS 3
AREA "DEFAULT" 2:454/5.75 JAM "/var/ spool/fidonet/echo/%a"
KEEPDAYS 3
Опция KEEPDAYS определяет, сколько дней могут лежать сообщения в базе, после чего их можно удалить как старые при помощи утилиты crashmaint. Это отнюдь не все возможные настройки crashmail. Я многое намеренно не стал описывать из-за очень большого объема. Для более детального ознакомления с настройками почитайте комментарии в конфигурационном файле.
Итак, это было последнее, что нам оставалось сконфигурировать в crashmail. Настало время научиться пользоваться только что сконфигурированным тоссером.
Прежде чем запускать сам тоссер, нужно построить/скомпилировать нодлист. Для этого нам придется создать еще один конфигурационный файл (в нем мы определим список файлов-нодлистов) и после скопировать его в директорию, где, как мы прописали, лежит наш нодлист.
Создадим в этой директории файл cmnodelist.prefs и впишем в него всего две строчки:
net454.ndl
pnt454.ndl
Это имена файлов нодлиста и поинтлиста соответственно. И после этого запустим утилиту crashlist, которая сформирует индексы к данным нодлистам. Только после этой операции можно приступать к работе с crashmail.
Сам crashmail также имеет множество параметров, и мы не будем рассматривать их все, лишь необходимые для выполнения базовых операций по обработке почты.
В тот момент, когда необходимо разобрать входящую почту, мы выполняем команду:
./crashmail TOSS
В этом случае crashmail сканирует INBOUND директорию на предмет пакетов с почтой, распаковывает их и растасовывает сообщения по областям.
Когда мы в почтовом редакторе создали несколько сообщений и запустили следующую команду, crashmail просканирует свои базы на предмет сообщений, помеченных флагом UnSent, преобразует их в .pkt-файлы, заархивирует и положит в очередь отправки узлу, выбранному в соответствии с правилами роутинга:
./crashmail SCAN
Для того чтобы выполнить обе эти операции одновременно, можно выполнить следующее:
./crashmail TOSS SCAN
Именно в этом и состоит работа тоссера. Эти команды выгодно выполнять после работы ifcico, чтобы автоматизировать тоссинг входящей почты. Но написанием связывающих скриптов мы займемся уже после настройки всех частей Фидо-софта. Это также касается утилит, входящих с состав пакета CrashMail. Их работа будет рассмотрена несколько позже. А в следующей статье мы настроим редактор сообщений GoldEdit.
 
Автор: Алексей Литвинюк
 
Оригинал статьи: http://woweb.ru/publ/66-1-0-187