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をコンパイルしようとすると、依存関係の問題のためにソースからビルドすることは不可能であるため、これがこの状況を処理するより簡単な方法だと思います。
追加情報: