
<< はじめに >>

 `ftpmirror' は、FTP を用いてあるディレクトリ以下の構造をまるごと
 コピーする(以下、これをミラーと呼びます)ためのツールです。

 ファイル転送は、新規ファイルの追加や、変更のあった場合のみ行われ
 ますので効率的なディレクトリツリーの同期が可能です。

 FTP サーバのメンテナンスや、Web サーバのコンテンツ同期、その他、
 システムのバックアップなど、色々な場面でご利用いただけます :-)

 同様のものに `mirror' というソフトウェアがありますが、これは双方
 のすべてのファイルリストを作成、比較してから転送を開始するため、
 大規模なディレクトリツリーの同期ではメモリ(もしくは一時ディスク)
 の不足などが問題になることがあります。

 作者が 16Mbytes しか持たないマシンで FTP サーバを運用していた頃、
 上記の mirror ソフトは事実上使いものにならなかったため :-p 結局、
 ゼロから作ってしまったのが `ftpmirror' です。

 ftpmirror では「深さ優先探索＋処理した情報は捨てる」という方針で
 実装されていますので、かなり大規模なディレクトリツリーの同期でも
 メモリ使用率はある程度抑えられます。例えば、FreeBSD distribution
 の full mirror (ftp://ftp.FreeBSD.ORG/pub/FreeBSD/ 以下のすべて)
 に必要なメモリは、手元で 8〜9 Mbytes 程度です。

 なお、ftpmirror を利用する場合は perl 5.004 以上が必要です。まず
 お手持ちの perl の version を確認してください。(perl -v で確認が
 できます)

 ただし、perl 5.004 には memory leak に関するバグがあるようです。
 大規模なディレクトリツリーをミラーしようとすると、どんどんメモリ
 を消費してしまうことがあります。作者は perl5.005 で動作確認を
 していますが、こちらでも若干の memory leak はあるようです。ただ、
 perl 5.004 ほどではなく、実用上、大きな問題には、なっていません。
 現状では perl 5.005 以上を利用されることをお勧めします。


<< ftpmirror のインストール >>

 ftpmirror の最新版は、ftp.intec.co.jp で公開されています。以下の
 URL で示されるディレクトリから最新のものを取得してください。

  ftp://ftp.intec.co.jp/pub/utils/ftpmirror/       : release 版
  ftp://ftp.intec.co.jp/pub/utils/ftpmirror/beta/  : ベータ版

 取得するファイルは ftpmirror-x.y.tar.gz のようなファイル名を持つ
 アーカイブファイルになっています。これを適当なディレクトリで展開
 して、インストールを開始します。

  % cd /usr/local/src
  % gzip -cd < /tmp/ftpmirror-x.y.tar.gz | tar xf -

 上記ファイルを展開すると、ftpmirror-x.y というディレクトリが作成
 されますので、そのディレクトリに移動し、configure を実行します。
 なお、使用する perl を明示的に指定したい場合は、環境変数 PERL に
 該当する path を定義してから configure を実行してください。

  % cd ftpmirror-x.y
  % ./configure

  or 使用する perl を明示的に指定する場合は

  % cd ftpmirror-x.y
  % env PERL=/usr/local/bin/perl5.005 ./configure 

 次に make を実行します。

  % make

 問題なく make が終了したら install です。

  % su
  # make install

 上記のようにインストールすると、以下のファイルが作られます。

  /usr/local/bin/ftpmirror
  /usr/local/bin/rotate
  /usr/local/etc/ftpmirror.cf-sample
  /usr/local/lib/perl5/site_perl/Fan.pm
  /usr/local/lib/perl5/site_perl/Fan/...   以下ライブラリ
  /usr/local/lib/perl5/site_perl/auto/Fan/...   以下ライブラリ

  ※ ただし、perl のインストール時の設定によっては、ライブラリの
     インストールディレクトリは若干異なります。

 インストールが終了したら設定ファイルをコピーして必要な定義を追加
 します。

  # cd /usr/local/etc
  # cp ftpmirror.cf-sample ftpmirror.cf
  # vi ftpmirror.cf


<< ftpmirror の設定 >>

 ftpmirror では、ミラーしたいアーカイブ(以下ではパッケージも同義)
 ごとにいくつかのパラメータの指定を行います。パラメータは起動時の
 オプション、もしくは設定ファイルで指定できます。

 なお、設定ファイルはデフォルトで /usr/local/etc/ftpmirror.cf と
 なっていますが、起動時に --load-config=/hogehoge/local.cf という
 オプションを指定することによって設定ファイルを変更できます。また、
 --load-config+=/hogehoge/local.cf と指定すると、上記のデフォルト
 設定ファイルのあとに、指定した設定ファイルを追加で読み込むことも
 可能です。

 指定できるパラメータには次のような種類があります。

  デフォルトパラメータ :
     定義ファイルで、サーバやパッケージの指定の前に記述する。

  サーバパラメータ :
     タイムアウトやゲートウェイなどサーバに固有の指定を行う。設定
     ファイルで server パラメータによって指定する。

  パッケージパラメータ :
     パッケージごとの、ディレクトリや転送モードなどの指定を行う。
     設定ファイルで package パラメータによって指定する。

  オプションパラメータ :
     起動時にコマンドラインから指定される。

 上記のパラメータは、(存在すれば)この順に上書きしながら設定されて
 いきます。したがって、オプションパラメータが最優先となります。

 設定ファイルにおけるパラメータの指定は

  param-name = value

 または

  param-name += value

 として行います。前者はパラメータ param-name の値を value に定義
 し、後者は param-name に文字列 value を付加します。

 起動時のコマンドラインオプションからの指定は、--(ハイフンが二つ)
 に続いてパラメータを指定します。例えば、上記のパラメータ指定は

  % ftpmirror --param-name=value ...

 または

  % ftpmirror --param-name+=value ...

 として行った場合と同様になります。


<< パラメータについて >>

 以下に、主なパラメータについて記述します。一部、説明不足なものも
 ありますが、順次拡充していく予定ですので御了承ください。

 o システムおよび動作に関連するパラメータ

  todo: (string, default: full-mirror)
	実際に行いたい処理を指定する。現在は以下の処理が指定可能。

	scan-remote	リモート側のファイルの一覧をリストする
	scan-local	ローカル側のファイルの一覧をリストする
	update-master	ローカル側の master index を更新する
	synch-remote	index ファイルの同期を行う
	step-mirror	slave mode でのミラーを実行する
	full-mirror	標準のミラー処理を実行する (default)

	デフォルトでは標準のミラー処理 full-mirror が設定される。
	なお、それぞれ、後述の *-regexp などのフィルタは設定された
	うえで実行される。

  verbose: (boolean, default: no)
	転送に関する詳細なログを出力したいときに yes にする。yes
	の場合には、転送や変更の必要のないファイルについてもログと
	して出力される。

  log-mask: (comma separated list, default: なし)
	出力ログに関する定義を行う。ftpmirror で利用している perl
	ライブラリごとに出力ログが定義できる。例えば
		log-mask = Fan=6,Fan::FTP=7
	とすると、転送や変更のないファイルの一覧に関するログ、FTP
	に関する詳細なログ、などが出力されるようになる。

  test-mode: (boolean, default: no)
	実際の転送を行なわずに、転送すべきファイルだけを表示したい
	場合に yes にする。

 o FTP に関連するパラメータ

  ftp-server: (string, default: なし、ミラー時には必須)
	FTP で接続するサーバのホスト名。

  ftp-gateway: (string, default: なし)
	TIS の FireWall ToolKit などの proxy gateway を利用する際に
	指定する。例えば、
		ftp-user = anonymous
		ftp-server = ring.etl.go.jp
		ftp-gateway = proxy.intec.co.jp
	と指定すると、実際の接続は proxy.intec.co.jp に対して行われ
	ユーザ名には anonymous@ring.etl.go.jp が渡される。(ftp-pass
	はそのまま利用される)
	server パラメータと組み合わせると便利。

  ftp-port: (service, default: ftp)
	FTP 接続を行う際、接続するポート番号を変更したい場合に指定
	する。通常の FTP 接続では指定する必要はない。

  ftp-bindaddr: (ip address, default: なし)
	FTP で接続を行う場合に、ローカル側で使用するアドレスを明示
	的に定義したい場合に、その IP アドレスを指定する。ホストが
	複数のネットワークインターフェースを持つ場合などや、一つの
	インターフェースに複数のアドレスを割り当てている場合など、
	明示的にローカル側のアドレスを指定することで、サーバに残る
	ログなどの情報を明確にできる場合がある。通常は指定する必要
	はない。

  ftp-user: (string, default: anonymous)
	FTP のログイン名。匿名 FTP では anonymous を用いるのが普通。

  ftp-pass: (string, default: `whoami`@`hostname`)
	パスワード。匿名 FTP では、自分の e-mail アドレスを指定する
	のが一般的。

  ftp-group: (string, default: なし)
	FTP サーバにログインしたあと、グループを変更する場合に指定
	する。SITE GROUP コマンドを利用している。次の ftp-gpass と
	共に指定する必要がある。

  ftp-gpass: (string, default: なし)
	FTP サーバにログインしたあと、グループを変更する場合に指定
	する。SITE GPASS コマンドを利用している。前述 ftp-group と
	共に指定する必要がある。

  ftp-passive: (boolean, default: no)
	データの転送で PASV を利用する場合に yes にする。no の場合
	には PORT コマンドによってデータ転送用の接続を確立する。

  ftp-idle: (numeric, default: 0)
	SITE IDLE コマンドを用いて、FTP の IDLE タイマを特定の値に
	設定する。値が 0 なら特に何もしない。

  ftp-max-idle: (boolean, default: 0)
	SITE IDLE コマンドを用いて FTP の IDLE タイマを最大に設定を
	したい場合に yes にする。no なら何もしない。上記の ftp-idle
	と同時に指定された場合には ftp-max-idle が優先される。

  ftp-list-method: (LIST or STAT or STAT-A or STAT-AT, default: STAT)
	FTP サーバからディレクトリ情報を取得する際に、STAT を使うか、
	LIST を使うかを選択する。STAT はディレクトリ情報が control
	connection 上で転送されるので、LIST に比較すると connection
	を張る必要が無い分、高速である。ただし、FTP サーバソフトに
	よっては STAT でディレクトリ情報を取得できないケースもある
	ため、その場合には ftp-list-method = LIST と指定する。

	また、FTP サーバの実装、あるいは FTP proxy の実装によっては
	STAT コマンドによって connection が切れてしまうことがある。
	(しかも、ほとんど成功しながら、たまに切れるから困るのだが。)
	これはステータスコードで区別ができないため、ftpmirror では
	STAT のステータスラインから /good\s?bye/ にマッチする文字列
	を発見した場合に、エラーとして扱うようにした。このようなこと
	が頻発する場合には、ftp-list-method に LIST を指定すると良い。

	FTP サーバの実装によってはSTATコマンドでは . で始まるファイル
	名のディレクトリ情報を取得できない場合がある。その場合は STAT-A 
	を指定するとディレクトリ情報を取得することができる。

	FTP サーバの実装によっては STAT-AT を指定することによりファイ
	ル変更時刻を秒単位まで取得することができる。

  ftp-timeout: (numeric, default: 300)
	通信におけるタイムアウトを指定する。単位は秒。ネットワーク的
	に遠いサーバとの通信の場合などは、この値を大きくすると良い。

  ftp-login-retry: (numeric, default: なし)
	FTP の login に失敗した場合(正確には login 時にサーバが 421
	のコードを返して来た場合)、再度 retry を行いたい場合に、その
	retry の回数を指定する。人気のある FTP サーバでは、アクセス
	が集中した時に、ユーザ数の制限によって接続が拒否される場合が
	ある。そのようなことが頻繁に起こる場合などに指定すると良い。
	デフォルトでは retry は行わない。

	※タイムアウトによる login 失敗時の retry は、まだ、サポート
	  されていない。今後サポートの予定。

  ftp-login-delay: (numeric, default: 60)
	ftp-login-retry を指定した場合、再度 login を行うまでに待つ
	時間を指定する。単位は秒。デフォルトは 60 秒。0 秒と指定を
	した場合には、retry なしと同じ扱いになるので注意すること。

  ftp-stats: (boolean, default: no)
	ミラー終了後、ftp による総通信量を出力させたい場合に yes に
	指定する。control connection in/out, data connection in/out
	の情報が octet 単位で出力される。

  remote-timezone: (timezone string, default: undef)
	サーバの ls -l による日付が GMT からどれだけずれているか指定
	する。例えば FTP サーバが ls -l の日付を JST で表示している
	場合、remote-timezone を +0900 にする。ただし、現在は summer
	time には未対応。remote-timezone が指定されてなければ時動的
	に計算されるので、普通は指定する必要はない。

  http-proxy: (string, default: なし)
	FTP サーバへのアクセス手段として http proxy を用いる場合に、
	http proxy server のホスト名(およびポート番号)を指定する。
	この場合、ftpmirror は http proxy server との間で HTTP での
	通信を行うことになる。ただしディレクトリ情報を HTTP で取得
	するのは難しいので、ls-lR ファイルの利用や、後述 slave mode
	を利用したミラーを行う必要がある。

	例えば、ファイアウォールなどによって外部との直接 FTP が許さ
	れていない場合などは、次のように指定することによって、HTTP
	でのミラーが可能になる。

	package = FreeBSD
	 ftp-server = ftp.tokyonet.ad.jp
	 http-proxy = proxy.my.company.com
	 remote-directory = /pub/FreeBSD
	 local-directory = ~ftp/pub/FreeBSD
	 lslR-file = /pub/FreeBSD/ls-lR.Z

	ただし、HTTP はファイルの取得ごとに TCP connection の確立を
	行うため、セッションログが大量に残る、遅延が発生する、などの
	弊害があるので注意が必要である。

 o サーバに関するパラメータ

  server: (string, default: なし)
	FTP サーバごとに固有のパラメータを指定する。特に ftp-gateway,
	ftp-passive, remote-timezone 等のパラメータを指定すると便利。
	server の指定以降は次に server が指定されるか、または package
	が指定されるまでサーバ固有の指定として扱われる。

 o パッケージに関連するパラメータ

  package: (string, default: なし)
	パッケージ特有の指定を行う。package の指定以降の定義は、次に
	package が指定されるか、または server が指定されるまで、指定
	されたパッケージの定義として扱われる。

 o ミラーリングに関連するパラメータ

  put-mode: (boolean, default: no)
	ローカルのディレクトリツリーをリモートホスト上に転送したい
	場合に yes にする。例えば、社内で作成し、承認を得た Web の
	コンテンツをバリアセグメント上にコピーするには、次のような
	指定を行うと良い。

	package = webcopy
	 ftp-server = www.intec.co.jp
	 ftp-user = webadmin
	 ftp-pass = nan-jara-hoi
	 ftp-passive = yes
	 put-mode = yes
	 remote-directory = /usr/local/etc/httpd/htdocs
	 local-directory = ~ikuo/web/htdocs

  unlink: (boolean or 'rename', default: yes)
	削除対象となったファイルを、実際に消す場合に yes を指定する。
	削除対象となったファイルも削除せずに残す場合には no にする。
	unlink に rename を指定すると、削除対象となったファイルは
	ファイル名の末尾に `~' をつけたファイル名に rename される。

  unlink-limit: (size value, default: 0)
	!!! 現在はサポートしていないので注意
	このパラメータを定義することによって、ある特定のサイズ以上の
	ファイルやディレクトリを消さないように設定できる。
	このパラメータにより、サーバ上でツリーが再構成された場合に、
	誤ってすべてのファイルを消してしまうような事故を防ぐことが
	可能になった。
	例えば unlink-limit = 30M の場合、30メガバイト以上のファイル
	やディレクトリは削除されない。同様に 500K や 2G などの指定も
	可能。また、単位を付けずに unlink-limit = 100 とすると、100
	以上のエントリを持つディレクトリを削除しないという意味になる。

  ftp-force-mtime: (boolean, default: no)
	サーバ上のファイルと自分のホスト上のファイルを比較する際に
	サーバ上のファイルの最終更新時間を MDTM によって得たい場合
	yes にする。no の場合には、ファイル転送時以外 MDTM は発行
	しない。

  ignore-mtime: (boolean, default: no)
	デフォルトでは ftpmirror はファイルの最終更新時間をチェック
	するが、このパラメータが yes にセットされていると、ファイル
	のサイズだけで比較を行う。この場合は、サーバ側のファイルと
	自分のホスト側のファイルが同じサイズであれば、最終更新時間
	だけが変更され、実際の転送は行わなれない。

  temp-directory: (pathname, default: $TMPDIR || /tmp)
	ls-lR やディレクトリ情報などのファイルを一時的に保存するため
	利用されるディレクトリを指定する。

  lock-directory: (pathname, default: temp-directory)
	複数の ftpmirror が同時に同じパッケージのミラーを行うことを
	避けるため、lock ファイルを作成するディレクトリを指定する。

  create-directory: (boolean, default: yes)
	local-directory, temp-directory, lock-directory などが存在
	しなかった場合にディレクトリを作成するかどうかを指定する。
	create-directory が no で、該当のディレクトリがなければ、
	エラーになる。

  remote-directory: (string, default: なし、ミラー時は必須)
	ミラーするサーバ上のディレクトリを指定する。ミラーは、この
	ディレクトリから再帰的に行なわれる。
	文字列中に含まれる %s はパッケージ名に置換される。次の例を
	参照のこと。

  local-directory: (pathname, default: なし、ミラー時は必須)
	ftpmirror が実行されいるホスト上の、ターゲットディレクトリ。
	上記 remote-directory に対応するものを指定する。
	文字列中に含まれる %s はパッケージ名に置換される。また先頭
	が `~'(tilda) からはじまる場合、csh 同様の path 名の置換が
	施される。

	local-directory に指定されるディレクトリはローカルホスト上
	に存在している必要がある。(古いバージョンの ftpmirror では
	mkdir したが、事故を防ぐため仕様が変更になったので注意)

	例えば、ftpmirror が実行されているホストで、ユーザ ftp の
	ホームディレクトリが /var/ftp であるとすると、次の指定では
	サーバ上の /pub/FreeBSD 以下を、ローカルホストの
	/var/ftp/pub/FreeBSD にミラーする。

	package = FreeBSD
	 ftp-server = ftp.FreeBSD.ORG
	 remote-directory = /pub/%s
	 local-directory = ~ftp/pub/%s

  master-db-directory: (pathname, default: なし)
	ftpmirror はローカルホスト上のファイルの一覧、および前回の
	ミラーからの差分をデータベースとして管理できる。この機能を
	利用する場合には、master-db-directory を指定して、該当する
	ディレクトリを作成しておく。
	master-db-directory も local-directory 同様、`~'(tilda) に
	よるホームディレクトリの置換と %s によるパッケージ名の置換
	を行う。

	次の例では FreeBSD に関するファイル(~ftp/pub/FreeBSD 以下)
	の一覧が ~ftp/db/FreeBSD/index.n として作成される。ここで、
	最後の `n' は index ファイルの revision を表している。また
	ミラーを繰り返すと ~ftp/db/FreeBSD/step.m として、前回から
	変更されたファイルの一覧も保存される。`m' は、同じく step
	ファイルの revision を表している。なお、step.m は index.m
	から index.m+1 を生成するための差分ファイルである。

	package = FreeBSD
	 ftp-server = ftp.FreeBSD.ORG
	 remote-directory = /pub/%s
	 local-directory = ~ftp/pub/%s
	 master-db-directory = ~ftp/db/%s

	なお、実際にミラーを行わない場合でも master-db-directory
	を用いたディレクトリツリーの管理が可能で、次のように指定し

	package = original-tools
	 local-directory = ~ftp/pub/%s
	 master-db-directory = ~ftp/db/%s

	さらに、定期的に ftpmirror をデータベースの更新のためだけ
	に起動することで、master-db-directory だけの更新ができる。
	この場合には次のように update-master モードで起動する。

	% ftpmirror --todo=update-master original-tools

	master-db-directory を持つ FTP サーバからミラーを行う場合、
	次に記述する remote-db-directory と local-db-directory を
	もちいて「slave モード」でのミラーが可能になる。

  remote-db-directory: (pathname, default: なし)
  local-db-directory: (pathname, default: なし)
	リモートサーバが master-db-directory の機能を用いてミラー
	(もしくはディレクトリ管理)を行っている場合、データベースを
	用いて効率的なミラーが可能になる。ここでは、これを slave
	mode mirror と呼ぶ。この機能は remote-db-directory および、
	local-db-directory を指定し、local-db-directory に該当する
	ディレクトリを作成しておくことで利用可能になる。なお、
	remote-db-directory は、サーバ上の master-db-directory に
	あたるディレクトリ名を指定する。

	これらのパラメータも local-directory 同様 %s の置換を行う。
	また local-db-directory は `~'(tilda) によるディレクトリ名
	置換も行われる。

	ftpmirror は remote-db-directory, local-db-directory が指定
	されている場合、まずサーバ上の master-db-directory の中身の
	同期を行い、その後、取得したデータベースの情報を用いてミラー
	を開始する。この場合、すべてのファイルの情報はデータベースに
	含まれているので、LIST や STAT によるファイルの情報の取得は
	一切発生しない。

	また、データベース同期は、step ファイルから index ファイルを
	生成することを試みるため、初期データベース転送時、障害時以外
	実際にネットワーク上で転送されるのは step ファイルだけである。
	(FreeBSD の full distribution で index ファイルが 10Mbytes、
	 毎日の step ファイルが数十〜数百Kbytes であることを考えると、
	 これは非常にネットワークの使用効率が良いはずである。)

	例えば、前述の master-db-directory でデータベースを管理して
	いるサーバから `slave mode mirror' を行う場合には次のように
	指定を行う。

	package = FreeBSD
 	 ftp-server = ftp.master.server.host
	 remote-directory = /pub/%s
	 local-directory = ~ftp/pub/%s
	 remote-db-directory = /db/%s
	 local-db-directory = ~ftp/db/%s

	さらに step ファイルを用いた差分だけのミラーも可能で、上記
	の例とまったく同様の設定で、ftpmirror の起動時に

	 % ftpmirror --todo=step-mirror FreeBSD

	として起動すると、step ファイルにある情報だけをもとに差分
	ミラーを行うことができる。

	具体的な統計はまだだが、おそらく step mirror を daily に、
	full mirror を weekly 程度に行う、などのようにすると非常に
	効率的なミラーができるものと思われる。

  lslR-file: (string, default: なし)
	FTP サーバ上に ls-lR.Z などのファイルが準備されている場合に、
	STAT/LIST によるディレクトリスキャンの替わりに、このファイル
	を用いてディレクトリエントリを調べる。gz や Z で終る場合には
	自動的に gunzip/uncompress する。例えば ftp.freebsd.org の
	/pub/FreeBSD 以下を ls-lR.gz を用いてミラーしたい場合には、
	次のように指定する。

	ftp-server = ftp.freebsd.org
	 remote-directory = /pub/FreeBSD
	 local-directory = ~ftp/pub/FreeBSD
	 lslR-file = ls-lR.gz

	なお、lslR-file が相対パス(`/' から始まらない文字列)の場合、
	remote-directory 以下の相対パスとして扱われる。

  lslR-copy: (pathname, default: なし)
	lslR-file をローカルホスト上にコピーして保存しておきたい場合
	に指定する。相対パス(`/' からはじまらない文字列)が指定された
	場合には、local-directory からの相対パスとして扱われる。この
	指定を行った場合には、lslR-file を転送した場合、そのコピーが
	lslR-copy に保存され、次回からサイズ、最終更新時間をチェック
	して変更がなければ lslR-file の転送を抑制することができる。
	また lslR-copy が相対パスの場合には override-file に自動的に
	フィルタが設定される。ただし lslR-copy が絶対パスの場合には、
	このフィルタは設定されないので、local-directory 以下にコピー
	を置く場合に絶対パスで書いてしまうと、ミラー中に削除 or 変更
	されてしまう可能性があるので注意が必要である。

	また、lslR-file が指定されていない場合でも、lslR-copy が指定
	されていれば ls-lR ファイルを用いたミラーが可能である。これは
	動作確認や ls-lR ファイルを手動でコピーした場合などに利用する
	と便利である。

  transfer-file-regexp: (regexp, default: 全てにマッチ)
	GET するファイル名にマッチする正規表現。サーバ上のファイルは
	`./' からはじまる remote-directory からの相対パスで表される。
	例えば remote-directory = /pub/FreeBSD の場合、サーバ上の
	/pub/FreeBSD/2.1.0-RELEASE/README.TXT というファイルは
	./2.1.0-RELEASE/README.TXT になる。

	以下、regexp の指定の例をあげる。例えば、次の指定は '~' で
	終るファイルと `.in', `.nfs' ではじまるファイルは GET しない。
	(注意: `=' はパラメータへの代入を、`+=' は追加を表す)

	regexp += !/~$/
	regexp += !/\/\.in/
	regexp += !/\/\.nfs/

	また、次の指定では bash-* と gcc-* にあたるファイルを転送する。
	(最終行はデフォルトで GET しないことを指定している)

	regexp += /\/bash-/
	regexp += /\/gcc-/
	regexp += !

  transfer-directory-regexp: (regexp, default: 全てにマッチ)
	サーバ上のディレクトリで、サーチしたい *ディレクトリ* を表す
	正規表現。通常ファイルに対しては意味を持たない。FTP サーバ上の
	すべてのディレクトリは '/' が付加された状態で比較される。例えば
	次の例では "lost+found" ディレクトリと '~' で終るディレクトリの
	スキャンはしない。

	transfer-directory-regexp += !/\/lost+found\/$/
	transfer-directory-regexp += !/~\/$/

  override-file-regexp: (regexp, default: 全てにマッチ)
	ファイルを GET する際、自分のホスト上で上書きしてよいファイル
	を表す正規表現。実際に転送されるファイルは transfer-file-regexp
	にマッチし、かつ override-file-regexp にマッチするものになる。
	override-file-regexp は変更される可能性のあるファイル名を表現
	しているので、これにマッチしないファイルは「消されない」ことを
	意味する。

	例えば、以下の例では、bash-* にあたるファイルの転送は行うが、
	これにあたらないファイルは一切変更されない

	override-file-regexp += /\/bash-/
	override-file-regexp += !

  override-directory-regexp: (regexp, default: 全てにマッチ)
	ローカル側で、ミラーのためにサーチしたい *ディレクトリ* を表す
	正規表現。通常ファイルに対しては意味を持たない。記述方法は上記
	transfer-directory-regexp と同様。
	これを利用すると特定のディレクトリ以下に、別パッケージをミラー
	することも可能である。
	次の例は FreeBSD のパッケージの中に、FreeBSD-nonUS パッケージを
	含むようなディレクトリ構成を作る。

	package = FreeBSD
	  ftp-server = ftp.tokyonet.ad.jp
	  remote-directory = /pub/FreeBSD
	  local-directory = ~ftp/pub/FreeBSD
	  override-directory-regexp += !/\.\/FreeBSD-nonUS\//

	package = FreeBSD-nonUS
	  ftp-server = ftp.waseda.ac.jp
	  remote-directory = /pub/FreeBSD-nonUS
	  local-directory = ~ftp/pub/FreeBSD/FreeBSD-nonUS

  load-local-dirinfo: (boolean, default: no)
	ローカル側の各ディレクトリにディレクトリ情報がある場合それを
	利用するなら 1 を指定する。ディレクトリ情報は後述。

  store-local-dirinfo: (boolean, default: no)
	ローカル側の各ディレクトリにディレクトリ情報を作成するかどうか
	を指定する。1 の場合には、``.dirinfo'' と名前のファイルが各
	ディレクトリに作成される。ディレクトリ情報は後述。

  load-remote-dirinfo: (boolean, default: no)
	サーバ側で作成されたディレクトリ情報を利用する場合に 1 を指定
	する。1 の場合、サーバ側のディレクトリに ``.dirinfo'' という
	名前のファイルがあれば、STAT/LIST を使わずに、このファイルから
	取得される情報からミラーを開始する。ディレクトリ情報は後述。

  override-file-uid: (uid, default: 0)
	ミラーの対象になっているローカルファイルやディレクトリのオーナ
	を指定する。転送を行う / 行わないによらず override-*-regexp に
	マッチするすべてのファイル、ディレクトリのオーナを変更する。
	root 以外のユーザによって実行された場合には意味を持たない。

  override-file-gid: (uid, default: 0)
	ミラー対象になっているローカルファイルやディレクトリのグループ
	を指定する。転送を行う / 行わないによらず override-*-regexp に
	マッチするすべてのファイル、ディレクトリのグループを変更する。
	root 以外のユーザによって実行された場合には意味を持たない。
	なお、上記の override-file-uid または override-file-gid のいず
	れかが指定されていれば、ローカルファイルに対して chown が実行
	される。

  override-file-mode: (octal value, default: 0644)
	ミラーの対象になっているローカルファイルのモードを指定する。
	転送を行う / 行わないによらず override-*-regexp にマッチする
	すべてのファイルのモードを変更する。ただし 0777 でマスクされ
	るため、setuid/setgid は設定できない。

  override-directory-mode: (octal value, default: 0755)
	ミラー対象になっているローカルディレクトリのモードを指定する。
	転送を行う / 行わないによらず override-*-regexp にマッチする
	すべてのディレクトリのモードを変更する。

  default-file-uid: (uid, default: 0)
	転送を行ったファイルのデフォルトのオーナを指定する。ftpmirror
	は override-file-uid / サーバ上のオーナ / default-file-uid の
	順に調べてファイルのオーナを決定する。

  default-file-gid: (gid, default: 0)
	転送を行ったファイルのデフォルトグループを指定する。ftpmirror
	は override-file-gid / サーバ上のグループ / default-file-uid
	の順に調べてファイルのグループを決定する。

  default-file-mode: (octal value, default: 0644)
	転送を行ったファイルのデフォルトのモードを指定する。ftpmirror
	は override-file-mode / サーバ上のモード / defalt-file-mode の
	順に調べてファイルのモードを決定する。ただし、0777 で mask を
	かけるため setuid/setgid は落とされる。

  default-directory-mode: (octal value, default: 0755)
	更新されたディレクトリのデフォルトのモードを指定する。ftpmirror
	は override-directory-mode / サーバ上のモード / defalt-file-mode
	の順に調べてディレクトリのモードを決定する。


<< ftpmirror の実行 >>

 前述の設定を終えたのち、ftpmirror を実行する場合には、次のように
 パッケージ名を引数に渡します。

	% ftpmirror FreeBSD

 ftpmirror は定義ファイル(デフォルト: /usr/local/etc/ftpmirror.cf)
 を読み込み、該当するパッケージのミラーを開始します。

 また、パッケージは複数していすることも可能です。例えば次の例では
 FreeBSD, GNU, net/apache を順にミラーすることになります。

	% ftpmirror FreeBSD GNU net/apache


<< ftpmirror に関するメーリングリスト >>

 ftpmirror に関して、気楽に質問や提案ができるようメーリングリストを
 準備しました。アドレスは ftpmirror@ftp.intec.co.jp です。majordomo
 によって管理されていますので、本文に subscribe ftpmirror と書いた
 メールを majordomo@ftp.intec.co.jp まで送ってください。

 (例)
      % echo subscribe ftpmirror | mail majordomo@ftp.intec.co.jp


<< 謝辞 >>

 本ソフトウェアはたくさんの方のバグレポートと提案、協力のもとでここ
 まで育ってきました :-) 特に RingProject では ftpmirror の苛酷な耐久
 試験(?)とともに、畑山さんの patch をはじめ、やさまざまな改良をして
 いただきました。

 また ftpmirror メーリングリストでも、多くの方からバグフィックスや、
 提案などをいただきました。

 ftpmirror の開発に御協力くださった皆様に、改めて感謝の意を表します。


<< その他 >>

 Copyright については COPYRIGHT というファイルに記述されていますので、
 そちらを参照して下さい。

 コメント、バグフィックス、提案などは ikuo@jp.freebsd.org まで。

Dec 27, 1999 by Ikuo Nakagawa <ikuo@jp.freebsd.org>
