HOWTO : fidonet software for unix

[ index ] [ inn ]
WARNING ! Это описание устаревшей версии 2.2.* и больше не будет обновляться. Все изменения будут вноситься в описание версии 2.3.*, которое находится на : http://howto.id.ru/inn.html
В настоящее время InterNetNews package (INN) разрабатывается консорциумом ISC, URL : http://www.isc.org/products/INN/. Здесь я опишу настройку INN версий 2.2.*.

Компиляция

Берем последнюю версию с ftp://ftp.isc.org/isc/inn/, например inn-2.2.1.tar.gz (на момент написания этого howto последней версией была 2.2.2, но в ней был глюк в программе batcher, что приводило к дупам у линков. Поэтому я, установив 2.2.2, взял batcher от 2.2.1), раскручиваем его в /usr/src/inn-2.2.1 : tar -xzvf inn-2.2.1.tar.gz, заходим в этот каталог. В дальнейшем я буду на него ссылаться как на $SRC. Условимся, что скомпилированный пакет будем устанавливать в /usr/local/news/.
Перед началом компиляции обязательно прочитайте файл INSTALL, убедитесь что у вас стоит Perl версии не ниже 5.004. Проверка версии : смотрим где он там у вас находится (whereis perl), затем /usr/bin/perl -v, или /usr/local/bin/perl -v.
Читаем ./configure --help, запускаем ./configure с понравившимися опциями. Я использовал такие : ./configure --enable-tagged-hash --with-perl. Если скрипт отработает нормально, то make ; make install. Все должно поставиться в /usr/local/news.

Настройка

В /etc/manpath.config добавляем
MANDATORY_MANPATH  /usr/local/news/man
Запустив vipw, проверяем наличие пользователя news. Домашним каталогом ему я поставил /usr/local/news, шеллом - /bin/sh. Это пригодилось при отладке.
Так как при тоссинге iftoss вызывает /usr/local/news/bin/rnews, то он (iftoss) должен иметь соответствующие права - rnews принадлежит news:uucp, поэтому надо будет прописать в /etc/group : uucp:*:66:fido
В /etc/syslog.conf раскоментируйте строчки с news.*, подправьте пути :
news.crit /usr/local/news/log/news.crit
news.err /usr/local/news/log/news.err
news.notice /usr/local/news/log/news.notice

и сделайте :
touch /usr/local/news/log/news.crit /usr/local/news/log/news.err /usr/local/news/log/news.notice
назначьте владельцем этих файлов news:news
Перезапустите syslogd : killall -1 syslogd
Переходим в /usr/local/news/etc.

Редактируем inn.conf, прочитав $SRC/INSTALL и man inn.conf (весьма желательно !). В простейшем случае достаточно будет изменить шесть строчек :
ваш Origin :
organization:  My Cool Origin
Адрес вашего сервера. Этот домен должен быть прописан в DNS. Если вы не подключены к интернету, то используйте localhost.
server: news.domain.my
pathhost: news.domain.my

Следующие строчки нужны для того, чтобы письма, приходящие в "неизвестные" для inn'а конференции не грохались, а помещались в ньюсгруппу junk, откуда потом их будут доставать всякие autocreate'ы
wanttrash: true
remembertrash: false

Если не ставить флаг -c0 (0 - это цифра, не буква), то inn будет отвергать письма, возраст которых более 14 дней. Флаг -u отключает буферизацию логов (это необходимо для ifmail'а).
innflags: -u -c0


Редактируем expire.ctl (необязательно) :
/remember/:14
Это число регулирует, сколько дней информация о каждом письме будет храниться в файле /usr/local/news/db/history (history - это аналог дупобазы в фидошных эхопроцессорах).
# Значение по умолчанию для всех эх
*:A:1:10:never
# Моя локалка - хранить вечно ;)
f99.local:A:never:never:never
# Местные эхи
orn.*:A:14:90:180
orn.test:A:1:1:1
orn.sysop.pvt:A:never:never:never
Смысл всех букв и цифр объясняется в самом начале expire.ctl. Настраивайте в зависимости от объема свободного места на вашем диске. Имейте в виду, что оно обычно кончается гораздо быстрее чем предполагалось ;)
Прочитайте man expire.ctl

Если вы будете читать почту ньюсридером по локальной сетке, то надо будет отредактировать nnrp.access :
admin.localhost:Read Post:admin:mypassword:*
fin.localhost:Read:buh:pwd3:ru.1csoft,ru.accounting
tech.localhost:Read Post:tech:pwd4:su.hardw.*
10.1.0.0/16:Read:::local.official

