Итак, мы имеем настроенный и функционирующий серверный узел первичного распространения "торрент"-файлов и контента как такового. Отдавать "торрент"-файлы по требованию вспомогательных узлов раздачи контента будем с помощью утилиты "rsync".
Алгоритм работы утилиты построен таким образом, что он отслеживает изменения в файловой системе и копируются только необходимые её части. Причём при использовании базового алгоритма для выявления изменений нет необходимости сравнивать эти файловые системы или её отдельные элементы. И работает это довольно быстро.
Инсталлируем rsync:
# aptitude install rsync
Разрешим стартовому скрипту "/etc/init.d/rsync" запускать сервис rsyncd и зададим параметры запуска путём следующих директив в файле "/etc/default/rsync":
....
RSYNC_ENABLE=true
....
RSYNC_CONFIG_FILE=/etc/rsyncd.conf
....
RSYNC_OPTS=' --ipv4 --address=0.0.0.0 --port=8730'
RSYNC_ENABLE=true
....
RSYNC_CONFIG_FILE=/etc/rsyncd.conf
....
RSYNC_OPTS=' --ipv4 --address=0.0.0.0 --port=8730'
В конфигурационном файле выше мы привязали сервис rsyncd к определённому IP адресу и порту. Учитывая то, что распространяем мы открытую информацию, нет необходимости применять какие либо методы авторизации при обращении к контенту.
Создаем конфигурационный файл сервиса rsyncd в месте, положенном ему сборщиками пакета:
# touch /etc/rsyncd.conf
Приведем конфигурационный файл к следующему виду, базовой конфигурации:
log file = /var/log/rsyncd
pid file=/var/run/rsyncd.pid
# Указываем сервису на каком IP ему разрешено принимать запросы на подключение (это уже указано в опциях запуска сервиса, но лишний раз не помешает)
address = 0.0.0.0
# Указываем серверу не открывать более десяти соединений с клиентами единомоментно
max connections = 10
# Указываем не сжимать трафик для любых объектов
dont compress = *
# Указываем имя и группу пользователя, от имени которого rsync будет обращаться к запрашиваемым объектам
uid = share-operator
gid = share-users
# Разрешаем доступ исключительно для чтения данных с первичного сервера
read only = yes
# Разрешаем выдавать список модулей
list = yes
use chroot = no
lock file = /var/lock/rsyncd
timeout = 600
# Описываем модули, эмулирущие корни файловой системы запрашиваемых объектов
[torrents]
path = /var/lib/share/torrents
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
pid file=/var/run/rsyncd.pid
# Указываем сервису на каком IP ему разрешено принимать запросы на подключение (это уже указано в опциях запуска сервиса, но лишний раз не помешает)
address = 0.0.0.0
# Указываем серверу не открывать более десяти соединений с клиентами единомоментно
max connections = 10
# Указываем не сжимать трафик для любых объектов
dont compress = *
# Указываем имя и группу пользователя, от имени которого rsync будет обращаться к запрашиваемым объектам
uid = share-operator
gid = share-users
# Разрешаем доступ исключительно для чтения данных с первичного сервера
read only = yes
# Разрешаем выдавать список модулей
list = yes
use chroot = no
lock file = /var/lock/rsyncd
timeout = 600
# Описываем модули, эмулирущие корни файловой системы запрашиваемых объектов
[torrents]
path = /var/lib/share/torrents
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.
Запускаем rsyncd:
# /etc/init.d/rsync start
Проверяем, то ли и там ли прослушивает наш сервис:
# netstat -apn | grep rsync
Наблюдаем вывод:
tcp 0 0 0.0.0.0:8730 0.0.0.0:* LISTEN 16841/rsync
Всё, "rsync" готов выдавать содержимое директории "/var/lib/share/torrents" любому по первому требованию, чего мы и добивались.