Subversion(svnserve)が異常に遅い問題の解決(ident)
自宅のLinuxPC上に稼動しているSubversionサーバ(svnserve)が異常に応答が遅い問題がありましたが、そう毎日使うものでもないので放置していました。
今日、TortoiseSVNのバージョンアップ(Ver 1.4.8)とEclipseにSubclipseを組み込んで使い勝手を調べたので気になり、WiresharkでクライアントPCとLinuxPCとのパケットをモニターしたところ、Subversionのアクセスをする度にsvnserve側のLinuxPCからなぜかクライアント側のPCにTCPのコネクション要求パケット[SYN]が発生しています。これが、3回リトライしてACKがない時点でsvnserve側からsvnの応答が帰ってきているように見えます。
リトライはTCPの教科書的に、3秒後、6秒後、12秒後と徐々に時間を空けてくるので合計21秒は無駄な待ちが発生していました。
さて、このidentによるTCPコネクションの発生ですが、xinet経由でsvnserveを起動する設定をしていますが、その設定ファイルの記述で
service svn { disable = no socket_type = stream protocol = tcp wait = no user = svn server = /usr/bin/svnserve server_args = -i -r /home/svn/repos log_on_success += DURATION HOST USERID log_on_failure += HOST USERID }
と記述しています。ここでUSERIDという指定があると、identプロトコルによる問い合わせをリモートにするとのことです。この記述をした当初はxinetdを良く知らなかったので、どこかで見つけた設定をぱくってきて動いたからいいやとしたためですね。USERIDの記述をlog_on_success、log_on_failureから外してxinetdを再起動したところ、異常に遅い問題は解消しました。
Eclipseの更新サイトを閉じたLANで使用するには
不幸にも外界から遮断されたネットワーク環境でのソフトウェア開発を余儀なくされるという、開発効率よりも情報保護が優先されるのが昨今の日本の状況です。一方開発ツールはオンライン前提だったりします。Eclipseを閉じたLANで使用し、かつ定期的に更新を反映したり新しいプラグインを利用できるようにしたいと思い、すこし調査をしてみました。
(こうした調査は閉じたLANではできないので、自宅作業になります)
更新サイトの丸ごとダウンロード
Eclipseの場合、更新サイトのURL以下のファイル群をそのまま手元にコピーすれば、更新の設定でローカルのファイルシステムや別URLを指定して更新することができます。
そこで、rsyncを使ってごそっと取ってきたいわけですが、本家URL(eclipse.org)はrsyncが制限されていましたので、ミラーサイトから取ってきます。
Eclipse 3.3 (Europa)の場合、標準で設定されている更新サイトは以下の2つです。
このミラーサイトを近隣に探します。日本のサイトでは、以下が出てきました。
rsyncのコマンドは、以下のミラーサイト用スクリプトを参考にします。
http://www.eclipse.org/downloads/eclipse.org-rsync.sh.txt
RSYNC_HOSTを上記ミラーサイトに設定し、RSYNCH_PATHにはミラーサイト上で更新用のディレクトリを探してそれを設定します。
ダウンロードすると、hoge.jarとhoge.jar.pack.gzと同じファイルが2種類のアーカイブで落ちてきました。その分サイズが大きくなってしまうので、ここはhoge.jarだけでよいように、rsyncのオプションでpack.gzを除外した方がよさそうです。その際は、site.xmlのなかのpack200="true"の記述はたぶんpack200="false"のように修正した方がよいかもしれません(未確認)。
Subclipseのプラグインを閉じたLANで・・・
Subclipseは、更新サイトのディレクトリ一式をまとめたファイルを提供しているので、これをローカルファイルシステムや閉じたLAN上のWebサーバに置きます。
http://subclipse.tigris.org/servlets/ProjectDocumentList
Subclipseを使うときは、SubversionはApache 2.0用の方をインストールすべし
Windows上にて
Subclipseを入れていざインポートしようとしたらEclipse(Europa)が落ちてしまいました。
JavaVMが吐くエラー情報によれば、libapriconv-1.dll, libapr-1.dllあたりがスタック情報に載っていました。
とりあえずSubversion 1.4.6 for Apr2.2をアンインストールして、Apr2.0をインストールしたら問題解消。
CD-RやDVDには焼けない・・・
CD-RかDVD-Rに更新ファイル群を置けば、気軽に閉じたLANで更新ができると思ってましたが、いざファイル群を焼こうとしたら、ファイルパスが長すぎてエラーとなってしまいました。
確かにEclipseのファイルは長い・・・