Gentoo Linux rsyncミラーリングポリシー

Gentoo Mirror Administrators  Author
Xavier Neys  Editor
武田洋之  翻訳
小林弘樹  翻訳

更新日 2005年 12月 12日
このドキュメントのオリジナルバージョン の更新日は2006年 12月 28日

1.  ハードウェア要求

マシンの寄付

Gentoo Linuxはメインローテーションミラーとコミュニティミラーといった2つの異なるミラーに頼っています。 メインローテーションミラーはrsync専用サーバで、rsyncトラフィックの大半を扱っています。 全てのメインローテーションミラーではGentoo Linuxが稼働しており、Gentoo開発チームのメンバーが管理しています。 コミュニティミラーはコミュニティメンバーが提供し管理するサーバです。 これらのサーバはrsyncの使用だけかもしれませんし、されないかもしれません。 それらはGentoo Linuxが稼働しているかもしれませんし、していないかもしれません。

現時点で、私たちには十分なコミュニティミラーがあるので、積極的にメインローテーションミラーを追加していく予定です。 メインローテーションミラーの仕様を以下に示します。

これらのサーバは、もしあるのなら回線と設置場所を合わせて寄付されることもあります。 別の方法では、私たちがこれらのサービスを提供するので、機材を設備設置施設へ送ってもらうだけになります。 メインローテーションミラーの平均帯域占有量は現在7Mbps(月間2TB)程度です。 メインローテーションミラーの数が増えるので、従ってこの数字は減少するでしょう。

機材を提供したいのなら、適切な情報をJeffrey Formanにまでメールしてください。

2.  ちょっとしたFAQ (現在のミラー管理人用)

Q: rsyncに関する問題や保守について、誰に連絡を取ればよいでしょうか?

A: http://bugs.gentoo.orgを訪れて、"Rsync"カテゴリにバグとして記入してください。

Q: プライベートなrsyncミラーを自社の為に運用しているのですが、それでも、わたしはrsync1.us.gentoo.orgにアクセス可能でしょうか?

A: わたしたちの資源は限られていますので、ユーザーに最大限の利益を提供する為に、その限られた中で資源を割り振っていく必要があります。 その為、マスターrsyncおよびdistfileミラーへの接続を一般公開mirrorだけに制限しています。 ユーザーがプライベートなrsyncミラーを設置する為に、正規のミラーシステムを使用することは歓迎しますが、基本的にrsyncの利用に関するガイドラインに従うことが求められます。

Q: 1時簡に2回、ミラーを同期させることは重要なのでしょうか?

A: はい、重要です。 00分、30分きっかりに同期させる必要はありませんが、次の2つの期間に同期するようにしなければなりません:

  1. 00分と10分の間
  2. 30分と40分の間

さらに、30分ごとに同期をとるようにしてください。 もし最初の同期を08分にとることにしたら、次の同期は38分にとるようにしてください。

Q: 公式なGentooミラーになるまではどこと同期するべきでしょうか?

Q: 最も近いミラーをどのように探せばよいでしょうか?

A: これを実現する為にnetselectが開発されました。 まだemerge netselectを実行していないのなら、実行してみてください。 そして、netselect rsync.gentoo.orgと実行してみてください。 1分程度でnetselectはIP addressを表示するでしょう。 このIPアドレスを控えておき、コロン(:)を二つ付け加えてrsyncの唯一のパラメータとして使用してください。 例えば、rsync 1.2.3.4::の様にします。 バナーメッセージからどのミラーなのか知ることができるでしょう。 /etc/make.confの方も相応に更新してください。

Q: rsync1.us.gentoo.orgと同期するときに圧縮転送を使うことができますか?

A: いいえ。圧縮転送はサーバーの資源を消費しすぎるので、rsync1.us.gentoo.orgでは強制的に無効にしています。 このサーバーに対して同期するときに、圧縮転送をしようとしないでください。

Q: 残った、あるいは、恐らく死んだrsyncプロセスをたくさん参照しているようです。どうすればこれを取り除けますか?

A: スクリプトの例のセクションを見てください。

Q: rsyncサーバーに非常に頻繁に接続してくるユーザーがたくさんいます。これが原因で、私のミラーは、ときどきサービスが正常に提供できなくなる場合があります。これを回避する方法はありますか?

A: スクリプトの例のセクションを見てください。

3.  スクリプトの例

注意: 設定とスクリプトのサンプルはgentoo-rsync-mirrorパッケージにあります。emerge gentoo-rsync-mirrorを実行するだけです。

