Локальный nntp-сервер

News-группы, наряду с RSS-подписками, являются для меня одним из основных источников информации.

По сравнению с форумами работа с news-группами экономит мое время,  так как я подписываюсь на интересующие меня темы и читаю их в news-клиенте.  Многие форумы предоставляют доступ к сообщениям по протоколу NNTP,  например news.rsdn.ru и sql.ru.  Также я  пользуюсь сервером news.gmane.org, который позволяет получить доступ к большому количеству почтовых рассылок по протоколу NNTP.

Вместо непосредственного подключения к удаленному серверу я установил локальный nntp-сервер, который синхронизирует сообщения в интересующих меня группах с удаленными серверами  в фоновом режиме.   Небольшие затраты времени на его настройку компенсируются тем, что:

Я опишу установку NNTP-сервера Leafnode на примере ArchLinux.

Данная инструкция подойдет и для остальных дистрибутивов (я проверял на Ubuntu, Fedora и Sabayon), но часть шагов из инструкции можно будет пропустить, так как менеджер пакетов выполнит их за вас.

Итак:

pacman -S leafnode

Для других дистрибутивов нужно использовать соответствующий пакетный менеджер.

touch /etc/leafnode/local.groups
cp /etc/leafnode/config.example /etc/leafnode/config
vim /etc/leafnode/config

В конфиге я перечисляю интересующие меня сервера и указываю максимальное количество сообщений в каждой группе, которое будет скачано:

server = your.news.server
username = your.username
password = your.password
initialfetch = 500
service nntp
{
   socket_type          = stream
   wait                     = no
   user                     = news
   server                  = /usr/sbin/leafnode
   only_from             = 127.0.0.1
}
  • Создайте группу пользователей news и добавьте в нее  пользователя, из под которого будет запускаться fetchnews, программа для сбора сообщений с серверов.  Во многих дистрибутивах эти действия выполняются автоматически при установке пакета.  В Arch я это сделал вручную:
groupadd -g 36 news
useradd -c "Leafnode News Server" -d /var/spool/news
            -s /bin/false -g news -u 36 news
chown news:news /var/spool/news
chown -R news:news /var/spool/news
  • В файл /etc/hosts.allow добавляем строку:   leafnode: 127.0.0.1
  • В файл /etc/hosts.deny добавляем строку: leafnode: ALL
  • Проверяем, что компьютер имеет полное доменное имя.  Для ArchLinux это прописывается в файле /etc/rc.conf.
  • Запускаем xinetd:
/etc/rc.d/xinetd start

В некоторых дистрибутивах эта команда может выглядеть так:

/etc/init.d/xinetd start

или даже так:

service start xinetd

Лучше добавить запуск этого демона в автозагрузку.

  • Проверяем доступность локального сервера:
telnet localhost 119
  • Запускаем fetchnews -vvv.  При первом запуске будет скачан перечень всех групп c серверов, указанных в конфигурационном файле leafnode.
  • Настраиваем свою любимый клиент на локальный сервер (localhost) и подписываемся на интересующие нас группы.  В каждой группе, на которую мы подписались, будет одно фиктивное сообщение,  поcле прочтения которого leafnode поймет, что вас интересует эта группа и будет скачивать новые сообщения.
  • Fetchnews можно добавить в crontab, чтобы данная операция происходила с нужной вам периодичностью.
  • Если в конфигурационном файле /etc/leafnode/config задать переменную hostname

    hostname = myhost.example.com

    то можно не указывать полное доменное имя в /etc/rc.conf (/etc/hosts).

  • Для каждой группы новостей можно указать свое время хранения сообщений:

    expire = 10
    groupexpire gmane.comp.python.general = 7
    groupexpire rsdn.flame.comp = 5
    groupexpire sqlru.microsoft-sql-server = 20
  • Удаление устаревших новостей осуществляется утилитой texpire:

    /usr/sbin/texpire

Источник статьи