Во-первых, надо установить 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 service, определенный в файле 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 и маны.