Основной процесс - innd.
Крутится все время, ожидая и
принимая поток статей по NNTP от
соседей, пропуская через фильтры. Ведет
список групп (active), список статей (history, history index),
сами статьи (spool), базу
заголовков статей - overview(.NOV), пакеты
статей для рассылки соседям (batch),
журналы. Для
управления работой innd "на ходу"
(добавление/удаление
групп/статей/соседей,
изменение параметров работы и т.д.) служит
программа ctlinnd. При
получении соединения не от соседа, а от
клиента (для чтения статей),
запускается nnrpd, который может
только читать из баз данных. Для
буферизации доступа к active
используется actived. Чтобы
послать статью он (м.б.
пропуская ее через фильтр)
запускает inews, который
взаимодействует с innd (только innd
может писать в базы данных). Базу данных overview
ведет программа overchan.
Удалением старых статей
занимаются expire и expireover (для overview),
которые не прерывают работу innd (разве что на
минуточку).
Накопленный пакет для рассылки статей
соседям
рассылается innxmit
(подготавливается nntpsend) или с
помощью innfeed без
образования пакетов. innwatch
присматривает за
использованием ресурсов (диск, CPU) и в
случае перегрузки
останавливает innd.
Обработка журналов: cron
ежедневно запускает news.daily,
который запускает expire
(который готовит список статей для
удаления и правит active и history;
реальное удаление
происходит с помощью fastrm), scanlogs (rotate logs и
запуск innreport).
Картинка от
Елены Самсоновой.
Управляющие сообщения
Представляет собой обычную статью, в
обычной группе, имеющую
заголовок "Control:". Встретив такую статью, innd
обрабатывает команду и
сохраняет статью:
cancel Message-ID
(обрабатывается самим innd)
иначе первое слово
рассматривается как имя
программы (ищется в
директории ${BIN}/control. Если
программа не
существует, то
вызывается программа default.
Сообщения
запоминаются в
псевдогруппе control
(включается в active). Если создать
подгруппу
control.имя-команды, то все
соответствующие статьи будут
помещаться в эту подгруппу (очень
рекомендуется создать control.cancel, control.newgroup, control.rmgroup,
control.checkgroups).
Отличия 2.2.1 от 1.5.1
autoconf
многие параметры
перенесены из этапа сборки в inn.conf
статьи могут храниться разными
способами (как раньше, cnfs -
несколько статей
упихивается в один файл, timehash - статьи
хранятся в отдельных файлах, но имена
подбираются для более быстрого доступа)
новый dbz (ускорение работы с history)
переделан overview (mmaped)
nnrpd: работа в режиме демона
nnrpd:
отслеживание клиентов
nnrpd: LIST MOTD
nnrpd:
преобразование
заголовков на ходу (с доступом к телу)
nnrpd: X-Trace и X-Complaints-To
nnrpd: NNTP-Posting-Host и NNTP-Posting-Date
nnrpd: управление потоком
посылаем статей (борьба со своими
спамерами)
nnrpd: позволяет удалять CC, BCC и To
innd и nnrpd можно
привязывать к
произвольному
адресу/порту
пакетирование
управляющих сообщений (борьба со
штормом)
inndf
cnfsstat
news2mail
mailpost (mail to news)
pullnews (отбор news через nnrp вместо feed)
Установка INN 1.5.1/Solaris 2.5
Установка inn 1.5.1 (Solaris 2.5,
perl 5.0.3 (у меня 4.0.1.8, в
дальнейшем заменен на 5.005_02); tcl 7.4 (7.5
не работает) - у меня, по-моему, 7.3 (в
дальнейшем заменен на 8.0); pgp (не
установлен):
создаем группу news, group id
(например) 300, добавляю себя в список членов
группы (удобства ради ;)
создаем
пользователя news, user id
(например) 300, primary group - 300, secondary - sys (а
надо ли?), shell - /bin/sh, account locked (на
всякий случай), домашняя
директория - /home/news
копируем в /home/news inn-1.5.1.tar.gz и
развертываем его.
печатаем
руководство по
установке:
groff -mgs Install.ms.1 | ps2pcl | lp
groff -mgs Install.ms.2 | ps2pcl | lp
строим subst
проверяем, что у нас
нормальный sed:
cd config
cp config.dist config.data
make sedtest
увы :( у нас sed
дефективный (Solaris 2.5 - это
называется солидная фирма!)
компилируем C-шную версию:
cd config
cp config.dist config.data
make c quiet
вроде работает
редактируем config.data: файл состоит из строк
вида:
параметр<одна или более табуляция>значение
если значение пусто, то
табуляция все равно д.б.
#
комментарий
показаны только
отклонения от
поставляемой
конфигурации (под BSD)
## Flags for the "cc -o" line; e.g., -Bstatic on SunOS4.x while debugging.
#### =()<LDFLAGS @<LDFLAGS>@>()=
LDFLAGS -g
## If you need to link in other libraries, add them here.
## On NetBSD and FreeBSD, you must add the -lcrypt directive here
## -lutil on BSD/OS gives you setproctitle() see HAVE_SETPROCTITLE.
#### =()<LIBS @<LIBS>@>()=
LIBS -lsocket -lnsl -lelf
## Flags for lint. AIX wants "-wkD"; it and others don't want "-z".
#### =()<LINTFLAGS @<LINTFLAGS>@>()=
LINTFLAGS -b -h $(DEFS)
#### =()<LINTFILTER @<LINTFILTER>@>()=
LINTFILTER | sed -n -f ../sedf.sysv
## Where various manpages should go
#### =()<MAN1 @<MAN1>@>()=
MAN1 /usr/local/man/man1
#### =()<MAN3 @<MAN3>@>()=
MAN3 /usr/local/man/man3
#### =()<MAN5 @<MAN5>@>()=
MAN5 /usr/local/man/man5
#### =()<MAN8 @<MAN8>@>()=
MAN8 /usr/local/man/man8
журнализация: пусть пока все будет как есть
(должен
сбрасываться в разл. файлы),
═добавляем в /etc/syslog.conf:
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice /var/log/news/news.notice
news.crit /dev/console
news.warning /var/log/news/news.warning
news.debug /var/log/news/news.debug
news.info /var/log/news/news.info
и
перезапускаем syslog
(предварительно файлы создав ручками и с
правами под news!)
принадлежность и права на файлы:
## Who gets email from news.daily and about control messages.
#### =()<NEWSMASTER @<NEWSMASTER>@>()=
NEWSMASTER news
C- библиотека:
## Worst-case alignment, in order to shut lint up
#### =()<ALIGNPTR @<ALIGNPTR>@>()=
ALIGNPTR long
## Type of variables can be modified in a signal handler? sig_atomic_t
#### =()<SIGVAR @<SIGVAR>@>()=
SIGVAR int
## Use flock, lockf, or nothing to lock files?
## Pick FLOCK, LOCKF, FCNTL, or NONE
#### =()<LOCK_STYLE @<LOCK_STYLE>@>()=
LOCK_STYLE LOCKF
## Do you have setproctitle()? Pick DO or DONT.
## You may need to adjust LIBS for this.
#### =()<HAVE_SETPROCTITLE @<HAVE_SETPROCTITLE>@>()=
HAVE_SETPROCTITLE DONT - надеюсь
## Does your (struct tm) have a tm_gmtoff field? Pick DO or DONT.
#### =()<HAVE_TM_GMTOFF @<HAVE_TM_GMTOFF>@>()=
HAVE_TM_GMTOFF DONT
## How to fork? Pick fork or vfork.
#### =()<FORK @<FORK>@>()=
FORK fork
## How should close-on-exec be done? Pick IOCTL or FCNTL.
#### =()<CLX_STYLE @<CLX_STYLE>@>()=
CLX_STYLE FCNTL
## How to get number of available descriptors?
## Pick GETDTAB, GETRLIMIT, SYSCONF, ULIMIT, or CONSTANT.
#### =()<FDCOUNT_STYLE @<FDCOUNT_STYLE>@>()=
FDCOUNT_STYLE SYSCONF
отсутствующие
библиотеки: нет
разное
## Require posts to have under 50% inclusion (">") lines? Pick DO OR DONT.
## (This is only for inews and nnrpd.)
#### =()<CHECK_INCLUDED_TEXT @<CHECK_INCLUDED_TEXT>@>()=
CHECK_INCLUDED_TEXT DONT
## Largest acceptable article size; 0 allows any size
#### =()<MAX_ART_SIZE @<MAX_ART_SIZE>@>()=
MAX_ART_SIZE 10000000L
## Verify that the poster is the person doing the cancel? Pick DO or DONT.
## (Can't do this if cancel arrives before the article does, by the way,
## in which case the early cancel will be ignored.)
#### =()<VERIFY_CANCELS @<VERIFY_CANCELS>@>()=
VERIFY_CANCELS DO
## File unknown "to.*" groups into the "to" newsgroup? Pick DO or DONT.
#### =()<MERGE_TO_GROUPS @<MERGE_TO_GROUPS>@>()=
MERGE_TO_GROUPS DO
## Record rejected articles in history? Pick DO or DONT.
#### =()<REMEMBER_TRASH @<REMEMBER_TRASH>@>()=
REMEMBER_TRASH DONT
## Log by host IP address, rather than from Path line?
#### =()<IPADDR_LOG @<IPADDR_LOG>@>()=
IPADDR_LOG DONT
## Should INN do some setsockopts on network connections. Pick DO or DONT.
## Some versions of Solaris should set to DONT (pre 2.4 it seems)
#### =()<SET_SOCKOPT @<SET_SOCKOPT>@>()=
SET_SOCKOPT DONT
пути к программам:
## Where the raison d'etre for this distribution lives.
#### =()<_PATH_INND @<_PATH_INND>@>()=
_PATH_INND /usr/local/news/bin/innd
## Where the optional front-end that exec's innd lives.
#### =()<_PATH_INNDSTART @<_PATH_INNDSTART>@>()=
_PATH_INNDSTART /usr/local/news/bin/inndstart
## Where news boot-up script should be installed.
#### =()<_PATH_NEWSBOOT @<_PATH_NEWSBOOT>@>()=
_PATH_NEWSBOOT /usr/local/news/bin/rc.news
## Where sendmail, or a look-alike, lives.
## The -t is optional and says to read message for recipients
#### =()<_PATH_SENDMAIL @<_PATH_SENDMAIL>@>()=
_PATH_SENDMAIL /usr/lib/sendmail -t
## Where the compress program lives.
#### =()<_PATH_COMPRESS @<_PATH_COMPRESS>@>()=
_PATH_COMPRESS /usr/local/bin/gzip
## What extension your compress appends
#### =()<_PATH_COMPRESSEXT @<_PATH_COMPRESSEXT>@>()=
_PATH_COMPRESSEXT .gz
## Where egrep lives (you might need the FSF one; see scanlogs)
#### =()<_PATH_EGREP @<_PATH_EGREP>@>()=
_PATH_EGREP /usr/local/bin/egrep
## Where inews lives.
#### =()<_PATH_INEWS @<_PATH_INEWS>@>()=
_PATH_INEWS /usr/local/news/bin/inews
## Where rnews lives.
#### =()<_PATH_RNEWS @<_PATH_RNEWS>@>()=
_PATH_RNEWS /usr/local/news/bin/rnews
## Where the NNRP server lives.
#### =()<_PATH_NNRPD @<_PATH_NNRPD>@>()=
_PATH_NNRPD /usr/local/news/bin/nnrpd
## The path of the process run when an unknown host connects to innd.
## Usually the same as _PATH_NNRPD, but may be, e.g., the path to
## nntpd from the reference implementation.
#### =()<_PATH_NNTPD @<_PATH_NNTPD>@>()=
_PATH_NNTPD /usr/local/news/bin/nnrpd
## Where the NNQR server lives. Make same as _PATH_NNRPD for now
#### =()<_PATH_NNQRD @<_PATH_NNRPD>@>()=
_PATH_NNQRD /usr/local/news/bin/nnrpd
## Where most other programs live.
## See also _PATH_RNEWSPROGS and _PATH_CONTROLPROGS, below.
#### =()<_PATH_NEWSBIN @<_PATH_NEWSBIN>@>()=
_PATH_NEWSBIN /usr/local/news/bin
## Where temporary files live on the server
#### =()<_PATH_TMP @<_PATH_TMP>@>()=
_PATH_TMP /tmp
## Command to send mail (with -s "subject" allowed)
#### =()<_PATH_MAILCMD @<_PATH_MAILCMD>@>()=
_PATH_MAILCMD /usr/bin/mailx
## Where scripts should have shlock create locks.
#### =()<_PATH_LOCKS @<_PATH_LOCKS>@>()=
_PATH_LOCKS /var/local/news/locks
## Where your GNU gzip binary is (for rnews to run on gzipped batches).
#### =()<_PATH_GZIP @<_PATH_GZIP>@>()=
_PATH_GZIP /usr/local/bin/gzip
пути к спулу (создать
директорию /news_mirror/news и линк на нее: /var/news)
## Where rnews creates temporary files until finished
#### =()<_PATH_SPOOLTEMP @<_PATH_SPOOLTEMP>@>()=
_PATH_SPOOLTEMP /tmp
пути программ,
вызываемых из innd и rnews
## Rnews may execute any program in this directory; see RNEWSPROGS.
#### =()<_PATH_RNEWSPROGS @<_PATH_RNEWSPROGS>@>()=
_PATH_RNEWSPROGS /usr/local/news/bin/rnews.libexec
## Path to control messages scripts.
#### =()<_PATH_CONTROLPROGS @<_PATH_CONTROLPROGS>@>()=
_PATH_CONTROLPROGS /usr/local/news/bin/control
сокеты (без изменений, т.к. есть ссылка /var/news -> /bbs_cd2/news
журнал и файлы
конфигурации:
конфигурация innwatch:
впоследствии вручную заменил в innwatch.ctl
шаблоны (не сами строки)
обращения к df на свой inndf
## How inn (not just innwatch anymore) gets disk space usage
## (SVR4 machine would probably use /usr/ucb/df)
#### =()<INNWATCH_DF @<INNWATCH_DF>@>()=
INNWATCH_DF /usr/local/bin/df
## Field number of INNWATCH_DF (with -i) output that gives free
## inodes (starting at 1).
#### =()<INNWATCH_INODES @<INNWATCH_INODES>@>()=
INNWATCH_INODES 4
TCL пока не включаем
PGP пока не включаем
локальная
конфигурация
## Home of the NEWSUSER
#### =()<_PATH_NEWSHOME @<_PATH_NEWSHOME>@>()=
_PATH_NEWSHOME /usr/local/news
actsync - пока не
разбирался
perl пока не включаем - нужна версия 5.003, а у меня 4 (не
отломятся ли какие мои скрипты от
перехода?)
В этом чертовом Солярисе poll
работает не совсем так, как ожидает inn
(заточенный под BSD), в файлах innd/chan.c и innd/nc.c уже
поставлена заплатка
#ifdef POLL_BUG
...
#endif
но, к сожалению, POLL_BUG нигде не
определяется, пришлось мне
вставить в innd/innd.h:
#ifdef SUNOS5
#define POLL_BUG
#endif
после этого все ошибки (cant read Resource temporaly unavailable,
приводящие к разрыву
соединения), исчезли.
Добавляем /usr/ccs/bin в PATH и
говорим:
cd $inn
make world
Злобно ругается насчет lint, ну и пусть!
cat */lint
Ошибок быть не должно.
Конфигурируем (только один раз!):
cd $inn/site
make all
(копируются образцы файлов с
описанием
конфигурации из samples)
Создаем структуру
директорий (только один раз! если что
поменять,
выпутывайся сам):
cd $inn
chmod u+x makedirs.sh
становимся
суперпользователем и
запускаем
makedirs.sh -p
устанавливаем софт
(опять-таки из-под
суперпользователя) - заметьте, что файлы с
конфигурацией не
устанавливаются:
cd $inn
make update
(inndstart должен
принадлежать
суперпользователя - сделай это ручками)
Теперь заходим в $inn/site и правим там все файлы
конфигурации ;)
как
обрабатывать
управляющие сообщения
checkgroups - не менять
control.ctl - убрать проверку PGP,
которой пока нет
default - не менять
docheckgroups - не менять
ihave - не менять
newgroup - не менять
parsecontrol - не менять
rmgroup - не менять
sendme - не менять
sendsys - не менять
senduuname - не менять
version - без изменений
writelog - без изменений
pgpverify - не трогать
скрипты, вызываемые из cron или при
загрузке
innlog.pl - был innlog.awk: что
делать?
innstat - не менять
news.daily - вставить мой кусок,
связанный со сбором имен
news-серверов
rc.news - не менять
scanlogs - добавить подсчет объемов статей,
полученных из разных
источников (в оригинале
считается только
количество статей) awk '{print $5, $7}' | sort | awk -f sum.awk
tally.control - не менять
tally.unwanted - не менять
утилиты для посылки статей
соседним серверам
nntpsend - не трогать
nntpsend.ctl - не трогать
send-ihave - не менять
send-nntp - не менять
send-uucp - не трогать
sendbatch - не трогать
локальная
конфигурация:
expire.ctl - здесь надо проявить бездну
фантазии
hosts.nntp - здесь
перечислены имена хостов, которые будут нас
питать (ns.aha.ru, news.demos.su, news.rosprint.net, deolws.deol.ru),
для всех других адресов будет
запускаться nnrpd
inn.conf - сведения о сервере
moderators - не трогать
newsfeeds - это основной файл,
описывающий, что принимать (ME), и
что/кому/как
пересылать, так что
тщательнЕе!
nnrp.access - адреса и пароли, кому что можно
читать и писать (с auth
разобраться)
passwd.nntp - а это еще зачем?
полезные утилиты (все потом):
inncheck
innwatch
makegroup
innreport
scanspool
теперь
устанавливаем конф. файлы на места:
cd $inn/site
make install
откуда-то берем файл active
а так делают history с нуля:
touch $HISTORY
cd ${HISTORYDIR}
${NEWSBIN}/makehistory -r -i
mv history.n.dir history.dir
mv history.n.pag history.pag
теперь можно вставить rc.news
куда-нибудь в /etc/rc2.d/S99news и
запустить его (параметра start нет)
INN 2.2.1 на Red Hat Linux 6.0 ( +update)
Требует Perl 5, PGP, Tcl.
Группа - news (13). Добавить себя в нее.
Пользователь news (9), без пароля,
домашняя директория - /var/spool/news.
Основные затраты на емкость диска: /var/lib/news
(управляющие БД - active, history и т.п.), /var/log/news, /var/spool/news
(сами статьи, архивы, очереди -
перенести на самый быстрый и емкий диск, а лучше RAID, и
сделать link).
Сделать 3 дырки в firewall:
дырку в локальной защите хоста
доступ из Интернет на данный хост к 119 порту
доступ клиентов на данный хост к 119 порту
Приходит в виде пакетов:
inn-2.2.1-1
задачи для cron (
/etc/cron.daily/inn-cron-expire (/usr/bin/news.daily delayrm;
добавить параметры: norenumber, expireover и имена
своих программ)
/etc/news/actsync.cfg
(конфигурация actsync -
автоматическое изменение списка newsgroup)
/etc/news/actsync.ign ( -//- )
/etc/news/control.ctl (как
обрабатывать
управляющие
сообщения)
команда-или-all:шаблон-email-в-стиле-shell-case:шаблон-имени-группы-в-стиле-shell:действие
Строки
просматриваются по порядку.
Используется последняя
подошедшая.
Возможные действия:
doit
doifarg
doit=отдельный-журнал
doit=mail
doit= (без
журнализации)
drop
verify-...
log (запись в журнал - errlog)
log=отдельный-журнал
mail
Если не установлен PGP, то
безопаснее всего
сделать
all:*:*:drop
т.е. не делать никакой
обработки вообще (остаток файла
удалить, а не
закомментировать, чтобы быстрее
обрабатывался ;)
/etc/news/cycbuff.conf
(конфигурация метода хранения CNFS, если он
вообще
используется)
/etc/news/distrib.pats
(используется
программами посылки статей - типа inews - для
определения области
распространения статьи -
заголовок Distribution:; область
распространения
определяется по шаблону newsgroup и
приоритету, если группа
подпадает под несколько шаблонов; пусть будет
пустой)
/etc/news/expire.ctl
(управляющий файл для expire -
удаление старых статей; метод
хранения CNFS
самостоятельно удаляет старые статьи;
определяется также сколько времени
хранить в history
информацию о уже удаленных или
отвергнутых
статьях: /remember/:дней
остальные строки задают шаблоны для
вычисления времени хранения статьи из
определенной группы
(используется последняя
подходящая строка); надо
аккуратно
распределить имеющееся место на диске с
учетом флуктуаций объема feed-а и объема
отдельных иерархий и их
полезности (fido, relcom - две недели,
бинарники - два дня и
т.п.): шаблоны-имени-группы-через-запятую:флаг:min:default:max
где
шаблон как в sh
флаг
A (все группы)
M (только
модерируемые)
U (только
немодерируемые)
X (все группы, если статья было послана в
несколько групп и попала под данный шаблон, то
удалить ее ме только из данной группы, но и из всех
остальных; очень удобно для
вычищения бинарников изо всех
кросспостингов - expire
ругается на этот флаг)
min
(минимальное число дней хранения -
плавающее число или never)
default (число дней хранени по
умолчанию - плавающее число или never)
max
(максимальное число дней хранения -
плавающее число или never)
/etc/news/incoming.conf (кому
разрешено питать нас; раньше был hosts.nntp;
определяются значения по
умолчанию, для отдельных хостов и групп;
значения задаются в виде: имя,
двоеточие, пробел, значение:
hostname: список полных
доменных имен хостов или
десятичных IP-адресов через запятую
streaming: true | false
(разрешен ли потоковый режим feed-а; по
умолчанию - да)
max-connections:
максимальное число
параллельных
соединений; по умолчанию - 0 -
бесконечность)
password:
patterns: шаблон (как в newsfeeds) групп,
принимаемых с этого хоста; по
умолчанию: *
email:
зарезервировано
comment:
зарезервировано
skip:
зарезервировано
noresendid: true | false (должен ли innd
посылать ответ "431 RESENDID" в
потоковом режиме и "436 Retry later" в
непотоковом в ответ на попытку соседа
послать статью, которая уже была
принята от другого соседа; по
умолчанию - false; говорят полезно, если сосед
использует innfeed -
включить?)
Отдельно стоящие значения задают
значения по умолчанию.
Отдельный сосед, которому
позволено питать нас,
описывается в виде: peer имя
{ ═значения }
Могут быть определены группы хостов,
состоящие из хостов и
вложенных групп: group имя
{
═значения по умолчанию для группы или
описание соседа или описание
подгруппы }
/etc/news/inn.conf (основной
конфигурационный файл; по одной строке на
параметр: имя, двоеточие, пробел,
значение;
рекомендуется пройтись по inn.conf(5) и
заполнить все 150
параметров)
fromhost
(подставляется в заголовок From:
локальных статей)
moderatormailer (имя хоста,
содержащего таблицу алиасов для
отправки статей
модераторам групп; лучше вместо этого
использовать файл moderators)
organization (этот текст будет
подставляться в заголовок Organization:
локальных статей)
pathhost (этот текст будет
добавляться в заголовок Path всех
проходящих статей)
server (когда nnrpd хочет послать статью и не
находит локальный NNTP сервер;
используется также nntpget, getlist и actsync)
domain
overviewmmap (будут ли expire, nnrpd и makehistory
использовать mmap для доступа к overview; для Linux - true)
storageapi (false для
традиционного метода хранения статей; true - для
хешированных имен или
кольцевых буферов -cnfs)
традиционный метод - каждая статья в
отдельном файле; каждая группа - в
директории с
соответствующим именем; самый
медленный метод, но легко
управляемый и работают все
стандартные и
нестандартные утилиты
хешированные имена - каждая статья
хранится в отдельном файле, но имена
выбираются исходя из
ускорения доступа к файлам; чуть
быстрее, но некоторые утилиты могут не
работать
CNFS - все статьи
сваливаются в кольцевые буфера; есть
возможность
группировки статей по
определенным критериям; когда место
заканчивается, то старые статьи
автоматически стираются; expire не нужен; самый
быстрый; трудно управлять
временем хранения статей;
подозреваю, что не все ошибки
вычищены;
нестандартные утлиты не работают
maxforks: 10
maxartsize
(максимальный размер статьи,
интересный вопрос, по
умолчанию - 1000000)
nicenewnews (0; давать еще более низший
приоритет nnrpd,
обрабатывающему команду newnews)
mta (программа,
используемая для посылки почтой
модерируемых статей и в innmail;
установлено /usr/sbin/sendmail -oi %s, но не
проверено)
mailcmd (программа для посылки отчетов и при
обработке
управляющих сообщений, обычно innmail)
verifycancel (проверять, что cancel выдает тот же
человек, что и исходное
сообщение; по
обратному адресу?)
logcancelcomm
(сбрасывать в syslog
сообщения о
выполнении cancel - не надо)
wanttrash (сохранять статьи для
несуществующей группы в группе junk - не стоит)
remembertrash
(запоминать
отвергнутые статьи в histoty)
linecountfuzz
(исправлять ли заголовок Lines: -
оставить 0 - не
исправлять)
logartsize
(запоминать в журнале размер статьи)
logipaddr (сбрасывать в журнал -
какой? - IP-адрес
вместо значения из
заголовка Path:; у меня
включено, но IP-адреса я нигде на нашел)
logsitename (сохранять имя хоста в
журнале полученных статей - /var/log/news/news)
overviewname (имя файла для
хранения overview; для каждой группы - свой; по
умолчанию - .overview)
extendeddbz (ускоряет работу с overview за счет
увеличения втрое dbz файла; требует storageapi; не
работает при DBZ TAGGED HASH)
nnrpdoverstats
(сбрасывать в syslog
статистку overview для nnrpd)
storeonxref (при
использования
нестандартного метода хранения
использовать Xref: вместо Newsgroup:)
nnrpdcheckart (nnrpd будет не только читать overview, но и
проверять реальное наличие статьи)
storemsgid (хранить Message-ID в history)
usecontrolchan
(использовать канал для
обработки
управляющих статей (кроме cancel) вместо
запуска отдельных программ; требует
конфигурации controlchan в newsfeeds и
существования группы control.cancel;
включить, если будет
замечен "шторм", с которым сервер не
справится)
mergetogroups (сливать to.* в to,
зачем?)
keywords, keylimit, keyartlimit, keymaxwords -
генерация (индекса?) ключевых слов в overview; д.б.
включен при
компиляции; при изменении
небходимо
пересобрать overview (это где-то
используется?)
refusecybercancel
(отвергать статьи, Message-ID, которых
начинается с cancel)
activedenable, activedupdate,
activedport═(использовать
вспомогательный процесс для
буферизации доступ nnrpd к файлу active,
включить)
noreader (если включить, то innd
перестанет запускать nnrpd для каждого
соединения,
запрошенного с
непитающего хоста; полезно, если у нас
транзитный узел или nnrpd
запускается как демон)
pathnews, pathbin, pathfilter, pathcontrol, pathdb, pathetc, pathrun, pathlog,
pathhttp, pathtmp, pathspool, patharticles, pathoverview, pathoutgoing,
pathincoming, patharchive, pathuniover - что где
лежит (pathtmp д.б. на том же разделе, что и pathincoming, ибо
делается rename)
backoff*
(ограничение на
количество статей,
посылаемых локальными
клиентами с помощью nnrpd,;думаю, что backofftrigger = 100
достаточно)
readertrack (можно
использовать, чтобы
отслеживать кто именно пользует nnrpd, если
динамически
генерировать nnrpd.track)
strippostcc (nnrpd будет обрезать To:, Cc: и Bcc:)
nnrpperlauth
(аутентифицировать читателя nnrpd с
помощью внешней программы на perl вместо nnrp.access)
pathalias (добавлять это строку перед pathhost)
hiscachsize (0; позволяет
увеличить скорость приема статей за счет
памяти; если несколько innfeed, то
рекомендуется 256)
xrefslave
(использовать Xref: входящих статей для
размещения их у себя;
фактически slave-режим; nnrpdposthost должен
указывать на
мастер-сервер)
nnrpdposthost, nnrpdpostport (nnrpd и rnews будут
отправлять статьи на этот сервер;
используется ihave, так что надо иметь права на feed для
этого сервера)
wireformat (хранить статьи в том же
формате, что и при передаче - CR LF в конце
каждой строки и удвоение точки в начале
строки)
writelinks (иначе в history будет
записываться имя только первой группы;
полезно для
транзитных узлов, которые не
занимаются
кросспостингом)
status (регулярный сброс
статистики на syslog,
попробовать 300)
timer (регулярный сброс
загруженности на syslog,
попробовать300)
peertimeout (сколько секунд входной канал м.б.
неактивным, прежде чем innd его
закроет)
readerswhenstopped
(разрешать читать статьи даже при паузе или throttle)
allownewnews (true; лучше
выключить, иначе один клиент будет
способен подвесить сервер; пока
оставил)
chaninacttime,
chanretrytime═(сколько секунд channel м.б.
неактивным, прежде чем innd его
закроет)
artcutoff (статьи старее
указанного числа дней
выкидываются; по умолчанию - 14)
nntplinklog
(записывать в журнал
сообщения nntplink)
nntpactsync (сколько статей
обрабатывать между записями в журнал; по
умолчанию - 200)
badiocount (сколько ошибок
ввода/вывода допускать, не
закрывая канал; по
умолчанию - 5)
pauseretrytime (пауза между
проверками канала на
неактивность)
blockbackoff
(мультипликатор паузы в backoff)
icdsynccount (10 статей; как часто
синхронизовать active и history, tradeoff между
надежностью и
эффективностью)
bindaddress (IP адрес в
десятично-точечной нотации; к какому
интерфейсу
прислушиваться; all - ко всем)
sourceaddress (IP адрес в
десятично-точечной нотации; какой адрес будут иметь
исходящие пакеты; any - будет выбран
операционной системой)
port (какой порт будет
прослушиваться; 119)
checkincludedtext (nnrpd будет
проверять, чтобы
посылаемые клиентом статьи имели менее 50%
цитирования;
определяется по знаку ">" в первой
позиции)
localmaxartsize
(максимальный размер
посылаемых через nnrpd статей; 100000)
mimeversion (nnrpd будет
добавлять MIME-заголовки)
mimecontenttype (если
добавляются MIME-заголовки, то здесь
определяется значение
заголовка Content-Type:)
mimeencoding (если
добавляются MIME-заголовки, то здесь
определяется значение
заголовка Content-Transfer-Encoding)
spoolfirst (если true, то nnrpd
помещает статью от клиента в спул даже не
пытаясь обратиться к innd; если false -
помещает ее в спул только при
получении сообщения об ошибке при
посылке)
complaints
(добавляется заголовок X-Complaints-To: с email
адресом службы abuse)
articlemmap
(использовать mmap при доступе к статье в спуле)
clienttimeout (600; сколько секунд
позволять клиенту nnrpd "висеть" ничего не делая)
innflags (флаги,
передаваемые innd при запуске)
doinnwatch (запускать ли innwatch)
innwatchsleeptime
(промежутки между
проверками innwatch в секундах)
использовати ли pgp при проверке
управляющих сообщений)
controlfailnotice (посылать
администратору письма об ошибках
обработки
управляющих сообщений; не
работает при
включенном controlchan)
logcycles (сколько копий старых
журналов сохранять)
innwatchpauseload (средняя
загрузка, умноженная на 100, при
которой innwatch будет
переводить innd в режим ожидания)
innwatchhiload (средняя загрузка,
умноженная на 100, при которой innwatch будет
переводить innd в режим throttle)
innwatchloload (средняя загрузка,
умноженная на 100, при которой innwatch будет
возвращать innd в
нормальный режим)
innwatchspoolspace (размер
свободного места на
устройстве, хранящем articles и overview, в
единицах inndf, при
достижении которого innwatch
переводит innd в режим throttle)
innwatchbatchspace (размер
свободного места на
устройстве, хранящем outgoing, в
единицах inndf, при
достижении которого innwatch
переводит innd в режим throttle)
innwatchlibspace (размер
свободного места на
устройстве, хранящем db - history, active и др. - , в
единицах inndf, при
достижении которого innwatch
переводит innd в режим throttle; для работы expire
требуется удвоение файлов history и active, так что
здесь необходимо число не меньшее их
суммарного размера)
innwatchspoolnodes (число
свободных inode-ов на
устройстве, хранящем articles и overview, в
единицах inndf, при
достижении которого innwatch
переводит innd в режим throttle)
docnfsstat (запускать ли cnfsstat; нужен тоько при
использовании метода хранения статей CNFS)
/etc/news/innfeed.conf
(конфигурационный файл для innfeed)
/etc/news/innreport.conf
(конфигурационный файл для innreport;
описания нет; править по образцу;
интересна только первая секция, в
которой надо включить выдачу в HTML и
графику (GD.pl) и
архивацию отчетов; в
остальных секциях
описывается формат выдачи, там менать нечего, разве что
отключить
неинтересные секции вовсе)
/etc/news/innwatch.ctl
(конфигурационный файл для innwatch, см. также innwatch* в
inn.conf)
Каждая строчка
определяет одну проверку и состоит из семи полей,
разделенных одним символом, и
начинается с того же символа.
Разделитель полей един для всей строки и
выбирается из списка:
восклицательный знак, запятая,
двоеточие, at sign, точка с запятой или
вопросительный знак; в
зависимости от того какой знак из
вышеперечисленных не
встречается внутри полей в этой строке. Поля
(разночтения между
документацией и образцом, явно было две линии
развития):
в какое состояние
переходить, если проверка успешна (метка); по
умолчанию - номер строки;
используется также в ctlinnd;
начальное состояние "run";
состояние, в котором
выполнять проверку,
определяемую данной строкой; по
умолчанию "-"; можно
использовать список
состояний или
специальные значения:
"-" - текущее состояние есть "run" или
совпадает с первым полем строки
"+" - текущее состояние есть "run"
"*" - в любом состоянии
"-состояние" - если текущее
состояние отлично от
указанного
команда проверки,
выполняемая в sh; должна
возвращать код возврата, равный 0, в случае
успеха и одно целое число на
стандартный вывод
оператор сравнения
результатов
выполнения команды проверки с лимитом (lt, gt, eq, le, ge, ne)
лимит
выполняемая при успешной проверке
команда
exit (завершить работу innwatch)
throttle (если проверка успешна и
текущее состояние не
совпадает с первым полем, то вызвать ctlinnd throttle;
если неуспешна и текущее
состояние совпадает с первым полем, то
вызвать ctlinnd go; если были в
состоянии "run")
pause (аналогично, но
используется ctlinnd pause)
shutdown (ctlinnd shutdown)
flush (ctlinnd flush)
go (ctlinnd go и перейти в
состояние "run")
skip
(игнорировать
результаты сравнения; а
команда
выполняется?)
комментарий
(используется для передачи в ctlinnd); для того,
чтобы другие хосты могли понять причину
остановки,
рекомендуется в начале
комментария
использовать
стандартный текст: "No space" или "loadav"
/etc/news/moderators - когда nnrpd или inews
получает статью от клиента и
выясняется, что она послана в
модерируемую группу, то вместо того, чтобы
послать ее innd, он посылает ее по email
модератору этой группы. В данном файле
задаются шаблоны для
определения адреса
модератора по имени группы. Каждая строка
состоит из двух полей,
разделенных
двоеточием. В первом поле
указывается шаблон имени группы (как в sh). Во
втором поле указывает email адрес. Строка "%s" в
адресе заменяется на имя группы с
подстановкой точек на минусы (только одна
замена).
Используется первая
подходящая строка.
/etc/news/motd.news -
содержимое этого файла клиент получит, выдав
команду "LIST MOTD"
/etc/news/news2mail.cf
(конфигурационный файл для news2mail)
/etc/news/newsfeeds -
управляет как
распределяются
приходящие статьи. Каждая строка
представляет собой
отдельное правило,
состоящее из 4 полей,
разделенных
двоеточиями:
имя-сайта/список-исключений-через-запятую.
Первым сайтом в файле д.б. сайт с именем ME (и
единственным). Если он имеет список
шаблонов групп, то этот список
добавляется в начало списков
остальных сайтов.
имя сайта получателя
записывается в журнал; если имя сайта
уже═встречается в Path:, то статья на него не
посылается; для локальных имен (всяких
программ обработки типа overchan, archive и т.д)
рекомендуется добавлять
восклицательный знак в конце, чтобе не
пересечься с реальным именем сайта; в
качестве имени сайта
получателя обычно
выбирается то имя, которое этот сайт
вставляет в Path: при
обработке статьи
список исключений - список имен сайтов через
запятую; для каждого имени
делается
аналогичная проверка - не
встречается ли он в Path:. Часто
используются имена
генераторов
управляющих сообщений: cyberspam, spewcancel, bincancel
список шаблонов в формате wildmat (sh)
определяет какие группы будут
посылаться на сайт
получатель.
Восклицательный знак в начале шаблона
означает отрицание.
Наибольший приоритет имеет
последнее
соответствие. Если вместо "!"
использовать "@", то статья из
соотвествующей группы не будет
посылаться на данный сайт даже если она cross-posted в
группу, подлежащую посылке
область
распространения
дополнительно
ограничивает список
рассылаемых статей: если статья имеет
заголовок Distribution: и
определен список областей
распространения (текстовые строки, не
шаблоны) для данного сайта
получателя, то ини должны
соответсвовать друг другу. Правила записи
аналогичны правилам записи
шаблонов (отрицание,
приоритеты). Если статья имеет
несколько областей
распространений, то
используется
логическое "ИЛИ".
список-флагов
меньшеsize - статья
посылается, если ее размер меньше
указанного числа байт
>size - статья
посылается, если ее размер больше
указанного числа байт
Ac - не посылать
управляющие сообщения
AC - посылать только
управляющие сообщения
Ad - только статьи с
заголовком Distribution:
Ae - только если
заголовок Newsgroups: статьи
содержит только те группы, которых имеюся в active
Ap - не проверять наличие имени сайта
получателя в Path: до рассылки (но список
исключений проверять)
Bhigh/low - если сайт
питаем через файл, канал или exploder, то
организуется буфер передачи на сайт, high
задает число байт при
превышении которого буфер
начинает
опустошаться, low - когда он
перестает
опустошаться
Fимя-файла- задает имя файла для
спула, имя либо абсолютно, либо
относительно outgoing
Gчисло - посылать статью, если она
послана не более чем в
указанное число групп
Hчисло - посылать статью только если в Path:
накопилось не более
указанного числа хостов
Iразмер - величина
внутреннего буфер после которого данные
начинают
сбрасываться в файл
Nm - только
модерируемые группы
Nu - только
немодерируемые группы
Pприоритет - число от 0 до 20,
которое будет назначено
программе или каналу (через команду nice)
Oшаблон -
требуется наличие заголовка X-Trace и первое поле в нем
должно
соответствовать шаблону
Sразмер - если в очереди к
данному сайту
образовалось больше
указанного размера байт, то innd
переходит в режим спулинга -
сбрасывает во временный файл (см. флаг F)
Tтип - способ
передачи статей на сайт
c - канал
f - файл
l - только запись в журнал
(статистику собирать очень удобно)
m - funnel
p - программа
x - exploder
Wполе - если
передача через файл, канал или exploder, то здесь
указывается какую
информацию туда
записывать. Можно
использовать несколько флагов. По
умолчанию: Wn. Поля будут
записаны в указанном порядке и
разделяться пробелами.
Программы понимают только поле "*":
b - размер статьи в байтах
f - полное имя файла статьи
g - имя первой группы
h - hash ключ Message-ID
m - Message-ID
n - имя файла статьи
относительно спула
p - время посылки статьи (секунд от начала эпохи)
s═- откуда пришла статья (из Path: или IP адрес в
зависимости от logipaddr в inn.conf)
t - время получения статьи (секунд от начала эпохи)
* - имя funnel entry или имена всех сайтов,
получающих данную статью
D - значение заголовка Distribution: ("?" если не было)
H - все заголовки
N - заголовок Newsgroups:
P - заголовок Path:
O - данные overview для overchan; д.б.
единственным флагом
R - данные для
репликации
параметры - формат зависит от способа
посылки статей на сайт
Способы посылки статей (на самом деле innd не
рассылает статьи , а
генерирует для каждого сайта список статей,
котоые надо на него послать):
журнал (эквивалент Tf в /dev/null) -
делается только запись в журнале /var/log/news/news
файл - для каждой статьи в файл,
определяемый полем
параметры,
записывается одна строка. По
умолчанию, имя файла -
outgoing/имя-сайта. Когда сайт
сбрасывается (см. flush в ctlinnd), то innd
сбрасывает в него остатки буферов и
закрывает. Затем открывает снова.
Соответственно скрипт, который
вызывает ctlinnd должен
предварительно
переименовать файл и вызвать ctlinnd, после чего
переименованный файл можно
использовать. Новые данные начнут
записываться в новый файл.
программа - для каждой статьи
запускается новый экземпляр
программы. Поле
параметров д.б. в формате sprintf(3), в
который вместо %s
подставляется имя файла статьи
относительно
спул-директории.
Получившийся результат подается на
стандартный ввод программы.
Стандартный вывод и ошибки будут
записаны в файл errlog (inn.conf). UID и GID будут
взяты равными owner и group
директории pathrun (inn.conf). Имя
программы д.б.
абсолютным. innd старается не
запускать лишних
экземпляров sh.
канал - в поле параметры задается полное имя
программы, которая
запускается при старте innd. На каждую статью
получившийся процесс получает одну строку на
стандартный ввид.
Стандартный вывод, ошибки, UID и GID как для
случая программы. Если процесс уже
запущен, он
перезапускается. Если процесс не
удается запустить, то
образуется спул в
outgoing/имя-сайта. innd делает еще
попытки запустить процесс позднее. Когда сайт
сбрасывается (см. flush в ctlinnd), то innd
сбрасывает в него остатки буферов и
закрывает свою сторону pipe. Все, что не
удалось сбросить,
записывается в спул (см. флаг S). Сигнал не
посылается, программа должна сама
заметить конец файла. После этого innd
запускает новый экземпляр
программы.
exploder - особый подтип канала (пример: buffchan),
кроме обычных статей на него могут быть
посланы команды. Команда
предваряется
восклицательным знаком.
Автоматически
генерируются команды:
newgroup имя-группы
rmgroup имя-группы
flush
flush имя-сайта
Можно послать любую команду с помощью ctlinnd send.
funnel - слияние
нескольких потоков в один (из
вышеупомянутых типов). Поле
параметр определяет
реального получателя.
Используемые примеры:
принимаемые статьи
(уменьшить количество
cancel-статей):
ME/cyberspam,bincancel :*,!junk,!control*,!foo.*::
генерация overview (тип - канал;
используемая программа - overchan;
сбрасывается
информация специально для overview; при
заторах более 30КБ
образуется спул в файле - outgoing/overview! - и
что с ним
делать?):
overview!:*:Tc,WO,S30000:/usr/bin/overchan
генерация списка news-серверов (тип - канал;
результат работы
═программы pre_path_parsing.sh
дописывается в файл -
разбиение заголовка Path: на
отдельные хосты и
фильтрация мусора; на вход ей
подается содержимое
заголовка Path:; иметь
процедуру для
ежедневной
сортировки/слияния /var/spool/news/path_sort.sh и
вызывать ее как параметр news.daily в
/etc/cron.daily/inn-cron-expire)
path!:*:Tc,WP:/var/spool/news/pre_path_parsing.sh >> /var/spool/news/paths
сохранение всех статей,
посланных местными
клиентами (тип - канал,
используемая программа - archive, на вход ей
подаются
относительные имена файлов,
содержащих
статьи):
local-archive!/список-внешних-источников :*:Tc,Wn:/usr/bin/archive -a
/var/spool/news/archive/local -i ═/var/spool/news/archive/local/INDEX
сбор ежедневной
статистики о том сколько статей было
принято в каждую группу и какой они имели
размер (тип - канал;
результат работы
═программы group_stat.sh -
преобразование из формата "размер
список-групп-статьи" в формат
"имя-группы размер" -
дописывается в файл; на вход ей
подается размер статьи в байтах и список групп для
каждой статьи; иметь
процедуру для
ежедневной
сортировки/слияния group_stat_sort.sh,
которая генерирует и сжимает файлы с
именами group_stat.sum.дата - сколько байт
попало в каждую группу - ═и group_stat.count.дата -
сколько статей попало в каждую группу за
истекший период -, самые толстые вперед; эти файлы
можно
использовать для генерации Top100;
вызывать ее как параметр news.daily в
/etc/cron.daily/inn-cron-expire═):
group_stat!:*:Tc,WbN:/var/spool/news/group_stat.sh >> /var/spool/news/group_stat
uplink (тип - файл; для каждой статьи -
относительное имя файла и Message-Id; см.
/etc/cron.hourly/inn-cron-nntpsend):
news.rt.ru/список-внешних-источников:*:Tf,Wnm:news.rt.ru
/etc/news/nnrp.access - задает права
доступа клиентов к nnrpd, состоит из строк вида
(поиск подходящей
производится по очереди; успешной
считается последняя
подошедшая; первой строкой
рекомендуется ставить строку со
звездочкой в качестве шаблона хостов и
запретом на все)
:
шаблон-хостов:права-доступа:имя-пользователя:пароль:шаблон-имен-групп
шаблон-хостов задает шаблон для
сравнения с хостом клиента и может
использовать как имена, так и адреса с
сетевой маской (полной или
сокращенной)
перечень букв (или слов,
начинающихся с
соответствующих букв), которые
определяют права клиента,
зашедшего с
соответствующего адреса:
R═- клиент имеет право на чтение
P - клиент имеет право на посылку
N - клиент может
использовать команду NEWNEWS,
несмотря на
глобальный запрет
L - клиент может посылать статьи в группы с
запретом на локальную посылку
полное имя файла - формат файла такой же как и
основного, права доступа
уточняются исходя из него
9проверки на рекурсию нет)
имя (пустое, если
аутентификация клиента не нужна; знак "+" для
использования /etc/passwd - могут быть
проблемы с правами доступа к /etc/shadow)
пароль (пустой, если
аутентификация клиента не нужна)
список шаблонов имен групп через
запятую (формат как в newsfeeds, но по
умолчанию - запрет доступа), к которым клиент
должен иметь доступ;
/etc/news/nnrpd.track -
позволяет nnrpd
записывать в журнал доступа
определенную строку текста вместо имени или
адреса хоста клиента;
необходима
динамическая генерация для
диалапных клиентов; состоит из строк
вида:
шаблон-имен-или-адресов-хостов:строка-идентифицирующая-пользователя
/etc/news/nntpsend.ctl -
определяет список хостов, на которые nntpsend (innxmit)
будет рассылать статьи, если имя хоста не
указано явно при запуске - а оно не
указано (см. пример с uplink
вописании newsfeeds); каждая строка
определяет отдельный
хост:
сайт:fqdn:size:параметры
сайт - имя, указанное в newsfeeds
fqdn - полное доменное имя хоста, на
который должны быть посланы статьи
size - размер для shrinkfile для
обрезания пакета заданий, если он станет
слишком большим
параметры - параметры для innxmit (флаги "-a" и "-t 180"
посылаются
самостоятельно)
/etc/news/overview.ctl -
используется для создания overview при
использовании новых способов
хранения статей (при
стандартном способе хранения overview
создается внешней
программой overchan); overchan нужна в любом
случае для создания индекса; для
хранения overview
используется файл
/var/spool/news/overview/номер-индекса/overview;
состоит из
строк:
номер-индекса:шаблон-имен-групп-как-в-newsfeeds
/etc/news/overview.fmt -
определяет какие заголовки будут
храниться в overview; каждая строка
состоит из имени заголовка,
двоеточия и м.б. слова full (если слово full
присутствует, то для каждой статьи
хранится не только тело
заголовка, но и иего имя); после
изменения необходимо удалить старый overview ═и
построить новый с помощью expireover
/etc/news/passwd.nntp - пароли для
доступа к соседним NNTP серверам (при
необходимости); каждая строка
определяет одного соседа (имя и/или пароль м.б.
пустыми; стиль по умолчанию -
authinfo)
хост:[имя]:[пароль][:стиль]
/etc/news/storage.conf -
определяет параметры для
нестандартных методов хранения статей
(разбиение на классы хранения исходя из имени
группы, размера и заголовка Expire:); для
каждого класса
определяется своя структура
хранения (см. cycbuff.conf, storageapi в inn.conf)
скрипты для
запуска/остановки
/etc/rc.d/init.d/innd
/etc/rc.d/rc.news
программы
/usr/bin/actived -
вспомогательный демон для nnrpd: держит в
памяти
проиндексированный active
/usr/bin/actmerge - слияние двух файлов active
/usr/bin/actsync -
синхронизация, сравнение или слияние файлов active
/usr/bin/actsyncd -
интерфейс к actsync
/usr/bin/archive - создание
архивной копии части статей
(например, посланных локально)
/usr/bin/auth -
директория (?)
/usr/bin/batcher -
разбивает на пакеты
указанного размера список статей,
подготовленных для посылки на хост
/usr/bin/buffchan -
буферизованный feed для группы хостов
/usr/bin/cnfsstat - show snapshot of CNFS (?)
(возможно в формате mrtg)
/usr/bin/controlchan -
позволяет передать
обработку
управляющих сообщений (кроме cancel) из innd
внешней программе в форме
пакетного или
канального feed
/usr/bin/convdate -
преобразование формата времени
(например, -c
преобразует из
внутреннего формата Unix в
человечвский вид, а -n -
наоборот)
/usr/bin/crosspost -
позволяет вынести обработку
кросспостинга из innd во внешнюю
программу
/usr/bin/ctlinnd -
интерфейс для
управления работающим innd
/usr/bin/cvtbatch -
преобразует Usenet пакеты в формат INN
/usr/bin/expire - удаление старых статей не
прерывая работы innd
/usr/bin/expireindex - удаление старых статей из overview index
/usr/bin/expireover - удаление старых статей из overview
/usr/bin/expirerm - удаление списка файлов
(посредник между expire и fastrm) с
журнализацией и
извещением о проблемах
/usr/bin/fastrm - быстрое
удаление группы файлов
/usr/bin/filechan -
вызывается в качестве
канального feed из innd
/usr/bin/getlist -
получение списков (active, newsgroups и др.) от NNTP
сервера
/usr/bin/grephistory - быстрое
извлечение статьи по Message-ID (из history dbz)
/usr/bin/prunehistory -
замещение в history ссылок на файлы на
пробелы для
указанного Message-ID
/usr/bin/pullnews - тащить статьи с одного
сервера и кормить ими другой
/usr/bin/rnews - получение статей с UUCP
/usr/bin/scanlogs -
обработка журналов
/usr/bin/scanspool - поиск мусора в спуле
/usr/bin/send-ihave - посылка пакетов IHAVE
/usr/bin/send-nntp -
подготовка и рассылка пакетов с помощью innxmit
/usr/bin/send-uucp -
подготовка и рассылка пакетов через UUCP
/usr/bin/sendbatch -
подготовка и рассылка пакетов через UUCP
/usr/bin/sendxbatches -
подготовка и рассылка пакетов с помощью innxbatch
/usr/bin/shlock -
использование lock файлов в sh
/usr/bin/shrinkfile -
обрезание файла на границе строки
/usr/bin/simpleftp - ftp-клиент в режиме
командной строки
/usr/bin/sm - интерфейс к
хранителю статей (показать, удалить)
/usr/bin/startinnfeed - оболочка для innfeed (в
режиме root
увеличивает лимиты)
/usr/bin/tally.control -
записывает
удаленные/добавленные статьи
(вызывается из scanlogs)
/usr/bin/writelog - запись в журнал inn
обработка
управляющих статей
/usr/bin/control/checkgroups
/usr/bin/control/checkgroups.pl
/usr/bin/control/default
/usr/bin/control/ihave
/usr/bin/control/ihave.pl
/usr/bin/control/newgroup
/usr/bin/control/newgroup.pl
/usr/bin/control/rmgroup
/usr/bin/control/rmgroup.pl
/usr/bin/control/sendme
/usr/bin/control/sendme.pl
/usr/bin/control/sendsys
/usr/bin/control/sendsys.pl
/usr/bin/control/senduuname
/usr/bin/control/senduuname.pl
/usr/bin/control/version
/usr/bin/control/version.pl
фильтрация статей (у меня включен только perl,
перезагрузка по ctlinnd reload filter.perl
причина)
/usr/bin/filter/filter.tcl (tcl-фильтр не
включен)
/usr/bin/filter/filter_innd.pl
(содержит фильтры:
filter_art
(вызывается для каждой статьи и решает
впускать ее или нет)
filter_mode
(вызывается при
выполнении ctlinnd go/pause/throttle)
filter_messageid
(вызывается для каждой статьи в режиме
потока, получает на вход Message-ID и решает:
пускать/не пускать; у меня не
принимаются статьи (refuse, а не reject!), у
которых Message-ID
начинается со слова cancel - не
работает )
/usr/bin/filter/filter_nnrpd.pl
/usr/bin/filter/nnrpd_auth.pl
/usr/bin/filter/startup.tcl (tcl-фильтр не
включен)
/usr/bin/filter/startup_innd.pl
(содержит процедуры - пока пустые -═filter_before_reload и filter_after_reload,
вызываемые перед и после загрузки
фильтров)
программы
пакетирования статей при
использовании UUCP
Почему-то
сконфигурирован для запуска на уровне 4(?!).
Вручную настроил ссылки в /etc/rc.d/rc2.d и rc3.d.
При установке вносятся
изменения в /etc/syslog.conf (news.notice /var/log/news/news.notice, news.=err
/var/log/news/news.err, news.=crit /var/log/news/news.crit).
Журналы (/var/log/news):
news - список
полученных статей
news.crit
news.err
news.notice
errlog -
необработанные
управляющие сообщения
(исключительно попытки взлома)
expire.list (список файлов для
удаления)
expire.log
inn.status (html-страница,
обновляется каждые 5 минут)
nntpsend.log
unwanted.log
отдельные журналы для
управляющих сообщений, если не
поправить control.ctl
Если в newsfeed для какого-то сервера
накапливаются статьи в файле:
═ ═
══<имя хоста>:<шаблон имен групп>:Tf,Wnm:<имя файла=имя хоста для простоты>
не забудь в crontab занести
строчку:
═ ═ ═5,35 * * * * /usr/local/news/bin/nntpsend <имя хоста>
<полное имя хоста>
интервал
подбирается по вкусу.
Что делать, если...
Что делать если надо, что-то
поменять ═в программе (особенно config.data ;)
останови сервер
внеси изменения
сделай make world (в $inn)
(из-под
суперпользователя зайди в $inn и скажи make update
запусти сервер
Что делать если надо, что-то
поменять ═в
конфигурационных файлах:
внеси изменения
cd $inn/site
make install
если не пошло, то сказать make what, и
поправить эти файлы вручную, затем опять
сказать make install
ctlinnd reload <что> <зачем>
Что делать, если нужно все статьи
перенести с одного news-сервера на другой:
cd $SPOOL
find alt ... za > out.going/temp
innxmit host-name═ temp - лучше в
цикле, пока файл не опустеет (на случай сбоев),
можно ключи -dvдля
наглядности
Если в спуле
завалялись файлы с прошлого года и
хочется включить их в active/history,
сделай:
═ ═makehistory -buv (пусть только сервер будет
свободным в этот момент; или без ключей при
выключенном сервере);
═ ═makeactive -mo > active.new (сервер д.б.
выключен).
Мною исправлена ошибка в backends/archive.c
(архивирование статей) в функции MakeArchiveDirectory(Name):
═ ═for (p = Name; *p; p++)
═ ═ ═ заменил на
═ ═for (p = Name+1; *p; p++)
═ ═ ═ а то он пытался создать
директорию с пустым именем
Сохранение всех статей
посланных локально (не из demos или mp.aha.ru) - в newsfeeds:
═ ═local-archive!/demos,mp.aha.ru:*:Tc,Wn:/usr/local/news/bin/archive -a
/var/news/spool/archive/local -i /var/news/spool/archive/local/INDEX
Сбор и обработка
статистики
Какие группы
пользуются наибольшей
популярностью? Извлекаем
информацию из ежедневно
собираемой статистики (nnrpd_groups_stats.sh): awk '/by newsgroup/, /-------/ {print}' /var/mail/news | egrep
-v '^$|by newsgroup|-------' ═| sort | awk -f /usr/local/bin/sum.awk | sort
-nr +1
Трактовка отчета innreport:
refused -
принимающая строна
отказалась принимать статью
rejected - приняла, но выкинула
spooled - не успели
пропихнуть и отложили до лучших времен
missed - пытались послать
отложенную статью, но expire успел
удалить ее с нашего сервера
Автоматическое
добавление/удаление групп
Полагаться на
управляющие статьи
совершенно невозможно - засыплют
мусором.
Успользуется шаблон для egrep,
перечисляющий какие группы мы хотим иметь: wanted_groups_filter.egrep
Добавление групп по факту - если upstream
посылает нам статью, а группы для нее нет, то
группу надо создать. scanlogs
создает
специальный файл unwanted.log в /var/log/news, в
который записывает имена
несуществующих групп. Раз в сутки
запускаем процедуру (add_unwanted_group.sh,
add_unwanted_group.awk), которая
разбирает этот журнал, немножко чистит от
неправильных символов,
фильтрует иерархии, на которые мы не
подписаны вовсе (wanted_groups_filter.egrep),
запускает ctlinnd newgroup
(модерируемость
определяется
эмпирически) и
сбрасывает журнал в архив. innd не
хочет записывать в журнал имена групп
длиннее 80 символов (заменяет конец имени на
многоточие).
Удаление групп, не входящих в
иерархии, на которые мы
подписаны (remove_unwanted_group.sh,
remove_unwanted_group.awk). Из active
извлекается список групп,
чистится от
неправильных символов,
фильтрует иерархии, на которые мы
подписаны (а также местные и
служебные группы - типа to, control и т.п.-
wanted_groups_filter.egrep), и
генерирует список команд ctlinnd rmgroup.
Список
рекомендуется
просмотреть перед тем как
запускать реальное удаление. К
сожалению, группы удаляются только из active. Сами
статьи и директории остаются.
Предполагается, что статьи будут
удалены со временем с помощью expire/expireover, а
сами директории в процессе чистки мусора
(например, с помощью ncc).
Чистка мусора
(был на http://www.backplane.com/news/newsprune203/) newsprune
пробегает по всем
директориям,
соответствующим файлу active (к
сожалению, остальные
директории не
просматривает), и
генерирует список файлов, для которых нет
соответствующей строки в history.
Написан на Си. Понимает
директории с числом в качестве имени и
корректно
обрабатывает только что
добавленые статьи. Ключ -d8
включает отладочную печать (очень много, можно -d1 или -d2).
Ограничение: 31 уровень иерархии.
Обрабатывает
покореженные active и history. Список
подлежащих удалению файлов надо
скормить fastrm или xargs rm. На
миллион статей требует около часа. Памяти
потребляет очень мало.
findmissing.pl генерит список файлов,
найденных в спуле, но
отсутствующих в histore. Этот список надо
отредактировать (скрипт не умеет
обрабатывать
директории с именами из одних цифр) и
скормить fastrm или xargs rm. На
миллион статей надо 2.5 часа и 64МБ памяти. Но
просматривает все
директории (даже, если нет
соответствующей строки в active).
Улучшенный findmissing.pl: ncc из newstools-1.3.tar.gz.
Теперь он понимает числовые
директории. К сожалению,
программа осталась perl-овой (т.е.
ресурсов ей надо много, 3.5 часа).
Вдобавок ищет файлы с именами, не
являющимися числами (почему-то
называет их core). Удаление
директорий, не имеющих
соответствия в active: sort -nr ncc:bogus | awk '{print
SPOOLDIR/$1}' | xargs rmdir.
scanspool делает полный просмотр
спул-директории, включая проверку
правильности
заголовков статей. Описание внутри
(использовать -v -n).
Работает ОЧЕНЬ долго (сутки, если не
останавливать innd). За это время innd
успевает принять огромное
количество новых статей и удалить старых. Ключ -c
отключает проверку
содержимого статей, время работы
уменьшается до 3 часов.
Поиск пустых групп. history_to_groups_stat.sh (awk
'{for(i=3;i<=NF;i++) print $i}' $HISTORY | awk -F/ '{print $1}' |
sort | awk -f count.awk) выдает
количество статей,
полученных в каждой группе за
последние 2 недели (интервал времени
определяется в expire.ctl).
Работает полчаса. Из 28 тысяч групп на нашем
сервере: 11 тысяч - пустые, 3.5 тысячи - имеют по
одной статье (частично, из-за
ограничений по приему). find_empty_group.sh:
изготавливаем из active список
существующих на данный момент групп (не
забыть sort -u).
Изготавливаем с помощью history_to_groups_stat.sh
список групп, имеющих право на
существование (не забыть sort -u). С
помощью comm -23 exist mustbe делаем список групп,
которые надо удалить
(отфильтровав из него
локальные и служебные группы), затем
генерируем список команд ctlinnd rmgroup.
Список
рекомендуется
просмотреть перед тем как
запускать реальное удаление. К
сожалению, группы удаляются только из active. Сами
директории остаются.
Предполагается, что они будут удалены в
процессе чистки мусора (например, с
помощью ncc). К сожалению,
удаляются группы,
которые оказались пустыми по нашей вине (из-за
ограничений на feed). Часть из них
восстанавливается со временем, но
если
ограничения были
поставлены на
передающей стороне (например, через gup), то такие
группы не появятся никогда.