[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Debian JP master SVN www commits (rev.1080)
=======================================================
Repository: /org/svn.debian.or.jp/repos
Revision: 1080
Commiter: kmuto
Date: 2010-09-05 14:30:46 +0900 (日, 05 9月 2010)
=======================================================
Log:
ftpsync script is changed. ftp.jp.debian.org criteria is more restricted
=======================================================
Changed:
U www/trunk/src/community/push-mirror.tt2
Modified: www/trunk/src/community/push-mirror.tt2
===================================================================
--- www/trunk/src/community/push-mirror.tt2 2010-09-05 01:30:17 UTC (rev 1079)
+++ www/trunk/src/community/push-mirror.tt2 2010-09-05 05:30:46 UTC (rev 1080)
@@ -6,12 +6,25 @@
Debian JP Project では、1 つのサーバがダウンしただけで APT によるパッケージのダウンロードができなくなるといった障害に対処するため、複数の Debian ミラーサーバを仮想的に集約して耐障害性を持たせる CDN (Contents Delivery Network) 化を進めています。CDN ミラーには、次の APT リポジトリでアクセスできます (<a href="http://www.debian.or.jp/blog/cdn_debian_or_jp-start.html">詳細</a>)。</p>
<pre>
+deb http://cdn.debian.net/debian/ [% stable_codename %] main contrib non-free
+deb-src http://cdn.debian.net/debian/ [% stable_codename %] main contrib non-free
+deb http://cdn.debian.net/debian-volatile/ [% stable_codename %]/volatile main contrib non-free
+deb-src http://cdn.debian.net/debian-volatile/ [% stable_codename %]/volatile main contrib non-free
+</pre>
+
+<p>または</p>
+
+<pre>
deb http://ftp.jp.debian.org/debian/ [% stable_codename %] main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ [% stable_codename %] main contrib non-free
+deb http://ftp.jp.debian.org/debian-volatile/ [% stable_codename %]/volatile main contrib non-free
+deb-src http://ftp.jp.debian.org/debian-volatile/ [% stable_codename %]/volatile main contrib non-free
</pre>
<p>(※[% stable_codename %] 以外にも、Debian 公式ミラーで提供されている stable、testing、unstable、[% oldstable_codename %]、[% testing_codename %]、sid、experimental といった名前も利用できます)</p>
+<p>(※cdn.debian.net はあなたが Debian を使用しているネットワークが属する国・地域に最適化したミラーサーバを選択します。ftp.jp.debian.org はあなたが他国にいたときでも常に日本国内のミラーサーバを選択します)</p>
+
<p>ミラー参加を検討しているサイトのために、本ドキュメントでは、Debian ミラーの構築方法と、CDN への追加方法を説明します。</p>
<h3>前提条件</h3>
@@ -20,9 +33,10 @@
</p>
<ul>
-<li>Debian のフルミラーであること。 つまり、ftp.debian.org で公開されているものと同様に、すべてのアーキテクチャ、膨大なすべてのファイルを格納する必要があります。</li>
+<li>Debian および Debian Volatile のフルミラーであること。 つまり、ftp.debian.org で公開されているものと同様に、すべてのアーキテクチャ、膨大なすべてのファイルを格納する必要があります。</li>
<li>push ミラーであること。詳細は後述しますが、上流ミラーが更新を完了したタイミングでシグナルを送り、それを受けてミラーを行うようにします。こうすることで、上流がまだ更新中なのにミラーを行って APT の整合性を壊した状態にしてしまったり、上流のハードウェアクラッシュを受けて一緒にミラーを失ってしまったりといった事態を回避しやすくなります。</li>
-<li>Debian のミラーは HTTP (Web サーバ) で提供されており、Web ブラウザから見て /debian ディレクトリの下にあること。エイリアスや rewrite モジュールなどを使ってもかまいません。ただし、HTTP リダイレクトヘッダは APT ツールが対応していないので利用できません。FTP サービスは提供しなくてもかまいません。rsync サービスは提供できるとベターですが、必須ではありません。</li>
+<li>Debian のミラーは HTTP (Web サーバ) で提供されており、Web ブラウザから見て /debian ディレクトリおよび /debian-volatile の下にあること。エイリアスや rewrite モジュールなどを使ってもかまいません。ただし、HTTP リダイレクトヘッダは APT ツールが対応していないので利用できません。</li>
+<li>cdn.debian.net への加盟には不要ですが、ftp.jp.debian.org に加盟するには、FTP サービス (/debian および /debian-volatile として見えること。シンボリックリンクの使用も可能) および rsync サービス (::debian および ::debian-volatile として見えること) を提供する必要があります。</li>
</ul>
<p>
@@ -30,9 +44,9 @@
</p>
<ul>
-<li><strong>大容量ディスク:</strong> ミラーをするために何よりも必要なのは、大きなディスクです。現時点 (2010年6月) で<a href="http://www.debian.org/mirror/size">フルミラーには 520GB 程度を消費しており</a>、将来見込まれる増加を前提とすると最低でも 1TB 以上のクラスのディスク容量が必要になります。ミラーするアーテキクチャを絞ればディスクの消費は抑えられますが、本ドキュメントでは CDN の一員とするための条件であるフルミラーを行うものとします。RAID は必須ではありませんが、ディスク障害によってミラーが消失すると、復旧に時間がかかることになります。</li>
+<li><strong>大容量ディスク:</strong> ミラーをするために何よりも必要なのは、大きなディスクです。現時点 (2010年9月) で<a href="http://www.debian.org/mirror/size">フルミラーには 430GB 程度を消費しており</a>、将来見込まれる増加を前提とすると最低でも 1TB 以上のクラスのディスク容量が必要になります。ミラーするアーテキクチャを絞ればディスクの消費は抑えられますが、本ドキュメントでは CDN の一員とするための条件であるフルミラーを行うものとします。RAID は必須ではありませんが、ディスク障害によってミラーが消失すると、復旧に時間がかかることになります。</li>
<li><strong>安定した広帯域ネットワークと堅固なハードウェア:</strong> ミラーとなったサーバには、(CDN では分散されるとはいえ) 多数のディスクアクセスおよびネットワークアクセスが発生することになります。特に rsync で上流ミラーに追従する最中は、短時間のうちに多量のアクセスが起こり、高負荷になります。たとえば安価な NAS のようなものではこの負荷に対処しきれず、頻繁なクラッシュが起きる可能性もあります。<a href="../project/organization.html#admin">管理チーム</a>では、x86 アーキテクチャのように十分に枯れたものを推奨しています。</li>
-<li><strong>Unix OS:</strong> 基本的には、rsync と Web サーバが動作すれば OS は特に問いません (実際、Debian GNU/Linux を使っていない Debian ミラーもいくつかあります)。でも、Debian ならきっと簡単ですよ :)</li>
+<li><strong>Unix OS:</strong> 基本的には、rsync と Web サーバ (ftp.jp.debian.org に加盟するには FTP サーバも) が動作すれば OS は特に問いません (実際、Debian GNU/Linux を使っていない Debian ミラーもいくつかあります)。でも、Debian ならきっと簡単ですよ :)</li>
<li><strong>十分な実メモリ:</strong> rsync および Web サーバ (通常は Apache) は、実メモリを多量に消費します。<a href="../project/organization.html#admin">管理チーム</a>の経験では、最低でも 512MB、できれば 1GB 以上のメモリを塔載しているのが望ましいと思われます。</li>
<li><strong>外部からの SSH アクセス:</strong> このドキュメントの手順で推奨する push ミラーを実現するためには、外部からの SSH アクセスを許可するよう設定しなければなりません。基本的には上流ミラーからミラーを開始するよう送られる「シグナル」を何らかの形で受け取れさえすればよいので、上流ミラーだけにアクセスを許可して、またシェルログインを与える必要もありません。SSH 以外のシグナル (たとえば指定の Web ページにアクセスしたり自動処理メールを送ったりするなど) を使うことも理論上はできますが、現時点では要求する声もないので本ドキュメントでは扱いません。</li>
<li><strong>信頼できる連絡・管理責任者:</strong> ミラーのほぼすべての作業は自動で行われますが、まれに障害・事故で手動の作業が要求されることがあります。気付かないうちにディスクがいっぱいになっているということもあるでしょう。そのようなとき、<a href="../project/organization.html#board">理事会</a>または<a href="../project/organization.html#admin">管理チーム</a>から連絡が必要になりますが、誰に聞いたらよいのかわからないというのは困ります。また、Debian ミラーの整合性は APT の機構によってひとまず守られているとは言えますが、ファイルを汚染されたりすることのないよう、ミラーサーバ上のユーザ管理は厳密にお願いいたします。</li>
@@ -40,29 +54,48 @@
<h3>ミラーの設定</h3>
-<p>Debian ミラーを構成するには、まず <a href="[% wwworg %]/mirror/anonftpsync">anonftpsync</a> スクリプトで rsync によるミラーを行います。</p>
+<p>Debian ミラーを構成するには、まず ftpsync スクリプトで rsync によるミラーを行います。</p>
<ol>
-<li>サーバの適当なディレクトリに <a href="[% wwworg %]/mirror/anonftpsync">anonftpsync</a> をダウンロードして配置します。たとえば /home/ftpadm/bin/anonftpsync とします。ミラーを行うユーザは専用の (あまり権限のない) ものを作ったほうがよいでしょう。</li>
-<li>このファイルを編集します。
+<li>サーバの適当なディレクトリに git リポジトリ https://ftp-master.debian.org/git/archvsync.git のクローンまたは<a href="http://ftp-master.debian.org/ftpsync.tar.gz">スナップショット</a>を展開します。たとえば /home/ftpadm/archvsync とします。ミラーを行うユーザは専用の (あまり権限のない) ものを作ったほうがよいでしょう。</li>
+<li>~/bin と ~/etc のシンボリックリンクを作成します。そして、PATH に ~/bin を追加します。
+<pre>
+$ cd
+$ ln -s ~/archvsync/bin bin
+$ ln -s ~/archvsync/etc etc
+</pre>
+ </li>
+<li>Debian ミラーのために、etc/ftpsync.conf.sample を etc/ftpsync.conf としてコピーし、必要な箇所のコメント記号#を外して編集します。
<ul>
- <li>TO: Debian ミラーを配置するディレクトリ。たとえば /var/www/debian。ミラーを実行するユーザが書き込める必要があります</li>
- <li>RSYNC_HOST: Debian 上流ミラー。たとえば ftp1.debian.or.jp。push ミラーサービスを開始するにあたってどの上流を選ぶべきかは<a href="../project/organization.html#board">理事会</a>または<a href="../project/organization.html#admin">管理チーム</a>に問い合わせてください。最初の時点では手近なミラーでかまいません。</li>
- <li>RSYNC_DIR: 上流ミラーで公開されている Debian ミラーの名前。通常は debian/</li>
+ <li>TO: Debian ミラーを配置するディレクトリ。たとえば /var/www/debian。事前に空ディレクトリを用意し、ミラーを実行するユーザが書き込める必要があります</li>
+ <li>RSYNC_PATH: 上流ミラーで公開されている Debian ミラーの名前。通常は「debian」</li>
+ <li>RSYNC_HOST: Debian 上流ミラー。たとえば ftp.nara.wide.ad.jp。push ミラーサービスを開始するにあたってどの上流を選ぶべきかは<a href="../project/organization.html#board">理事会</a>または<a href="../project/organization.html#admin">管理チーム</a>に問い合わせてください。最初の時点では手近なミラーでかまいません</li>
<li>LOGDIR: ミラーログを置くディレクトリ。たとえば /home/andy/logs。ミラーを実行するユーザが書き込める必要があります</li>
+ <li>MAILTO: ログを送付するアドレス。長大ですし、通常はコメントアウトされたままでよいでしょう</li>
+ <li>EXCLUDE: 除外するファイル。フルミラーのためには空のままにしておきます</li>
<li>ARCH_EXCLUDE: 除外するアーキテクチャ。フルミラーのためには空のままにしておきます</li>
- <li>EXCLUDE: 除外するファイル。フルミラーのためには空のままにしておきます</li>
- <li>MAILTO: ログを送付するアドレス。長大ですし、通常は空でよいでしょう</li>
</ul>
</li>
-<li>rsync、 procmail、debianutils をインストールしておきます。procmail はミラーの動作自体には必須ではないのですが、ミラー中であることを示すロックファイルを作成するのに lockfile コマンドをスクリプト内で使っています。procmail を入れられない場合には、スクリプト内で lockfile を呼び出している箇所を別のコマンドで置き換える必要があります。debianutils もミラーの動作には影響しませんが、ログファイルのローテーションのために savelog コマンドをやはりスクリプトの最後で実行しています。</li>
+<li>rsync、debianutils をインストールしておきます。debianutils はミラーの動作には影響しませんが、ログファイルのローテーションのために savelog コマンドを使っています。</li>
<li>Debian の CD や DVD があるなら、ミラーディレクトリにコピーしておくと、ダウンロード時間を一部軽減できます。</li>
-<li>anonftpsync を実行します。LOGDIR で指定したディレクトリにログが書き込まれるので、tail -f /home/andy/logs/debian-mirror.log のようにしてうまくダウンロードできているか監視するのがよいでしょう。</li>
-<li>anonftpsync での rsync ミラーは 2 回行われます。最初にパッケージプールの pool/ ディレクトリへの追加ミラーが行われ、そのあとにパッケージ情報ファイルを格納する dists/ ディレクトリの更新と、上流で削除されたファイルの削除が行われます。こうすることで、パッケージ情報にはあるのにプールにファイルがないという事態を避けられます。</li>
+<li>ftpsync を実行します (~/bin/ftpsync)。LOGDIR で指定したディレクトリにログが書き込まれるので、tail -f /home/andy/logs/rsync-ftpsync.log のようにしてうまくダウンロードできているか監視するのがよいでしょう。</li>
+<li>ftpsync での rsync ミラーは 2 回行われます。最初にパッケージプールの pool/ ディレクトリへの追加ミラーが行われ、そのあとにパッケージ情報ファイルを格納する dists/ ディレクトリの更新と、上流で削除されたファイルの削除が行われます。こうすることで、パッケージ情報にはあるのにプールにファイルがないという事態を避けられます。</li>
<li>上流からミラーがうまくできたことを確認したら一段落です。Web サーバ経由で http://サーバ名/debian/ でミラーを参照できる (つまり、http://サーバ名/debian/dists/stable のように参照できる) ようにしておきましょう。</li>
</ol>
+<p>debian-volatile ミラーも同様に構成します。</p>
+<ol>
+<li>etc/ftpsync.conf.sample を etc/ftpsync-volatile.conf としてコピーし、必要な箇所のコメント記号#を外して編集します。<ul>
+ <li>TO: たとえば /var/www/debian-volatile</li>
+ <li>RSYNC_PATH: 通常は「debian-volatile」</li>
+ <li>RSYNC_HOST: たとえば ftp.nara.wide.ad.jp</li>
+ <li>LOGDIR: たとえば /home/andy/logs</li>
+</ul>
+</li>
+<li>ftpsync にオプションを付けて、「~/bin/ftpsync sync:archive:volatile」と実行します。LOGDIR で指定したディレクトリにログ rsync-ftpsync-volatile.log が書き込まれます。</li>
+</ol>
+
<h3>push ミラー化する</h3>
<p>前述の方法で上流からミラーを引っ張ってくる (pull) ことはできるようになりましたが、いつ上流の更新のミラーを行うかという問題があります。だいたいのアタリを付けて cron で定期的に実行するという方法もありますが、上流で何か不具合があったときにはその影響を被ってしまいます。push ミラーは、上流が自身のミラーの完了後に下流に向けてシグナルを送り (push)、これを受けて初めて下流がミラーを開始するというものです (下図を参照)。
@@ -71,38 +104,44 @@
<div class="img"><img src="pushmirror.png" width="568" height="365" alt="pushミラーの仕組み"></div>
<p>
-シグナルには、SSH アクセスが一般的に用いられています。上流のミラーユーザの SSH 公開鍵 (<a href="../project/organization.html#board">理事会</a>または<a href="../project/organization.html#admin">管理チーム</a>に尋ねてください) をサイト上のミラーユーザの認証済み鍵リング (~/.ssh/authorized_keys) に加え、この鍵でのアクセスを受けたときに anonftpsync を起動する、というように設定します。
+シグナルには、SSH アクセスが一般的に用いられています。上流のミラーユーザの Debian ミラーおよび Debian Volatile ミラーのための SSH 公開鍵 (<a href="../project/organization.html#board">理事会</a>または<a href="../project/organization.html#admin">管理チーム</a>に尋ねてください) をサイト上のミラーユーザの認証済み鍵リング (~/.ssh/authorized_keys) に加え、この鍵でのアクセスを受けたときに anonftpsync を起動する、というように設定します。
</p>
<pre>
-no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/home/ftpadm/bin/anonftpsync &" ssh-rsa AB12....2vIg== ftpadm@hp.debian.or.jp
+no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/home/ftpadm/bin/ftpsync &" ssh-rsa AB12....2vIg== ftpadm@ftp.debian.or.jp
+no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="/home/ftpadm/bin/ftpsync sync:archive:volatile &" ssh-rsa EF34....4zBc== ftpadm@ftp.debian.or.jp-volatile
</pre>
<p>上流からシグナルの送信テストを行い、ミラースクリプトが起動することを確認します。あとは、マスターサーバでの更新が発生するごとに順にシグナルとミラーの波及が行われるようになります。</p>
-<p>ちなみにシグナルを送る側は、次のように記述した signal.sh を用意し、</p>
+<h3>push ミラー元の設定</h3>
+<p>ちなみにシグナルを送る側は、etc/runmirrors.conf.sample を etc/runmirrors.conf と etc/runmirrors-volatile.conf としてコピーし、これを編集します。</p>
+
+<ul>
+<li>KEYFILE: 相手に SSH ログインするときに使う秘密鍵ファイル。Debian ミラー (runmirrors.conf) と Debian Volatile ミラー (runmirrors-volatile.conf) では異なる鍵ファイルを指定する必要がある</li>
+<li>LOGDIR: ftpsync.conf と合わせる</li>
+</ul>
+
+<p>同様に、etc/runmirrors.mirror.sample を etc/runmirrors.mirror と etc/runmirrors-volatile.mirror としてコピーし、ミラーシグナルを送るホストの情報を末尾に指定します。一般的な書式は次のとおりです。</p>
+
<pre>
-#!/bin/sh
-echo Signalling $1
-ssh -4 -2 -o"BatchMode yes" -o"user $2" "$1" -i $HOME/.ssh/id_dsa_push-mirror sleep 1 < /dev/null > /dev/null 2>&1
-(ここでは秘密鍵には~/.ssh/id_dsa_push-mirrorを使っている)
+all ホスト名またはニックネーム ホスト名 相手ユーザ名
</pre>
-<p>これを anonftpsync の最後で呼び出すだけです。</p>
+<p>たとえば ftp.example.jp の ftpadm ユーザにシグナルを送る (ログイン試行する) には、次のようになります。</p>
<pre>
-savelog $LOGFILE
-
-/home/ftpadm/bin/signal.sh ftp.example.jp ftpadmin
-(下流ミラーのftp.example.jpのユーザftpadminにシグナルを送る)
+all ftp.example.jp ftp.example.jp ftpadm
</pre>
+<p>etc/ftpsync.conf および etc/ftpsync-volatile.conf の HUB 行のコメントを取り、「HUB=true」とします。これで、ミラー完了後にシグナルを送るようになりました。手動でシグナル送出を試すには、~/bin/runmirrors および ~/bin/runmirrors volatile を実行します。</p>
+
<h3>CDN に加盟する</h3>
<p>ここまでできたら、あとは CDN に加盟するだけです。CDN は、DNS サーバを使ったラウンドロビンの一種ですが、重み付けを設定し、加盟サイトの生存確認も行うことで、耐障害性が高く負荷も分散されたダウンロードサービスを提供します (下図を参照)。</p>
<div class="img"><img src="cdn.png" width="487" height="410" alt="通常のDNSラウンドロビンとCDNによるラウンドロビンの違い"></div>
-<p>push ミラー構築後、<a href="../project/organization.html#board">理事会</a>に連絡してください。重み付けの設定のため、あなたの提供できる帯域についての情報も付加していただけると助かります。連絡を受けた<a href="../project/organization.html#admin">管理チーム</a>は、あなたのミラーを CDN のネットワークに追加します。「host cdn.debian.or.jp」で DNS 問い合わせを実行し、あなたのサーバが加わっていることを確認してください。</p>
+<p>push ミラー構築後、<a href="../project/organization.html#board">理事会</a>に連絡してください。重み付けの設定のため、あなたの提供できる帯域についての情報も付加していただけると助かります。連絡を受けた<a href="../project/organization.html#admin">管理チーム</a>は、あなたのミラーを CDN のネットワークに追加します。「host cdn.debian.net」で DNS 問い合わせを実行し、あなたのサーバが加わっていることを確認してください。</p>
<h3>その他</h3>