push サーバを設定する

push サーバの設定は、基本的に 2 つの作業からなります。 ひとつは rsync 接続 (通常のpullミラー) の設定、 もうひとつは ssh のトリガ機構 (pull ミラーをpushするためのもの) の設定です。

(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

push する各サイトに対応するエントリを、 /etc/rsyncd/debian.secrets ファイルに追加します。

authorized_account1:a_password
authorized_account2:another_password
authorized_accountN:password

これで下流のミラーに、あなたのマシンのアーカイブへの 接続を許したことになります。

rsync デーモンは inetd から起動することになるでしょう。 これにはまず、/etc/services ファイルに 次のような rsync サービスを (まだなければ) 追加します。

rsync           873/tcp

デーモンを inetd から起動させるには、次の行を /etc/inetd.conf ファイルに加えます。

rsync      stream      tcp         nowait      root /usr/bin/rsync rsyncd --daemon

(修正後に inetd に HUP シグナルを送り、 修正された設定ファイルを読み込ませるのを忘れないこと)

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 など、ミラー開始用のコマンドの名前に書き換えてある必要があります)。 このスクリプト自身はリモートでなんら作業を行いませんが、 鍵の設定によって指定されたミラー開始用のコマンドだけが実行されます。

実際にミラーを開始させるには、 rsync で自分のサイトを更新し終えた後に ./signal <site> <username> というコマンドを実行する必要があります。 こうすると、あなたのサイトが上流からのミラーを終えると、 すぐさま下流への push を開始することになります。

これらのコマンドは、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

もし問題が起こったら、 連絡してください