Federico-Kereki(2007年9月4日(火))シェア私の場合ラップトップを持ち歩いてその上で仕事をするのが通常のスタイルだが、デスクトップPCを使うこともあるので、必要に応じてこれら2つのマシンの間でファイル群の同期をしなければならない。した同期ツールとしては、過去にscpやrsyncなどの単純なコマンド形式ツールから、Krusaderといった異なるマシン間のディレクトリ同期に対応したユーティリティなどを試してみたことがある。最近使い出したのが、本稿で紹介するUnisonというユーティリティだ。Unisonによるファイル同期は、Unix、Linux、Windowsの各マシン間で実行でき、例えばWindowsラップトップとUnixサーバとの間での同期といった作業も、2つのLinuxマシン間の同期と同様に簡単に行える。同期するマシン同士はインターネット経由で接続するが、セキュリティに関してはSSH接続による暗号化が施されるようになっている。GPLライセンス適用下におけるフリーな使用が許可されている。残念ながら現状での開発作業は一時中断されているようであり、メンテナンスやバグフィックスを誰が担当しているかも明示されていない。配布サイトの説明によると、オリジナルの開発者たちはこのプログラムを今でも使用し続けており、今後もメンテナンスとサポートを継続して、バグフィックスや小規模な改修を施したバージョンを(適時)リリースしていくとされている。このサイトで公開されている現行の安定版はバージョン2.13.16であるが、ベータ版はバージョン2.27.29であり(番号的にはかなり開きがある)、開発途上の不安定版はバージョン2.28.15とされている。このユーティリティは公開されてからかなりの年月を経ており、大方のディストリビューションのリポジトリに収録されるようになっている。私が使用しているopenSUSE(10.1および10.2)でも、Unisonは簡単にインストールすることができた。10.2ではそれより新しいバージョン2.17.1がインストールされたのである。10.1マシン側にもrpmseek.comから入手したバージョン2.17.1をインストールしておいた。ダミーファイルを使った各種のテスト同期させる各マシンへのUnisonのインストールが終了したら、ターミナルウィンドウを開いて事前に各種のテストを行っておこう。tutorial」を実行すると、チュートリアルを取得できる。all」というコマンドを実行すればいい。Unisonのプログラム本体はコマンドラインから実行できるが(スクリプトやコンソールウィンドウからの実行に便利)、簡易的なグラフィカルインタフェースを介した操作にも対応している。text」というパラメータを指定すればいい。付属ドキュメントにも書かれているとおり、最も簡単(かつ安全)な同期処理は、同一マシン上に置かれた2つのディレクトリに対して実施することである。私の場合も、最初はoriginalおよびcopyという名前で作成した同一内容のディレクトリを1組用意することから初めてみた。copy」というコマンドを実行したところ、今回が初めての同期作業であること、および、Unisonがこれから実行する作業内容を示す長めのメッセージが表示されたが、その後、このテストで使ったフォルダ間についてはファイル同期をする必要のない旨が報告された。date」というメッセージだけが表示される。次に行ったテストでは、双方のディレクトリに対してファイルの追加、削除、内容の変更などを行ってから同期をさせてみた。この場合は、両ディレクトリの相違点を示す一覧が表示される。file」とマーキングされた上で、他方のディレクトリへのコピーが行われるようになっている。削除したファイルに関しては、他方のディレクトリでも該当するファイルが削除される。双方のディレクトリに存在する同名ファイルで内容の異なるものについては、ユーザが「<」および「>」キーを押して、どちらのファイルが正規バージョンであるかをUnisonに指定する必要があるが、両方のファイルをそのまま残したければ「/」キーを押せばいい。プロンプトに「?」と入力すると、後述する出力例のように、ユーザが選択可能な処理が一覧される。Unisonにおける同一ファイルのバージョン比較アルゴリズムでは、新旧ファイルの内容を実際に比較しているのではなく、ファイルのiノード番号と最終変更時刻を照合しているだけであり、これらの情報に食い違いがなければ変更は加えられていないと判断するようになっている。この方式は“アップデートの誤検出”がされる可能性もあるが、変更されたファイルを見落とすこともないので比較的安全な方式だと言えるだろう。touchコマンドでファイルのタイムスタンプを変更すれば、この比較アルゴリズムの裏をかくこともできてしまう。ファイル群に関する情報の記録先は.unisonディレクトリである。failures)2つのマシン間での同期作業2つの異なるマシンを対象とする場合、Unisonによる同期には複数の方式が存在している。そのうち一番簡単なものは、SSH接続を利用する方式である。-version」といった構文のコマンドを実行してみればいい(IPアドレスについては、Unisonをインストールした相手先のリモートマシンのアドレスに置き換える)。その後、接続先マシンのパスワードを入力して、Unisonのバージョンが表示されれば問題ない。-version」といった構文のコマンドを使用する必要がある。ssh://192.168.0.198//home/fkereki/original」(スラッシュ記号が2つ入る部分「//」に注意)といった構文のコマンドでファイルの同期が行える。ssh://someotheruser@192.168.0.198//home/fkereki/original」などと指定すればいい。ソケット接続を介した同期も簡単に実行できるが、この方式はセキュリティ的には劣っているので、パブリックネットワークでの使用は控えるべきである。この場合は、リモートマシン側のUnisonをサーバモードで実行させるための設定が必要になる。サーバモード下のUnisonは1度に1つのクライアントしか対応できないので、仮に2人のユーザが同時にファイル同期を行う場合は、他方の処理が終わるまで一方は待機しなければならない。その他にもUnisonによる処理はこのプログラムを起動させたユーザのアクセス権限を用いて実行されるので、各自の所有するアクセス権限の異なる複数のユーザが同一サーバに対して同期を行う際には、SSH接続を使用しなければならない。12345」という構文のコマンドを実行して、Unisonを接続待機状態に置いておく。その際に“&”をコマンド末尾に追加しておくと、Unisonはバックグラウンドで実行されるようになる。ここで「-socket」の次に指定した12345は任意指定のポート番号であり、10000から40000の間で適当なものを選択すればたいていは大丈夫なはずだ(一部の番号には使用制限があり、何を使用できるかについては資料を別途参照して頂きたい)。socket://192.168.0.198:12345/home/fkereki/original」といった構文のコマンドを使用すればよく、この指定例の場合は先のSSH接続方式での実行時と同じ結果が得られるはずである。高度な使用法Unisonには様々な処理用のオプションが用意されている。」というコマンドを実行すると、すべての設定を一括で適用させることができる。プロファイルの詳細についてはオンラインドキュメントが用意されているので、そちらを参照して頂きたい。基本的にUnisonで想定されているのは1組のマシン間での同期処理であるので、同期対象とするマシンが3つ以上存在している場合は、運用側の手順でカバーする必要がある。した場合の具体的な処理法としては、1つのマシンを“スター型トポロジ”のセンタ(あるいはハブ)として運用し、これを基準にして残りのマシン群との同期を行わせるという方法が考えられる。後者のマシン間での直接的な同期を必要としない限り、この方式でうまく行くはずだ。まとめUnisonは、簡易的なファイルの同期作業をするための有用なツールとして機能するが、ファイル同期に使用するサーバが複数存在する場合は“同一バージョン間のみ対応”という制限が足かせになるかもしれない。このソフトウェアについては非常に動作が安定している点も高く評価すべきであり、それを裏付けているのが、安定版のリリースが比較的高いバージョン番号で行われていることおよび、開発陣が現在も使用し続けているためアップデートが継続されていることの2点である。私の場合、操作性に優れた実用的ツールとして、今後も日常的にUnisonを使用していくことになるだろう。Kerekiはウルグアイ出身のシステムエンジニアで、20年以上に渡るシステム開発、コンサルティング、大学講師の経験を有している。