現在のところ、わたしたちのPortageツリーをミラーリングするのには250MB程度が必要ですが、これはそれほど大した容量ではありません。 容量が増えたときの為に、少なくとも500MBの空きがあったほうが良いでしょう。 portageツリーのミラーを構築するのは簡単です。まず、ミラーにrsyncがインストールされていることを確認してください。 次に、後に示すようにrsyncd.confファイルを編集します。

コード表示 3.1: rsyncd.conf

uid = nobody
gid = nobody
use chroot = yes
max connections = 15
pid file = /var/run/rsyncd.pid
motd file = /etc/rsync/rsyncd.motd
log file = /var/log/rsync.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300

[gentoo-x86-portage]
#このエントリは互換性の為にあります
path = /gentoo/rsync
comment = Gentoo Linux Portage tree

[gentoo-portage]
#最近のバージョンのportageはこのエントリを使います
path = /gentoo/rsync
comment = Gentoo Linux Portage tree mirror
exclude = distfiles

上記で、gentoo-x86-portageミラーは、gentoo-portageと同じデータを指しています。 わたしたちは、最近ミラーの公式な名前をgentoo-portageに変えましたが、gentoo-x86-portageは後方互換性の為にまだ必要ですので、両方のエントリーを書いておいてください。

セキュリティ的な理由から、chroot環境を使うことが必須です!

Gentoo Linux portageツリーのミラーが必要です。次のスクリプトを使うことができます。

コード表示 3.2: rsync-gentoo-portage.sh

#!/bin/bash

RSYNC="/usr/bin/rsync"
OPTS="--quiet --recursive --links --perms --times --devices --delete --timeout=300"
#rsync1.us.gentoo.orgへのアクセスを許されたときだけ、次の行のコメントを外してください。
#SRC="rsync://rsync1.us.gentoo.org/gentoo-portage"
#もし、わたしたちのマスターミラーへのアクセス許可を待っているなら、どこからミラーするのか、わたしたちのミラーのひとつから選択してください。
SRC="rsync://rsync2.de.gentoo.org/gentoo-portage"
DST="/space/gentoo/rsync/"

echo "Started update at" `date` >> $0.log 2>&1
logger -t rsync "re-rsyncing the gentoo-portage tree"
${RSYNC} ${OPTS} ${SRC} ${DST} >> $0.log 2>&1

echo "End: "`date` >> $0.log 2>&1 

コード表示 3.3: /etc/init.d/rsyncd

#!/sbin/runscript
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/net-misc/rsync/files/rsyncd.init.d,v 1.2 2004/05/02 22:45:02 mholzer Exp $

depend() {
need net
}

# FYI: --sparce seems to cause problems.
RSYNCOPTS="--daemon --safe-links --timeout=300"

start() {
ebegin "Starting rsync daemon"
start-stop-daemon --start --quiet --pidfile /var/run/rsyncd.pid --nicelevel 15 --exec /usr/bin/rsync -- ${RSYNCOPTS}
eend $?
}

stop() {
ebegin "Stopping rsync daemon"
start-stop-daemon --stop --quiet --pidfile /var/run/rsyncd.pid
eend $?
} 

rsyncd.motdには、あなたのIPアドレスやportageミラーを提供している旨、管理者への連絡方法等のあなたのミラーに関係する情報が含まれているでしょう。 公式なrsyncミラーとして承認されたら、あなたのホストは、次の形式の名前でエイリアスされるでしょう。 rsync[num].[country code].gentoo.org

次のコマンドは、接続の問題などが原因でときどき残ってしまうrsyncプロセスの処理を強制終了させるのに役立つでしょう。 残ったプロセスは、'max connections'オプションで指定した最大値を計算する際に、正常な接続として数えられてしまうので、これらの処理を強制終了させることは重要です。 このコマンドを1時間に1回、cronで実行すれば、1時間以上前の残ったrsyncプロセスを探し出して処理を強制終了してくれます。

コード表示 3.4: 残ったrsyncプロセスの処理を強制終了

/bin/kill -9 `/bin/ps --no-headers -Crsync -o etime,user,pid,command|/bin/grep nobody | \
             /bin/grep "[0-9]\{2\}:[0-9]\{2\}:" |/bin/awk '{print $3}'` 

1日に1-2回以上も同期するような、rsyncミラーを乱用している非常識なユーザーも時々います。 極端な場合では、15分程度に1回、cronでスケージューリングしている場合もあります。 他のユーザーに割り当てられるはずのrsyncの接続を占有してしまうことによって、DoS攻撃のようになってしまう場合があります。 これを避けるには、次のperlスクリプトを試してみることができます。 このスクリプトは、rsyncログを捜査し、その日にN回以上既に接続しているIPアドレスを抜き出して、'hosts deny'ディレクティブにその不愉快なIPアドレスを追加したrsyncd.confファイルを動的に生成します。 次の行で、N回の部分を設定できます。