Здесь прописываете доступ для машин в локальной сетке - кому r/w, кому r/o, имя/пароль для авторизации, и список доступных ньюсгруп через запятую. Прочитайте комментарии в файле. Прочитайте man nnrp.access.
Позже, когда вы запустите inn, то сможете попробовать зайти с локальной машины на ньюссервер телнетом :
$ telnet news.domain.my 119
Если данная машина корректно прописана в nnrp.access, то появится что-то вроде :
200 news.domain.my InterNetNews NNRP server INN 2.2.1 25-Aug-1999 ready (posting ok).
или
201 news.domain.my InterNetNews NNRP server INN 2.2.1 25-Aug-1999 ready (no posting).
Если она в nnrp.access не прописана, то появится :
502 You have no permission to talk. Goodbye.

Теперь редактируем файл newsfeeds. Это наиболее часто изменяемый файл из всех конфигов inn'а, в нем расписано от кого вы получаете эхи и кому их отдаете.
Сначала прочитайте комментарии в этом файле, затем можете подкорректировать секцию ME (я убрал оттуда все лишнее) :
ME:*,!junk,!control*,!f99.*::
В каком-то FAQ рекомендовалось прописать "фиктивный" feed. Пропишите, хуже от этого не будет :
dummy-feed:!*::
Далее описываем линков. Обратите внимание на то, что адреса нужно писать с указанием зоны (z2).
В простейшем случае у вас будут только фидошные эхи и локалка :

Это наш аплинк
f500.n5058.z2:!*,\
  orn.*,\
  uplink.local,\
  su.os2, \
  su.os2.apps,\
  f99.local,\
  [...]
  :Tf,Wfb,B4096/1024:


Это себе, несколько эх на домашний пойнтовый адрес
p1.f99.n5058.z2:!*,\
  f99.local, \
  f99.notify, \
  orn.naezd, \
  ru.unix.bsd, \
  :Tf,Wfb,B4096/1024:


А здесь другой пойнт
p2.f99.n5058.z2:!*,\
  f99.local,\
  f99.notify,\
  ru.sex, \
  tyt.bce.hacpem, \
  [...]
  :Tf,Wfb,B4096/1024:


А этот пойнт автоматом подписан на всё. (убран '!' перед '*')
p3.f99.n5058.z2:\
  *,\
  :Tf,Wfb,B4096/1024:


А этот feed подписан на все эхи - он просматривает все сообщения, ищет адресованные мне и откладывает их в carboncopy (настройка описана в Части 4, раздел carboncopy)
cc:\
  !my.cc,\
  !uplink.local,\
  !junk,\
  !f99.local,\
  *,\
  :Tm:ccmailer

ccmailer:\
  !*\
  :W*,Tp:/usr/local/news/bin/carboncopies *

Посмотрите на описания флагов (T,W,B,<,>,C,:) - с их помощью можно делать много забавных вещей.
Прочитайте man newsfeeds

Переходим в /usr/local/news/db и создаем базы :
Создаем файл active, для начала состоящий из двух строчек :
control 0000000000 0000000001 n
junk 0000000000 0000000001 n

в этом файле не должно быть пустых строк (!)
Создаем файл newsgroups, содержащий описания конференций (в общем-то необязательные)
control control
junk badmail

Создаем базу history :
/usr/local/news/bin/makehistory -i
переименовываем полученные файлы :
mv history.n.dir history.dir
mv history.n.hash history.hash (если он создался)
mv history.n.pag history.pag

Устанавливаем права на файлы в /usr/local/news/db :
chown news:news *
chmod 0664 *

Базы готовы.

Произведем пробный запуск inn'а (от имени пользователя news) :
su news -c /usr/local/news/bin/rc.news
При этом на экране появится нечто вроде :
Starting innd.
Scheduled start of /usr/local/news/bin/innwatch

А в /usr/local/news/log появится файл news.notice (если вы его включили в /etc/syslog.conf) с содержимым типа :
Nov  1 23:08:24 domain.my innd: SERVER descriptors 520
Nov  1 23:08:24 domain.my innd: SERVER outgoing 507
Nov  1 23:08:24 domain.my innd: SERVER ccsetup control:11
Nov  1 23:08:24 domain.my innd: SERVER lcsetup localconn:13
Nov  1 23:08:24 domain.my innd: SERVER rcsetup remconn:4
Nov  1 23:08:24 domain.my innd: dummy-feed opened dummy-feed:15:file
Nov  1 23:08:24 domain.my innd: f500.n5058.z2 opened f500.n5058.z2:16:file
Nov  1 23:08:24 domain.my innd: p1.f99.n5058.z2 opened p1.f99.n5058.z2:17:file
Nov  1 23:08:24 domain.my innd: p2.f99.n5058.z2 opened p2.f99.n5058.z2:18:file
Nov  1 23:08:25 domain.my innd: SERVER perl filtering enabled
Nov  1 23:08:25 domain.my innd: SERVER renumbering
Nov  1 23:08:50 domain.my innd: SERVER starting

