
2台のコンピュータがあります。 1つはUbuntu 18.04を実行し、もう1つはUbuntu 20.04を実行します。 Unisonを使用してファイルを同期したいのですが、いくつかの問題があります。まず、他のコンピュータと同期しているので、ソースUnison 2.48.3でコンパイルしました。その後、Ubuntu 18.04では、Ubuntu Software Unison 2.48.4からUbuntu 20.04をインストールしました。正しく設定した後、Ubuntu 18.04のコマンドラインから実行して
unison-2.48.4-gtk
同期しようとしました。すべてがうまくいきますが、つまりシステムとディレクトリが見つかりましたが、次のメッセージが表示されます
Fatal error during unmarshaling (input value:ill-formed message) possibly because client and serer have been compiled with different versions of OCaml compiler
。 20.04でOCamlのバージョンを確認しましたが、明らかに何も返しませんでした(アプリストアからunisonをインストールしたにもかかわらず)。 18.04のバージョンは4.05.0です。私ができることについてのアイデアはありますか?
答え1
複数のコンピュータを異なるオペレーティングシステムと同期させる必要があるときにUnisonおよび/またはOCamlが何かを変更するたびにソースからコンパイルしたくない場合は、きれいな解決策があります。しなければならない常にUnisonをすばやく操作してインストールします。これにより、すべてのLinuxシステム、クライアント、およびサーバーで、まったく同じバージョンのUnison / OCamlを持つことになります。これがスナップショットの目的です。同じスナップショットは、インストールされているオペレーティングシステムに関係なく、まったく同じように見えるはずです。この場合、ソフトウェアセンターでunison-jzを使用できます。 OCaml 4.02.3用にコンパイルされたUnison 2.51.2をインストールします。
Ubuntuのようにsnapdがすでにインストールされている場合は、次のように実行します。
sudo snap install unison-jz
ホームディレクトリ外のコンテンツを同期するには、必要な権限を処理するために開発者モードでunison-jzをインストールする必要があります。この場合、端末で使用する必要がある行は次のとおりです。
sudo snap install --devmode unison-jz
Unisonのスナップショットバージョンが正しく機能するには、2つのことをさらに実行する必要があります。人々は:
ファイルの同期に使用する Unison 構成ファイルを生成したら、テキストエディタを使用して次の行を追加します。
servercmd = /snap/bin/unison-jz.unison -ui text
~/snap/unison-jz/current/.unison/にある設定ファイルに
すべての設定ファイルは.prf拡張子を使用します。
このようにして、クライアントシステムのunisonは、同じUnison / OCamlバージョンを持つサーバーでsnap'dバージョン(unison-jz)を呼び出します。
明らかに、unison-jzに含まれているsshバージョンはssh設定ファイルの「include」という用語を理解していないため、見つかった場合はエラーが発生します。そのため、/etc/ssh/ssh_config ファイルを編集する必要があるかもしれません。
目的のテキストエディタを使用して管理者権限で開きます。例えば
sudo nano /etc/ssh/ssh_config
以下のように19行をコメントアウトします。
Include /etc/ssh/ssh_config.d/*.conf
それはこんな感じ
#Include /etc/ssh/ssh_config.d/*.conf
以前のバージョンのUbuntuで新しいバージョンのOCamlまたはUnisonをコンパイルしようとすると、依存関係の問題のためにソースからビルドすることは不可能であるため、これがこの状況を処理するより簡単な方法だと思います。
追加情報:
答え2
Unisonバージョン2.48.3と2.48.4を混在しています。 Unisonは開発者がマイナーバージョン間でもUnisonアーカイブファイルの形式を変更するため、これは非常に面倒です。それにもかかわらず、Unisonのバージョンはすべてのコンピュータで一致する必要があります。私はアプリストアをスキップし、Ubuntuコンピュータに2.48.3を手動でコンパイル/インストールします。
また、同じバージョンのoCamlを使用する各コンピュータで、同じバージョンのUnisonをコンパイルする必要があります。)
答え3
この問題を解決する簡単な方法は、次のように適切な固定を使用することです。DebianまたはUbuntu以前のシステムへのリリースのために最新のホスト上で一貫したパッケージを維持するためのマニュアル。
Debian BullseyeにBusterを一貫して使用させるには、両方のバージョンの行を/etc/apt/sources.list
含めて次のように入力します/etc/apt/preferences.d/unison
。
Package: unison
Pin: release n=bullseye
Pin-Priority: -10
Package: unison
Pin: release n=buster
Pin-Priority: 900
apt-get install unison/buster
インストールされている場合、実行するとパッケージがダウングレードされます。パッケージ名の後にスラッシュとリリースバージョンがどのように付いているかを確認してください。
ブルズアイをフォーカスに変えて駆逐艦をバイオニックに置き換えると効果があるかもしれませんが、まだテストしたことはありません。 Q&Aに出てきたバージョン名に対応する番号は次のとおりです。
- バイオニックビーバーはUbuntu 18.04です
- Focal FossaはUbuntu 20.04です。
- バスターはDebian 10です
- BullseyeはDebian 11です。
(他の回答ではsnapの使用を提案しています。一部の人はこれを受け入れることができますが、ソフトウェアが事実上削除できない〜/ snap /ディレクトリを作成する方法と5年間簡単なソリューションが許可されていないことに注意してください。askubuntu.com/882562/.)
答え4
すべての設定ファイルを変更する代わりに、スナップエイリアスを使用する方が簡単です。
sudo snap alias unison-jz.unison unison
クライアント側とサーバー側の両方で。