「Unison」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「[[zh-CN:」を「[[zh-hans:」に置換)
(→‎参照: 同期)
 
(4人の利用者による、間の8版が非表示)
1行目: 1行目:
[[Category:インターネットアプリケーション]]
+
[[Category:同期]]
 
[[de:Unison]]
 
[[de:Unison]]
 
[[en:Unison]]
 
[[en:Unison]]
 
[[zh-hans:Unison]]
 
[[zh-hans:Unison]]
'''Unison''' は Unix ライクなオペレーティングシステム (Linux, Mac OS X, Solaris) や Windows で動作する双方向性のファイル同期ツールです。ファイルやディレクトリの複製を別々のホスト (あるいは同一ホスト上の別々のディスク) に保存して、それぞれ別個に変更を加えて、後から複製の変更を相互に持ち寄って最新状態にすることができます。どんなシステムでもホストにすることが可能です。
+
'''Unison''' は Unix ライクなオペレーティングシステム (Linux, macOS, Solaris) や Windows で動作する双方向性のファイル同期ツールです。ファイルやディレクトリの複製を別々のホスト (あるいは同一ホスト上の別々のディスク) に保存して、それぞれ別個に変更を加えて、後から複製の変更を相互に持ち寄って最新状態にすることができます。どんなシステムでもホストにすることが可能です。
   
 
== インストール ==
 
== インストール ==
   
[[公式リポジトリ]]から {{Pkg|unison}} を[[インストール]]してください。CLI, GTK+, GTK+ 2.0 のインターフェイスが入っています。
+
{{Pkg|unison}} パッケージを[[インストール]]してください。CLI, GTK のインターフェイスが入っています。
   
 
== 設定 ==
 
== 設定 ==
15行目: 15行目:
 
=== GUI ===
 
=== GUI ===
   
GUI Unison を設定するにはを実行:
+
GUI を使用して Unison を設定するには、{{ic|unison-gui}} を実行します。
$ unison-gtk2
 
   
 
=== 手動 ===
 
=== 手動 ===
26行目: 25行目:
   
 
ファイルを同期する先のリモートディレクトリを定義:
 
ファイルを同期する先のリモートディレクトリを定義:
root=ssh://example.com//path/to/server/storags
+
root=<nowiki>ssh://example.com//path/to/server/storage</nowiki>
   
 
任意で、[[SSH]] にわたす引数を指定:
 
任意で、[[SSH]] にわたす引数を指定:
45行目: 44行目:
 
ignore=Name *.tmp
 
ignore=Name *.tmp
   
{{note|プロファイルの詳細は [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html User Manual and Reference Guide] にある [http://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#profileegs サンプルプロファイル] を参照してください。}}
+
{{note|プロファイルの詳細は [https://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html User Manual and Reference Guide] にある [https://www.cis.upenn.edu/~bcpierce/unison/download/releases/stable/unison-manual.html#profileegs サンプルプロファイル] を参照してください。}}
   
 
== 使用方法 ==
 
== 使用方法 ==
57行目: 56行目:
 
== バージョンの不適合 ==
 
== バージョンの不適合 ==
   
Unison 正しく機能させるには全てのクライアントに同じバージョンをインストールする必要があります。あるコンピュータにインストールされているバージョン 2.40 で、一方、他マシンではバージョン 2.32 だったりすると、相互に同期することができなくなります。バージョンが一致し2つのマシンけでなく、全てのコンピュータでディレクトリを同期することが不可能になります
+
Unison 正しく機能しない場合、クライアントにインストールされている Unison のバージョンおよびコンパイルに使用した [https://ocaml.org/ OCaml] のバージョンが一致しるか確認してくさい
   
  +
Arch と他のディストリビューション間で同期を行う場合、大抵は OCaml と Unison をどちらかで手動でコンパイルする必要があります。
また、Unison バイナリをコンパイルする OCaml のバージョンも合わせる必要があります。https://groups.yahoo.com/neo/groups/unison-users/conversations/topics/11439 を参照。バージョンが異なるとヘテロジニアスなネットワークで Unison が使えなくなってしまいます。
 
   
  +
[[AUR]] にはバージョン 2.32 ({{AUR|unison-232-compat}}) と 2.40 ({{AUR|unison-240-compat}}) の非公式 PKGBUILD が存在します。
多くの Linux ディストリではリリースが途切れ途切れなので、Unison のバージョンが古い可能性があります。一方、Arch Linux は Extra リポジトリで最新のバージョンを提供しています。[[AUR]] には非公式な [[PKGBUILD]] としてバージョン 2.32 ({{AUR|unison-232}}{{Broken package link|{{aur-mirror|unison-232}}}}), 2.27 ({{AUR|unison-227}}{{Broken package link|{{aur-mirror|unison-227}}}}), 2.40 ({{AUR|unison-240-compat}}) が存在し、複数のディストリを使っている場合に Unison を既存の環境と一緒に使うときに有用です。
 
   
  +
== ヒントとテクニック ==
== Tips and tricks ==
 
   
 
=== 人間の時間と手間を省く ===
 
=== 人間の時間と手間を省く ===
107行目: 106行目:
 
=== 一般的な設定の同期 ===
 
=== 一般的な設定の同期 ===
   
システム (サーバー, ワークステーション, ノートパソコン, スマートフォンなど) 上の設定ファイルを同期する場合、基本的な部分 (キーバインドやシェルのエイリアスなど) だけを別の設定ファイル (例: {{ic|.bashrc_common}}) に分割して、変更がある部分 (アプリケーション特有の設定やセキュリティに関する設定など) だけを同期すると良いでしょう。
+
システム (サーバーワークステーションノートパソコンスマートフォンなど) 上の設定ファイルを同期する場合、基本的な部分 (キーバインドやシェルのエイリアスなど) だけを別の設定ファイル (例: {{ic|.bashrc_common}}) に分割して、変更がある部分 (アプリケーション特有の設定やセキュリティに関する設定など) だけを同期すると良いでしょう。
  +
  +
{{Warning|設定ファイルの双方向同期は、ピア同期システムが設定ファイル (おそらくシステムが同期する他のピア) に対する悪意のある変更を受信できるようにすることで、攻撃の手段となる可能性があります。これは、特に2つのシステムの概念的なセキュリティレベルが異なる場合 (パブリックシェルサーバーとパーソナルワークステーションなど)、セキュリティの低いシステムを侵害する方が簡単である可能性が高いため、攻撃者にとって魅力的なオプションです。2つの特定のシステム間の双方向同期が不要な場合は、常に {{ic|noupdate}} オプションを使用してください。必要に応じて、同期時に各変更を確認します。自動双方向同期は細心の注意を払って実行する必要があります。}}
  +
  +
=== 別のデータディレクトリの使用 ===
  +
  +
デフォルトの unison データディレクトリは {{ic|~/.unison}} です。このディレクトリにはプロファイルだけでなく、ログや生データも含まれます。これを変更したい場合は、[[環境変数]] (シェル設定内、または {{ic|unison}} コマンドを使用する前に) を設定して下さい:
  +
export UNISON="''my-unison-data-folder''"
   
  +
{{Note|
{{Warning|Bidirectional syncing of config files can lend itself to become an avenue for an attack, by enabling the peer syncing system to receive malicious changes to config files (and perhaps even other peers the system syncs with). This is an attractive option for adversaries, especially when the conceptual security levels of the two systems differ (e.g., public shell server vs. personal workstation), since it would likely be simpler to compromise a system of lower security. Always use the {{ic|noupdate}} option when bidirectional syncing between two particular systems is deemed unnecessary; when necessary, verify each change when syncing. Automatic bidirectional syncs should be done with extreme caution.}}
 
  +
* Unison はまだ XDG に準拠していません。詳細については、次の問題を参照してください: [https://github.com/bcpierce00/unison/issues/270 issue 270] および [https://github.com/bcpierce00/unison/issues/ issue 552]
  +
* 1 台のマシンで {{ic|UNISON}} 変数を設定しても、リモートマシンの {{ic|~/.unison}} ディレクトリが使用されます。
  +
}}
   
 
== 参照 ==
 
== 参照 ==
   
* [[Wikipedia:Unison (file synchronizer)]]
+
* [[Wikipedia:ja:Unison]]
* [http://www.cis.upenn.edu/~bcpierce/unison/ 公式ウェブサイト]
+
* [https://github.com/bcpierce00/unison 公式ウェブサイト]
* [http://tech.groups.yahoo.com/group/unison-users Yahoo! ユーザーープ]
+
* [https://github.com/bcpierce00/unison/tree/documentation ユーザーマニュアとリファレンスガイド]
  +
* [https://twiki.org/cgi-bin/view/Codev/ReplicationUsingUnison Replication using Unison] on TWiki
* ''[http://www.pgbovine.net/unison_guide.htm Liberation through data replication]'' by Philip Guo
 
* ''[http://www.pgbovine.net/unison-for-your-mom.htm Setting up Unison for your mom]'' by Philip Guo
 
* ''[http://twiki.org/cgi-bin/view/Codev/ReplicationUsingUnison Replication using Unison]'' on TWiki
 

2024年3月18日 (月) 13:34時点における最新版

Unison は Unix ライクなオペレーティングシステム (Linux, macOS, Solaris) や Windows で動作する双方向性のファイル同期ツールです。ファイルやディレクトリの複製を別々のホスト (あるいは同一ホスト上の別々のディスク) に保存して、それぞれ別個に変更を加えて、後から複製の変更を相互に持ち寄って最新状態にすることができます。どんなシステムでもホストにすることが可能です。

インストール

unison パッケージをインストールしてください。CLI, GTK のインターフェイスが入っています。

設定

Unison を使用するには、プロファイルを作成する必要があります。

GUI

GUI を使用して Unison を設定するには、unison-gui を実行します。

手動

もしくは、~/.unison にプロファイルを手動で作成して、以下の行をデフォルトの設定ファイルである ~/.unison/profilename.prf に追加してください。

同期するルートディレクトリを定義:

root=/home/user/

ファイルを同期する先のリモートディレクトリを定義:

root=ssh://example.com//path/to/server/storage

任意で、SSH にわたす引数を指定:

sshargs=-p 4000

同期するディレクトリとファイルを定義:

# dirs
path=Documents
path=Photos
path=Study
# files
path=.bashrc
path=.vimrc

無視するファイルも定義できます:

ignore=Name temp.*
ignore=Name .*~
ignore=Name *.tmp
ノート: プロファイルの詳細は User Manual and Reference Guide にある サンプルプロファイル を参照してください。

使用方法

プロファイルを設定したら、次のコマンドで同期を開始できます:

$ unison profilename

もしくは GUI ツールを使用してプロファイルを選択してください:

$ unison-gtk2

Unison のインターフェイスでは進捗や変化を見ることができます。

バージョンの不適合

Unison が正しく機能しない場合、クライアントにインストールされている Unison のバージョンおよびコンパイルに使用した OCaml のバージョンが一致しているか確認してください。

Arch と他のディストリビューション間で同期を行う場合、大抵は OCaml と Unison をどちらかで手動でコンパイルする必要があります。

AUR にはバージョン 2.32 (unison-232-compatAUR) と 2.40 (unison-240-compatAUR) の非公式 PKGBUILD が存在します。

ヒントとテクニック

人間の時間と手間を省く

十分なスクロールバッファが確保できるターミナルエミュレータで unison を動作させる場合、変更箇所が衝突するたびに確認を要求するのは何の意味もありません。auto オプションを true に設定することで確認を表示しないようにできます。

diff の出力を読みやすくする

unison のデフォルトの diff コマンドは diff -u CURRENT2 CURRENT1 です。このコマンドの出力を確認するとき、左から右に変更があったり ('>')、逆に右から左に変更があると ('<')、どこが変更されるのか分かりにくいのが難点です。以下の設定を使うことでそれが分かりやすくなります: '>' が適用される行には全て '>' が付くようになります:

diff = diff -u CURRENT2 CURRENT1 | perl -pe 's/^\+/>/; s/^\-/</'

Emacs でマージ

Unison には外部のマージプログラムを使って衝突する2つのファイルのマージを手助けする機能が存在しますが、デフォルトではプログラムが設定されていません。マニュアルには以下のように設定することが提案されています:

merge = Name *.txt -> emacs -q --eval '(ediff-merge-files-with-ancestor "CURRENT1" "CURRENT2" "CURRENTARCH" nil "NEW")'

マージコマンドはターミナルから実行することができないため、上記を使うには X で Unison を実行する必要があります (Emacs: "standard input is not a tty")。また、Unison は CURRENT1 などの変数をシングルクォートで囲まれたファイル名に置き換えます。そのため、"(ediff-merge-files... \"CURRENT1\" ...)" のようにダブルクォートを使用すると上手くいきません。

CURRENTARCH 変数は共通祖先による 3-way マージを使用することを Unison に指定します。最後の同期で "backupcurrent" が設定されていた場合にのみ 3-way マージになります。通常の 2-way マージをターミナルで実行したい場合、以下の設定を使ってください。ediff.el ではなく emerge.el を使っています:

merge = Name {*,.*} -> urxvt -e emacs -nw -q --eval '(emerge-files nil "CURRENT1" "CURRENT2" "NEW")'

CURRENTARCH の代わりに CURRENTARCHOPT 変数が使われた場合、Unison は可能なときに共通祖先を使って、そうでない場合は (変数に空の文字列を設定して) 2-way マージにフォールバックします。シェルスクリプトで検知することが可能です。例:

merge = Name {*,.*} -> unison-merge-files CURRENT1 CURRENT2 NEW CURRENTARCHOPT

unison-merge-files を上記のように定義した場合:

#!/bin/sh
CURRENT1=$1
CURRENT2=$2
NEW=$3
CURRENTARCHOPT=$4
EMACS="urxvt -e emacs -nw"
if [ x$CURRENTARCHOPT = x ]; then
    $EMACS --eval "(emerge-files nil \"$CURRENT1\" \"$CURRENT2\" \"$NEW\")";
else
    $EMACS --eval "(emerge-files-with-ancestor nil \"$CURRENT1\" \"$CURRENT2\" \"$CURRENTARCHOPT\" \"$NEW\")";
fi

一般的な設定の同期

システム (サーバー、ワークステーション、ノートパソコン、スマートフォンなど) 上の設定ファイルを同期する場合、基本的な部分 (キーバインドやシェルのエイリアスなど) だけを別の設定ファイル (例: .bashrc_common) に分割して、変更がある部分 (アプリケーション特有の設定やセキュリティに関する設定など) だけを同期すると良いでしょう。

警告: 設定ファイルの双方向同期は、ピア同期システムが設定ファイル (おそらくシステムが同期する他のピア) に対する悪意のある変更を受信できるようにすることで、攻撃の手段となる可能性があります。これは、特に2つのシステムの概念的なセキュリティレベルが異なる場合 (パブリックシェルサーバーとパーソナルワークステーションなど)、セキュリティの低いシステムを侵害する方が簡単である可能性が高いため、攻撃者にとって魅力的なオプションです。2つの特定のシステム間の双方向同期が不要な場合は、常に noupdate オプションを使用してください。必要に応じて、同期時に各変更を確認します。自動双方向同期は細心の注意を払って実行する必要があります。

別のデータディレクトリの使用

デフォルトの unison データディレクトリは ~/.unison です。このディレクトリにはプロファイルだけでなく、ログや生データも含まれます。これを変更したい場合は、環境変数 (シェル設定内、または unison コマンドを使用する前に) を設定して下さい:

export UNISON="my-unison-data-folder"
ノート:
  • Unison はまだ XDG に準拠していません。詳細については、次の問題を参照してください: issue 270 および issue 552
  • 1 台のマシンで UNISON 変数を設定しても、リモートマシンの ~/.unison ディレクトリが使用されます。

参照