В живости innd можно убедиться, запустив ps :
$ ps -ax -Unews
  PID  TT  STAT      TIME COMMAND
  188  ??  Is     0:28.84 /usr/local/news/bin/innd -p4 -r -u -c0
  250  ??  I      0:00.01 sleep 120
  189 con- I      0:00.00 /bin/sh /usr/local/news/bin/rc.news
  193 con- I     15:29.37 /bin/sh /usr/local/news/bin/innwatch


Обычно inn запускают при загрузке системы из /usr/local/etc/rc.d/innd.sh :
su news -c /usr/local/news/bin/rc.news

В /usr/local/news создайте файлик news.cron (отредактировав его, не забывайте запускать crontab -u news news.cron) с содержимым :
0 3 * * * /usr/local/news/bin/news.daily expireover lowmark
1,11,21,31,41,51 * * * * /usr/local/news/bin/nntpsend
*/3 * * * * /usr/local/news/bin/rnews -U

Если у вас нет чисто usenet'овских линков, то строчку с nntpsend можно выкинуть. Если вы выключаете компьютер на ночь, проставьте в первой строчке подходящее время для запуска. Прочитайте конец файла $SRC_INN/INSTALL - там все это описано поподробнее.

В идеале, все ваше взаимодействие с inn ограничится добавлением/убавлением линков и корректировкой их подписки в файле newsfeeds. Я бы не советовал делать это руками, лучше довериться areafix'у - по крайней мере, при правильной настройке вы сможете избежать грубых технических ошибок. Но несколько команд для "ручной" работы я здесь упомяну.

Практически все управление осуществляется программой /usr/local/news/bin/ctlinnd (при работающем innd). Прочитайте man ctlinnd. Перед тем, как менять какой-либо конфиг (типа newsfeeds, active) необходимо приостановить innd командой "ctlinnd pause причина". В данном случае "причина" - это слово(слова), которые попадут в news.notice, и которые понадобятся для "разморозки" innd. После изменения конфигурационных файлов необходимо их перечитать командой "ctlinnd reload имя_конфига причина", например :
# Ставим на паузу
ctlinnd pause Sysop edit active
# редактируем
vi active
# перечитываем конфиг. Если хотите заставить innd перечитать ВСЕ конфиги,
# то вместо имени конфига (active) укажите слово all
ctlinnd reload active Reload after edit
# Снимаем innd с паузы, при этом "причина" должна быть та же что и при постановке
ctlinnd go Sysop edit active
Теперь посмотрите лог news.notice. Там появятся строчки типа :
Feb 30 17:54:22 domain.my innd: SERVER paused Sysop edit active
Feb 30 17:54:56 domain.my innd: dummy-feed closed
Feb 30 17:54:56 domain.my innd: f500.n5058.z2 closed
Feb 30 17:54:56 domain.my innd: p1.f99.n5058.z2 closed
Feb 30 17:54:56 domain.my innd: dummy-feed opened dummy-feed:10:file
Feb 30 17:54:56 domain.my innd: f500.n5058.z2 opened f500.n5058.z2:14:file
Feb 30 17:54:56 domain.my innd: p1.f99.n5058.z2 opened p1.f99.n5058.z2:15:file
Feb 30 18:07:56 domain.my innd: SERVER reload active Reload after edit
Feb 30 18:08:05 domain.my innd: SERVER running
Если вы редактируете newsfeeds, то по окончании редактирования, перед запуском ctlinnd reload сначала запустите ctlinnd checkfile - он проверит синтаксис newsfeeds.
Для ручного добавления новых конференций, удаления старых используются команды :
Добавление группы - ctlinnd newgroup имя_группы флаг, например :
ctlinnd newgroup fido7.su.os2.apps y
ctlinnd newgroup fido7.humor.filtered n
Описание флагов - в man active. Вкратце : "y" - r/w, "n" - r/o.
Удаление группы :
ctlinnd rmgroup имя_группы

Для автосоздания новых эхоконференций, падающих обычно в junk (во всяком случае при вышеописанной настройке они должны падать именно туда ;) используйте программы autocreate'ы, описанные в Части 4, раздел autocreate

Более подробно об автоматизации прозвонки, тоссинга, обработки файлэх, и прочего рассказано в Части 5 - совместная работа.
Hints :
This is a part of "HOWTO : fidonet software for unix", http://howto.id.ru
Original of this document is located at http://howto.id.ru/inn.2.2.html
Copyright (c) Vitaly Kuharev, 2:5058/49@fidonet, 1999-2000
Last updated : 14 nov 2000