Unison ユーザのためのTSUBAME 2.0との同期


TSUBAME 1 のときは、Unison を使っていて、特に問題なくファイルの同期ができていたのですが、TSUBAME 2.0 になってから、おかしくなってしまいました。

一応、同期はできて、正常に動作はするのですが、unison を実行するたびに、「あなたは始めて TSUBAME と同期します。大丈夫ですか?」と尋ねられます。そして、私の Mac と TSUBAME 双方に、Unison のアーカイブファイルが無駄に溜っていきます。

原因は、TSUBAME のインタラクティブノードの IP アドレスが毎回変化していること、そして Unison がコンピュータの同一性を IP アドレスで判断していることです。

このような現象は、手元の PC が DHCP ノードで、ときどき割り当てられる IP アドレスが変化する場合に生じます。頻繁に問題になるので、Unison も対応していて、UNISONLOCALHOSTNAME という環境変数を設定すれば対応できます。ただし、今回はサーバ側の IP アドレスが変化するということで、私としては初めての体験でした。

ずばり解決策を書くと、みなさんが Unison を使って TSUBAME と同期するための設定に以下の一行を追加するだけです。

servercmd = /home0/usr8/wakita-k-aa/bin/unison_tsubame.sh

もう少し詳しい話に興味がある人は、この続きを読んで下さい。

まず、TSUBAME に以下のようなラッパースクリプト($HOME/bin/unison_tsubame.sh)を作成しました。

#!/bin/sh
export UNISONLOCALHOSTNAME=tsubame
exec /home/usr8/wakita-k-aa/bin/unison $*

単に、前述の環境変数を設定してから、unison を起動するスクリプトです。

もし、みなさんが私を信用して下さるのであれば、手元のパソコンの Unison の profile に以下の一行を追加するだけで同期の問題が解消します。

servercmd = /home0/usr8/wakita-k-aa/bin/unison_tsubame.sh

これは、さきほど作成したラッパースクリプトを unison コマンドだと思って起動するための設定です。この設定は、デフォルトの unison と手元の unison のバージョンが異なる場合などに使っていたのですが、今回は別の目的で使用しました。

もし、私が信頼に足らない、自分の使っている unison と脇田が使っている unison のバージョンが異なっている、などの理由で、上の設定に不安がある場合には、ラッパースクリプトをコピーして適宜、対応して下さい。

以上で、TSUBAME インタラクティブノードの動的 IP アドレスに伴なう混乱を避けることができます。

ご参考までに、私が TSUBAME がマウントしている CIFS ボリュームとの間でファイルの同期に使っている設定ファイルをご覧下さい。

logfile = /Users/wakita/.unison/edu.log

servercmd = /home0/usr8/wakita-k-aa/bin/unison_tsubame.sh

include common
include mac-common

root = file://Users/wakita/doc/classes/2011
root = ssh://tsubame//nest2/usr8/wakita-k-aa/public_html/classes/2011

path = cl
path = brain

ignore = Name old
ignore = Name others
ignore = Name export.sh
ignore = Name Thumbs.db

perms = 0

common と mac-common は同期したくないバックアップファイルやオブジェクトファイルを ignore する共通設定が書かれたファイルです。