Настройка push-сервера

Настройка push-сервера состоит из двух основных задач: настройка rsync доступа (для нормального, тянущего зеркалирования) и настройка триггерного механизма ssh (для проталкивания тянущего зеркалирования).

(Подробности о том, что такое push-сервер, читайте в разъяснениях push-зеркалирования.)

Настройка rsync

Установите rsync версии 2.1.1 или выше. Если ваш сайт работает на Debian, просто установите последний пакет rsync.

Создайте файл rsyncd.conf и внесите в него что-то подобное этому:

uid = nobody
gid = nogroup
max connections = 25
socket options = SO_KEEPALIVE

[debian]
  path = /srv/debian/mirror
  comment = The Debian Archive (~250 GB)
  auth users = authorized_account1,authorized_account2,authorized_accountN
  read only = true
  secrets file = /etc/rsyncd/debian.secrets

Добавьте запись для каждого сайта, который вы проталкиваете, в файл /etc/rsyncd/debian.secrets:

авторизованная_учётная_запись1:пароль
авторизованная_учётная_запись2:другой_пароль
авторизованная_учётная_записьN:Nный_пароль

Теперь вы даёте нижележащим зеркалам доступ к архиву на вашей машине.

Возможно, вы захотите, чтобы демон rsync запускался из inetd. Чтобы сделать это, вы должны добавить сервис rsync в файл /etc/services (если он ещё не там), как показано ниже:

rsync           873/tcp

Добавьте следующую строку в файл /etc/inetd.conf, чтобы разрешить демон из inetd:

rsync      stream      tcp         nowait      root /usr/bin/rsync rsyncd --daemon
(Не забудьте послать inetd сигнал HUP, чтобы сказать ему перечитать конфигурационный файл после модификации.)

Настройка механизма триггера ssh

Создайте новый ключ ssh для учётной записи, которую вы используете для зеркалирования Debian. Будьте осторожны и не перезапишите ваш оригинальный ключ ssh, для чего воспользуйтесь ключом командной строки -f, например:

ssh-keygen -f ~/.ssh/identity.mysite

Убедитесь что новый публичный ключ (~/.ssh/identity.mysite.pub) содержит в начале следующее:

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="~/sync &"

Вам нужно настроить сценарий, который будет связываться с нижележащими зеркалами. Создайте файл с именем signal, содержащий следующее:

#!/bin/sh

# This script is called to signal the remote host that it is time to
# mirror the archive.

echo Signalling $1
ssh -o"BatchMode yes" -o"user $2" "$1" -i $HOME/.ssh/identity.mysite sleep 1

Этот сценарий будет соединяться с удалённым хостом, используя специальный ключ ssh, который вы создали выше, предлагая его добавить в ~/.ssh/authorized_keys каждому оператору нижележащих зеркал (заменяет sync с anonftpsync или любой другой командой для начала зеркалирования). Сам по себе сценарий удалённо не делает ничего &mdash будет запущена единственная команда, зависящая от настроек ключа.

Фактически, чтобы связать зеркала, вам нужно выполнить ./signal <сайт> <имя_пользователя> после завершения синхронизации с помощью rsync. Соответственно, как только будет закончено зеркалирование с вышележащим сайтом, вы стартуете проталкивание нижележащим от вас сайтам.

Также можно разместить эти команды в конце вашего anonftpsync сценария или создать новый сценарий и запускать его из anonftpsync.
Например:

#!/bin/sh

# This script is called by websync to signal the downstream mirrors.

./signal some.other.site archvsync
./signal and.another.site othersiteaccount

Если у вас появились с этим какие-то проблемы, свяжитесь с нами.