Next Previous Contents

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

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

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

3.1 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 (не рекомендуется) или, во-вторых, добавьте -DPRE_21_LINUX в список опций компиляции.

Также есть FAQ в /etc/ifmail/misc, который вы можете изучить для решения возникших проблем.

Сейчас мы установим config файл ifcico. Вы найдете его пример в /etc/ifmail/misc/config. Скопируйте его в /etc/ifmail или в то место, которое былп указано в /etc/ifmail/CONFIG и подредактируйте его в соответствии со значениями вашей системы.

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

 
 #
 #            ФАЙЛ КОHФИГУРАЦИИ IFMAIL
 #
 # Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999
 #
 # $Id: Ifmail-HOWTO.sgml,v 1.1 2001/06/05 08:08:30 pax 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.<zone>'', а
 # пакеты для узлов из других доменов -- в ``<domain>.<zone>''.
 #
 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
 
 
 #
 ##      Преобразование имен
 #       -------------------
 
 #
 # Файл системных алиасов.  Его формат: 
 #
 # <имя-пользователя>  <FTN-адрес>
 #
 SysAlias /var/spool/ifmail/sysalias
 
 #
 # Доменное имя, добавляемое к имени пользователя при использовании
 # системных алиасов. 
 #
 MyFQDN pccross.msk.ru
 
 
 #
 # Если этот параметр указан (HЕ РЕКОМЕHДУЕТСЯ!), то в сообщениях,
 # адресованных соответствующему пользователю, будут искаться заголовки
 # RFC.  Если этот параметр не указан, то RFC-заголовки ищутся в начале
 # всех писем.
 #
 # MagicName UUCP
 
 
 #
 # Преобразование доменов.  Формат:
 #
 # DomTrans <FTN-домен> <RFC-домен>
 # 
 # При преобразовании происходит текстуальная замена первого
 # совпадающего 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   

3.3 Файл 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

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

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

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

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

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

Сейчас создаем подкаталоги ifmail в /var/spool/ifmail. Besides the standard /outbound/ for Fido you will have to create directorys for any other nets. Владельцем этих каталогов должен быть fnet.uucp, а права доступа 775. ifcico может также создать каталоги для отсутствующих сетей, но вам придется проверить и установить их права доступа.

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

 
 fnet:*:15:14::/etc/ifmail:/bin/bash
или
 fnet:*:15:14::/etc/ifmail:
Постоянно идут дебаты, по поводу необходимости иметь шелл. По причинам безопасности конечно, вам не стоит предоставлять возможность доступа к системе и использовать ifpoll для звонка на узлы вне вашей зоны.

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

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

Все нодлисты, как указано в 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

3.6 Пакеты ifmail

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

 
 .hlo         =   pkt заморожен
 .flo         =   pkt готов к отправке
 .clo         =   pkt is crash 
ifmail сохранит эти пакеты в подкаталогах, которые он создает используя сочетание ваших номеров сети/узла и номеров сети/узла адреса назначения.

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

Для дозвонки до линков я использую скрипт /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 [<node>]"
                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

3.8 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, также имеются маны.


Next Previous Contents
Используются технологии uCoz