2005年05月06日

CygwinのUnison

どうにもいつからかWindowsマシン間で行っていたUnisonが正常に動作しなくなっていました。

同期にはcygwinのsshd経由でやっていたんですが、現在実行すると以下のようなエラーがでます。

Reconciling changes
Uncaught exception File "/tmp/unison-2.12.13/src/remote.ml", line 530, characters 2-8: Assertion failed
で、最初は2.9.xだったのでバージョンが古いのが原因とか思ってCygwinのsetupから落とせる2.10.2に上げてみたんですが、これも効果無し。

で、しょうがないかocamlをcygwinでコンパイルして、ベータ版の2.12.0に上げてみましたが一緒。

さらに、現状最新版の2.12.13にしてみましたがこれでもダメ。

で、どうもソースで上記の行の辺りを見てみると通信関連のエラーのようなので、Unison間で通信することをあきらめてファイル共有を使って同期をすることとしました。

まず、共有の権限で自分のユーザのみをアクセス許可にして、その後同期する場所の共有名の最後に「$」をつけることで隠し共有にしておきます。

あとは、以下のようなのを書いたシェルを用意して

unison /cygdrive/c/hoge/ //マシン名/hoge$ -batch -prefer newer
タスクマネージャーで
C:\CYGWIN\bin\bash.exe --login -i C:\CYGWIN\home\name\shell.sh
てな感じでアイドル時間90分で起動するような設定にしました。

これで、元通りマシン使ってないときにひっそりとミラーリングが行われるようになりました。

ただ、全部の負荷を片方のマシンが追うのと、詳細チェックの際はネットが一番のボトルネックになります。
(なのでsshで動くんならそれでやるのが一番ですね。)

まぁ、あくまで非常措置と言うことで( ̄▽ ̄)ノ

Posted by Takuchan at 2005年05月06日 02:25 | トラックバック(0)