1. fmirror とは
epftp サーバ(ftp.ep.sci.hokudai.ac.jp) は専攻サーバ群(mail,www,dns,news,ftp 各サーバ)の構築に必要なソフトウェアを集積するために様々なFTPサイトを ミラーリングしている。FTP サイトにおけるミラーリング(ミラー)とは、 外部の FTP サイト内の 一部もしくは全てのディレクトリツリーを 丸ごと自らが管理する FTP サイトに持ってくることである。ミラーリングの 際には、ソフトウェアを含むディレクトリツリーを転送していただく相手側の FTP サーバ(以下、ミラー元サーバ)に敬意を払い、 相手側にサーバに 極力負荷をかけないように最大限の 注意をする。
(注)
ミラーリングもミラーもほぼ同じ意味。ミラー元サーバ内の一部か全部を 鏡に映すように、自サーバに同期することである。通常のミラーでは、ミラー元サーバ と自サーバの差の分だけ、ファイルを転送していただく。
green ではミラーリングの自動化のために、fmirror と cron というソフトウェアを 導入している。現在は Debian パッケージに含まれている"fmirror version 0.8.4" を用いている。 以下、 fmirror とその設定ファイルを用いたミラーリングの方法に ついて説明する。
(注)
green に fmirror を導入した当初は、ミラーソフトとしての fmirror はさほど 問題がなかったのかもしれないが、現在は、ソフトウェア配布元サーバに負荷を かけない ミラーソフトとして、"rsync" を勧める FTP サイトがいくつか存在する。 anonymous rsync を認めている FTP サイトをミラーする場合は、fmirror より rsync を用いるやり方のほうが 好まれるようだ。epftp サーバでも rsync を 用いた ミラーリング手法の早期導入が求められている。
2. fmirror のインストール と使用方法
fmirror は deb パッケージになっているので、
# apt-get install fmirror
と、apt 系コマンドを実行すれば、インストールできる。
fmirror はコマンドであり通常は、
# fmirror -f /etc/fmirror/hogehoge.conf
とすれば、実行される。その際に、設定ファイルである /etc/fmirror/hogehoge.conf の指定どおり、ミラーリングが実行される。 設定ファイルの編集方法については、次節で解説する。fmirror の オプションの 使い方や、設定ファイルについては、
# man fmirror
にたいていのことは載っている。しかし英語である。
3. fmirror の設定ファイル (/etc/fmirror/hogehoge.conf の編集)
3.1 /etc/fmirror/ について
hogehoge.conf の格納場所である /etc/fmirror/ は fmirror に関する設定ファイルの置き場である。 /etc/fmirror/ は fmirror をインストールする際にできるディレクトリである。 ミラーリングを行う際の設定ファイルである hogehoge.conf ファイルが 多数と、config ファイルも格納されている。 config ファイルは "ミラーリングの自動化"で用いられるファイルで、5節でくわしく解説する。
3.2 ソフトウェアと設定ファイルの対応
各ソフトウェアと設定ファイルの対応は以下の通り
ソフトウェア名 | 設定ファイル | ミラー元サーバ |
debian | debian.conf | 電脳サーバ(京大) |
debian-jp | debian-jp.conf | 電脳サーバ(京大) |
debian-non-US | debian-non-US.conf | 電脳サーバ(京大) |
debian-security | debian-security.conf | security.debian.org |
debian-misc(CD IMAGE 等) | debian-misc.conf | ftp.cs.umn.edu |
Vine | vine-nonseed.conf vineseed.conf |
神戸大学(FTP) |
kernel | kernel.conf kernel_v24.conf | ftp.jp.kernal.org |
namazu | namazu.conf | ftp.namazu.org |
qmail | qmail.conf | 地震火山観測センター(北大) |
ezmlm | ezmlm.conf | 地震火山観測センター(北大) |
apache | apache.conf | ftp.ayamura.org |
apache-ssl openssl imap bind inn proftpd php |
ayamura.conf | ftp.ayamura.org |
CPAN |
cpan.conf | ftp.ayamura.org |
TeraTerm & ttssh |
teraterm.conf | ftp.sakurachan.org |
FTP fmirror の設定ファイルは、 http://www.ep.sci.hokudai.ac.jp/~epftp/y2004/dvlop/fmirror/conf/ 以下にも保存する。設定ファイルのバックアップと、構築ドキュメントの充実の ためである。FTPサーバからWWWサーバに設定ファイルをコピーするために専用の シェルスクリプトをWWWサーバの上記ディレクトリに用意してある。使い方は、 FTP サーバで設定ファイルが更新されるたびに、$ ./mkconf_txt.shこれで、設定ファイルに .txt の拡張子がついたファイルが作成される。
3.3 /etc/fmirror/hogehoge.conf の編集
[3.3.0] [0] 基礎事項
新たな設定ファイルを作る場合、 /etc/fmirror/base.confを雛形として 設定ファイルを作成する。
# cp /etc/fmirror/base.conf /etc/fmirror/hogehoge.conf # emacs /etc/fmirror/hogehoge.conf
base.conf の項目のうち、[1][2][3] が必須項目であり、 [4] 〜 [9] は、細かな設定のために用いる。
[3.3.1] [1] サーバ固有の設定
username:
ミラーリング先の ftp サーバにログオンする際に使用するユーザー名。
専攻FTPサーバでは anonymous を用いる。
passwd:
FTP サーバ管理者のメールアドレスを入れる。
専攻FTPサーバでは epftp@ep.sci.hokudai.ac.jp を用いる。
[3.3.2] [2] ミラー元サーバの指定
host:
ミラー元サーバのドメイン名もしくは IP アドレス。
debian のミラーであれば dennou-k.gaia.h.kyoto-u.ac.jp
remotedir:
リモート(ミラー元サーバ)のミラーリングを行うディレクトリ。
debian のミラーであれば /library/Linux/debian/
host: と remotedir: は ミラーしたいディレクトリ(ファイル)の URL をみて、設定する。たとえば Tera Term が公開されている URL はftp://ftp.sakurachan.org/pub/windows/net/term/teraterm/なので、はじめの ftp:// を除いた部分 がホスト名 ホスト名以下、初めのスラッシュ(/)以降がディレクトリ名になるので、host: ftp.sakurachan.org remotedir: /pub/windows/net/term/teraterm/
[3.3.3] [3] 持ってきたファイルの置き場
localdir:ローカル(green) に持ってくるファイルを保管するディレクトリ debian の場合は、/home/ftp/.hd03/Linux/Debian/debian/ ここは、周りのFTP サーバに習って、わかりやすいディレクトリ構成に するのが望ましい。
[3.3.4] [4] ログ・圧縮に関する各種設定
loglevel:どれだけ詳しくログをとるかを設定します。 loglevel:3 が詳しく、loglevel:1 が簡単な ログです。 設定ファイルを編集する際は、loglevel を 3 に設定するとよいでしょう。 その設定ファイルにミスがないと確認ができれば、loglevel を 2 か 1 に するのもよいでしょう。
以下はメモ書きです。混乱する恐れがあるなら読まないでください。
以下の4行がコメントアウトされている。
# [4] ログ・圧縮に関する各種設定をします。 loglevel: 3 #compressed: 1 #decompressor: gzip #decompressor_opt: -dc #dircmd: RETR ls-lR.gzこの4行をうまく機能させれば、ミラーリングの時間が短くできること はわかっている。しかし、デフォルトの設定では、green 内でもうすでに最新の ものに更新されているのファイルを 何度も「new time getting (更新時刻が新しいので更新しよう!)」とするなど、 エラーが出てしまい、このままでは毎回のミラーリングで大量転送が求められる。 そしてその転送量の99%は無駄な転送になる。(最新版を最新版で上書きしようとする から。)
きちんとミラーされているのに、「new time getting」と表示されるファイルは dennnou-k (ミラー元) におけるのタイムスタンプが green のものより 9時間早いので、タイムゾーンの問題であると推定される。
green が GMT で、 dennou-k は日本時間で タイムスタンプをつけている。 通常のミラーリングではソフト(fmirror)がこの9時間の差を認識したうえで、 9時間を差っぴいてそれでもタイムスタンプがずれているもののみ更新の対象に しているようであるが、4行のコメントをはずすとタイムゾーンの違いが認識されず、 「9時間ずれているから new time getting」とされてしまっているようだ。
[3.3.5] [5] ミラーから除外するファイル(郡)の設定
exclude:指定するパターンにマッチするファイルはミラーリングしない。文法は
exclude: p ^(Vine-1.0/|Vine-1.1/)アルファベット + 正規表現の形で表す。 p はミラーするディレクトリのトップから対象となる ディレクトリやファイルをフルパスで指定するときに使う。 逐一指定できる。フルパスがわかっていないと使えない。 正規表現の前の "^" は、ミラー対象のディレクトリの 先頭から… の意味である。上記のように正規表現を、 ディレクトリやファイルを一括して指定するために用いる。 上の例の場合、対象ディレクトリ直下の Vine-1.0/ と Vine-1.1/ はミラー対象からはずすことになる。
exclude: f ^(\.cache|\.zipped|lost\+found)fは特定のディレクトリやファイル名を指定するときに使う。 どんなにディレクトリの奥にあるファイルでも適用対象に 指定することができる。 上の例の場合、.cache .zipped という拡張子で終わるファイルや lost+found ディレクトリはミラー対象から外れることになる。 p か f は必須であり、追加で n i x のオプションをつけることができる。
n は、ローカルに該当ディレクトリがあっても削除しない ことを意味する。exclude: でミラーから外したディレクトリを ローカルでとっておきたい場合に使う
exclude: np ^(VineSeed/)
とすれば、VineSeed はミラーされなくなるが、削除もされない。 (p オプションだけだと削除される。) 単純にとっておいたり、 別ファイルでミラーを指定することが可能になる。
i は、マッチしても反応しないこと(?)を意味する。 x 正規表現以外のものとマッチする、ルールを反転 させる効果がある。
include:指定するパターンにマッチするファイルをミラーリングする。 exclude: と include: の両方が同じものを指定した場合、 設定ファイルの後にある設定が前にある設定を上書きする。 include: の文法は exclude: と同じである。
4. fmirror の 実行
設定ファイルを編集し終わったら、fmirror を実行する。
# fmirror -f /etc/fmirror/hogehoge.conf
とすれば、/etc/fmirror/hogehoge.confの指定どおり、ミラーリングが実行される。 ターミナルを流れるミラーの進行状況を見ながら、ミラーがうまくいっていること (設定ファイルに誤りがないこと)を確認する。"delete"という文字がが必要以上に乱発 するようであれば、fmirror の プロセスを kill するべきでしょう。
現管理者は、2003年のサーバ再構築時に、設定ファイルのミスにより、 集積されたソフトウエアのうち、80GB分をとばしてしまいました。
ミラーのログをとりながら、fmirror をバックグラウンドでまわすには、
# fmirror -f /etc/fmirror/hogehoge.conf &> /var/log/fmirror/hogehoge.log &
とするとよい。この場合、/var/log/fmirror/ に hogehoge.log という ログができる。log は どこになんと言う名前でとってもかまいませんが、 後述する"ミラーの自動化"において、fmirror に関するログは /var/log/fmirror/ 以下にとられるので、ここに置くのが無難である。
このようにFTPサーバ管理者がコマンドを打ち込むことで実行される ミラーリング を便宜上 "手動ミラー" と呼ぶ。"手動ミラー"だけで FTPサイトを管理しようとすると、ミラー対象サイトの増大に伴い 管理者の管理コストが増大する。そこで、自動化できるミラーリングは cron を用いて自動化しまう。ミラーリングの自動化(自動ミラー) については次節で解説する。
5. cron を用いた fmirror の自動化
5.1 /etc/fmirror/config 設定
fmirror を自動化する設定ファイルが、 /etc/fmirror/config である。 config ファイルを編集した時点で、ミラーリング自動化のスイッチを入れたことになる ので、不用意な設定をしないように十分注意する。ミラーが実行される時間帯を指定 する方法については、後述する。
設定ファイルを編集する。
# emacs /etc/fmirror/config
編集前のconfig --> 編集後のconfig
変更点1 NIGHTLY_JOBS=""
以下のように変更する。
NIGHTLY_JOBS="debian-security vine-nonseed vineseed"
ここで変数 NIGHTLY_JOBS に指定した文字列に.conf を付けた名前のファイルが cron により、1日1回実行される fmirror の設定ファイルとして、 用いられることになる。 ここでは debian-security vine-nonseed vineseed となっているため
# fmirror -f /etc/fmirror/debian-security.conf &> /var/log/fmirror/debian-security.log # fmirror -f /etc/fmirror/vine-nonseed.conf &> /var/log/fmirror/vine-nonseed.log # fmirror -f /etc/fmirror/vineseed.conf &> /var/log/fmirror/vineseed.log
が、1日1回自動的に実行されることになる。
変更点2 DAY[0]="" から DAY[6]=""
以下のように変更する。
DAY[0]="kernel" DAY[1]="debian" DAY[2]="ayamura" DAY[3]="debian-jp" DAY[4]="apache kernel_v24" DAY[5]="debian-non-US" DAY[6]="cpan"
debian-misc,qmail,ezmlm については、ミラーを自動化しない。 気がついたときに手動で fmirror コマンドを実行する。
5.2 cron による ミラーリングの流れ
実際に、/etc/fmirror/config を読んで fmirror を実行するのは、 /usr/lib/fmirror/run_fmirror である。これを定期的に cron が 実行することにより、ミラーが自動化される。 実際、/etc/cron.d/fmirror は以下のように書かれている。
0 4 * * * root [ -x /usr/lib/fmirror/run_fmirror ] && /usr/lib/fmirror/run_fmirror
以上のミラーリングの行程を簡単に説明すると次のようになる。
- cron により /etc/cron.d/fmirror が読み込まれる。
- /usr/lib/fmirror/run_fmirror が実行される。
- …/run_fmirror が /etc/fmirror/config を読み込み 相当するコマンド fmirror -f hogehoge.conf を実行する。