Unison 2.51でWindows 10とDebian 11を同期する

WindowsとLinuxでファイルの共有を行うために Unison File Synchronizerを使っていたのだが、Linux側をDebian GNU/Linux 11へアップグレードしたら、同期に失敗するようになってしまった。原因はこれまで使っていた(Windows側)のが2.48、Debian 11側が2.51になってしまったこと。Unisonはメジャーバージョンが一致していないとうまく動かない。

以下、設定メモ。

環境

サーバ側環境
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からバイナリーファイルをダウンロードする。

  1. 上記リポジトリにアクセスする
  2. 「Releases」をクリックする
  3. 最新リリース(2021年10月11日現在 2.51.4)のWindows版をダウンロードする。今回は unison-v2.51.4+ocaml-4.11.2+x86_64.windows.zip をダウンロードした。
  4. 解凍し、フォルダ名を「Unison-v2.51.4」に変更し、C:\Program Files (x86)以下へ移動させる(C:\Program Files (x86)\Unison-v2.51.4)

続いて環境変数を設定する。

  1. 「スタート」を右クリックし、「システム」をクリック
  2. 開いたウィンドウの右側にある「システムの詳細設定」をクリック
  3. 開いたウィンドウの「環境変数」をクリック

以下の環境変数を追加する

  • UNISON:設定ファイルの置き場所。今回の例ではC:\MyDocument\.unison
  • UNISONHOSTNAME:ホスト名。今回の例ではNex49Desktop

次にプロファイルを設定する。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)のショートカットを使いやすいところに置く