コード表示 3.5: IPごとの最大接続回数を定義

@badhosts=grep {$hash{$_}>4} keys %hash;

このスクリプトを使う場合には、忘れずにrsyncログファイルを毎日ローテートするようにし、スクリプト内でrsyncd.confの適切な場所を指定してください。 このスクリプトはGentoo Linuxでテストされましたが、rsyncとperlが動作する他のマシンでもうまく動作するでしょう。

4.  自分用のローカルrsyncミラーの設定

初めに

多くのユーザがそれぞれのマシンでGentooを起動しており、それら全てをemerge --syncする必要があります。 公開ミラーを使うことはお互いにとって帯域の無駄にしかなりません。 1台のマシンが公開ミラーと同期し、その他のコンピュータがその同期したコンピュータと同期することで、Gentooミラーの資源とユーザの帯域を抑えることができます。

あなたがすべきことは、どのマシンをローカルrsyncミラーにするか決定して、それを設定するだけです。 rsync運用要求をこなせるCPUとディスクを持つコンピュータを選ぶべきです。 ローカルミラーはその他のコンピュータがportageツリーを同期させる時はいつでも利用可能になっている必要があります。 その上、そのマシンは静的IPアドレスか常に解決できる名前を持っている必要があります。 DHCPやDNSサーバの設定はこのガイドの範囲外です。

サーバの設定

必要なソフトが既にインストールされているので、特別なパッケージをインストールする必要はありません。 ローカルrsyncミラーの設定は単に/usr/portageディレクトリが同期できるようにrsyncdデーモンを設定するだけです。 以下のような/etc/rsyncd.conf設定ファイルを作成します。

コード表示 4.1: /etc/rsyncd.confの例

pid file = /var/run/rsyncd.pid
max connections = 5
use chroot = yes
uid = nobody
gid = nobody
# 自由選択: Gentooコンピュータへのアクセス制限
hosts allow = 192.168.0.1 192.168.0.2 192.168.1.0/24
hosts deny  = *

[gentoo-portage]
path=/usr/portage
comment=Gentoo Portage
exclude=distfiles/ packages/

hosts allowhosts denyオプションを設定する必要はありません。 デフォルトでは、全てのクライアントは接続が許可されます。 オプションを書く順序は関係ありません。 サーバはいつもhosts allowをまず確認して、接続しているホストがパターンと一致したら接続を許可します。 サーバはその後hosts denyを確認して、一致する物があったら接続を拒否します。 どちらにも一致しないホストは接続が許可されます。 より詳しい情報はマニュアルページ(man rsyncd.conf)を参照してください。

では、rsyncをrootユーザで以下のコマンドで起動します。

コード表示 4.2: rsyncデーモンの起動

(デーモンを今すぐ起動)
# /etc/init.d/rsyncd start
(デーモンをデフォルトランレベルに追加)
# rc-update add rsyncd default

rsycミラーをテストしましょう。 他のマシンから試す必要はありませんが、できればそのようにした方がいいでしょう。 もしサーバが他のコンピュータに名前で知られていなければ、IPアドレスを代わりに使うことができます。

コード表示 4.3: ミラーのテスト

(サーバ名かIPを使います)
# rsync 192.168.0.1::
gentoo-portage     Gentoo Portage
# rsync your_server_name::gentoo-portage
(ミラーに/usr/portageの内容があるでしょう)

rsyncミラーの設定が完了しました。サーバを最新状態に保つためにemerge --syncを実行し続けてください。

注意: 多くの公開ミラー管理者は1日に1から2回以上の同期は乱用であると考えていることに注意してください。

クライアントの設定

では、他のコンピュータが公開サーバの代わりにローカルrsyncミラーを使うようにしましょう。 /etc/make.confを編集してSYNC変数がサーバを示すようにします。

コード表示 4.4: /etc/make.confでSYNCを定義

(サーバのIPアドレスを利用)
SYNC="rsync://192.168.0.1/gentoo-portage"
(もしくはサーバ名を利用)
SYNC="rsync://your_server_name/gentoo-portage"

以下の方法でコンピュータが正しく設定されてローカルミラーを参照しているか確認することができます。

コード表示 4.5: 確認と同期

(SYNC変数が設定されているか確認)
# emerge --info|grep SYNC
SYNC="rsync://your_server_name/gentoo-portage"
(ローカルミラーと同期)
# emerge --sync

これで完了です。全てのコンピュータはこれからはemerge --syncを実行した時はいつでもローカルrsyncミラーを利用するでしょう。