WindowsとLinuxでファイルの共有を行うために Unison File Synchronizerを使っていたのだが、Linux側をDebian GNU/Linux 11へアップグレードしたら、同期に失敗するようになってしまった。原因はこれまで使っていた(Windows側)のが2.48、Debian 11側が2.51になってしまったこと。Unisonはメジャーバージョンが一致していないとうまく動かない。
(2024年11月24日追記) Linux側が2.51、Windows側が2.53でも動作することを確認した。
以下、設定メモ。
環境
サーバ側環境
Debian GNU/Linux 11.1
% cat /etc/devian_version 11.1
Unison 2.51.3
% unison -version unison version 2.51.3 (ocaml 4.11.1)
Windows側環境
- Windows 10 Home 21H1 19043.1266
- putty 0.76(C:\Program Files (x86)\PuTTyとして設置しているとする)
Windows 10でのUnisonの設置と設定
GitHub bcpierce00/unisonからバイナリーファイルをダウンロードする。
- 上記リポジトリにアクセスする
- 「Releases」をクリックする
- 最新リリース(2021年10月11日現在 2.51.4)のWindows版をダウンロードする。今回は unison-v2.51.4+ocaml-4.11.2+x86_64.windows.zip をダウンロードした。
- 解凍し、フォルダ名を「Unison-v2.51.4」に変更し、C:\Program Files (x86)以下へ移動させる(C:\Program Files (x86)\Unison-v2.51.4)
続いて環境変数を設定する。
- 「スタート」を右クリックし、「システム」をクリック
- 開いたウィンドウの右側にある「システムの詳細設定」をクリック
- 開いたウィンドウの「環境変数」をクリック
以下の環境変数を追加する
- UNISON:設定ファイルの置き場所。今回の例ではC:\MyDocument\.unison
- UNISONHOSTNAME:ホスト名。今回の例ではNex49Desktop (2024年11月24日追記)この環境変数を設定しなくても動くことを確認した。
次にプロファイルを設定する。C:\MyDocument\.unisonに default.prf を作成し、中身を以下のようにする。サーバーのPuTTyでの保存名をhogehoge, サーバのユーザ名をnext49、同期を取りたいディレクトリを~/SyncDir とする。
root=「Windows側の同期をとりたいフォルダ。例えば、C:\MyDocument\SyncDir」 root=ssh://next49@hogehoge/SyncDir sshcmd=C:\\MyDocument\\.unison\\sync.bat servercmd=/usr/bin/unison fastcheck=true addversionno=true
注意点は2.48では大丈夫だったのだけど、2.51ではsshcmdのフォルダ区切り(\)の処理がおかしい(\が無視される。たぶん、エスケープシーケンスの処理がおかしい。)。このため、フォルダ区切りは2重にする必要がある。
sshcmd(SSHを実行する実行ファイル)として、バッチファイルをC:\MyDocument\.unison\sync.batとして設置する。sync.batの中身は以下の通り。PLINKのオプションはこちらのとおり(コマンドラインの接続ツール Plink を使う)。Unisonのオプションはこちらのマニュアルか、unisonのヘルプ(unison -help)を参照のこと。なお、plinkコマンドの前に@を付けないとLinuxとWindowsの改行コードの違いによりエラーとなる(DOSコマンド一覧 @ (アットマーク))。
@plink PuTTy上のサーバ保存名 -l サーバのユーザ名 -ssh unison -server -contactquietly
最後にUnisonのGTK版(C:\Program Files (x86)\Unison-v2.51.4\bin\unison-gtk2.exe)のショートカットを使いやすいところに置く