Ubuntu 16.04 xenialにUnison 2.40をインストールする方法(「致命的なエラー:予期しないヘッダーを受信する」を修正)

Ubuntu 16.04 xenialにUnison 2.40をインストールする方法(「致命的なエラー:予期しないヘッダーを受信する」を修正)

私のRaspberry Piコンピュータから:

pi@mizu:~ $ unison -version
unison version 2.40.102

私のデスクトップUbuntu 16.04 xenialから:

kayd@Trunk:~$ unison -version
unison version 2.48.3

同期しようとしたとき:

kayd@Trunk:~$ unison . ssh://pi@mizu/.
...
Fatal error: Received unexpected header from the server:
 expected "Unison 2.48\n" but received "Unison 2.40\n\000\000\000\000\017", 
which differs at "Unison 2.40".

関連投稿1インストールしますunison-all。インストールしましたが、バージョン2.48のみが含まれています。

kayd@Trunk:~$ ls -l /usr/bin/unison*
lrwxrwxrwx 1 root root      24 Mai 20 22:15 /usr/bin/unison -> /etc/alternatives/unison
lrwxrwxrwx 1 root root      13 Mär 18 16:10 /usr/bin/unison-2.48 -> unison-2.48.3
-rwxr-xr-x 1 root root 2169968 Mär 18 16:10 /usr/bin/unison-2.48.3
lrwxrwxrwx 1 root root      13 Mär 18 16:10 /usr/bin/unison-latest-stable -> unison-2.48.3

私が見ることができる2つのオプションは次のとおりです。

  1. 2.40のXenial PPAを見つけました。
  2. 2.48を含むラズベリー用PPAを見つけました。

これまでのところ、どちらも成功しませんでした。

以下のユーザーの回答に基づいていますマフェアーズ 271自分でコンパイルしてみようかと思いましたが、結果はちょっと悪夢だったようです。最後 Unison開発メーリングリストに投稿たとえば、国「新しいOCaml 4.03バージョンは、ライブラリにいくつかの互換性のない変更を適用しました。バージョン2.48を修正して、4.02または4.03でコンパイルし、新しいバージョンでリリースできるようにしました。」そして「PS、「ocaml 4.02.1はocaml 4.02.2と互換性がありません」という恐ろしいエラーが発生したときに報告するより良いエラー報告機能も追加しました。 」これはすべてが違うという結論につながる。高い壊れやすいので、更新された内容があれば、改訂番号が少しだけ変更されても破損することがあります。同期する必要があるコンピュータが多数あり、その一方または他のコンピュータが定期的に更新されます。

答え1

一人に会った解決策:

Debian は Ubuntu バージョンと互換性のある 2.48 でテストされました。 Piにテストリポジトリを追加する必要がありますが、優先順位が低いため、明示的に要求された場合にのみ使用されます。

次の行を追加します/etc/apt/preferences(ファイルが存在しない場合は作成)。

Package: *
Pin: release o=Raspbian,a=stable
Pin-Priority: 500

Package: *
Pin: release o=Raspbian,a=testing
Pin-Priority: 300

次に、次の行を追加します/etc/apt/sources.list

deb http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpi

次に、次を実行します。

sudo apt-get update
sudo apt-cache policy

確認するテスト追加したばかりのリポジトリは他のリポジトリよりも優先順位が低くなります。

ついに:

sudo apt-get install -t testing unison-all

これはPiで2.48を提供し、接続して同期することができます。


既存のバージョンとともに Unison の明示的なバージョンをインストールすることもできます。走る

sudo apt-cache search unison

提供されたバージョンを見つけて、必要なバージョンをインストールするには、次の手順を実行します。

sudo apt-get install -t testing unison2.40.102

バージョン番号を持つパッケージは実際のパッケージです。unison常に最新バージョンに依存するメタパッケージunison-allですが、バージョン選択に依存するメタパッケージです。

サーバーに複数のバージョンがある場合は、-addversionno次のオプションを使用してUnisonを実行できます。これにより、クライアントはバージョン番号をサーバーに送信し、サーバーに基本バージョンではなく同じバージョンを実行するように指示します。


あるいは、Ubuntuデスクトップで同様のことを試すこともできます。以下を行う必要があります。

  • PiでUnisonバージョンを提供するディストリビューションを見つけてください。
  • そのバージョンのリポジトリを/etc/apt/sources.listxenial
  • これに従って修正してくださいetc/apt/preferences。代わりに、現在のバージョン名と目的のUnisonバージョンを使用してくださいstabletesting現在のバージョンの500優先順位が高くなります。
  • sudo apt-get update; sudo apt-cache policy優先順位が正しく設定されていることを確認するには、出力を実行して確認します。そうでなければ、Ubuntuのインストールはめちゃくちゃになる可能性があります!
  • すべてが正常であることを確認したら、インストールunison(またはunison-all明示的にビルド)して新しいリポジトリを選択します。

または、.debファイルを入手して自分でインストールしてみてください。

答え2

はい、同じバージョンのUnisonを実行する必要があります。これは、Unisonがコンテンツを追跡するために使用するアーカイブファイルの形式が新しいリリースごとに改善および変更されるためです

Unisonをソースから直接インストールするとどうなりますか? Raspberry Piに2.48をインストールすることをお勧めします。ソースコードをダウンロードできますUnison 2.48.3 ここ、これを行う方法についての指示を確認してください。ここでコンパイルしてインストールしてください。。実際、Ubuntuを実行しているデスクトップのソースからUnisonをコンパイルしてインストールすることをお勧めします。これにより、UbuntuがUnisonパッケージを更新することを決定した場合、予期しない問題を回避でき、以前に問題が発生した同じバージョンのOCamlでそのパッケージがすべてコンパイルされたことを確認できます。

Raspberry Piでは、ネイティブコードではなくバイトコードでコンパイルする必要があるかもしれないことに注意することも重要です。Native=falseMakefileで設定できます。私を見てここに答えてくださいより多くの情報を知りたいです。

答え3

インストールすることもできます。

unison-all

の説明に従って、正しいバージョンを自動的に選択します。

1つのシステムで複数のバージョンのunisonを使用する方法は?

答え4

Unixシステム(Debian Jessie)を2.40.102 Unisonバージョン(apt-getの公式の安定パッケージバージョンからインストールされている)と最新の2.48.15バージョンのmacOSシステムと同期する際にも同じ問題が発生しました。

最善の解決策は、UnisonのmacOSバージョンを2.40にダウングレードすることです。バイナリはここにあります:

macOS Intel用Union 2.40.61(GUI)

そして、Unisonメニュー>コマンドラインツールのインストールからコマンドラインをインストールすることを忘れないでください。

同期すると警告が置き換えられます。

Unison[16276:318574] Calling nonGuiStartup
Fatal error: Received unexpected header from the server:
expected "Unison 2.40\n" but received "Unison 2.48\n\000\000\000\000\017",
which differs at "Unison 2.48".

通過:

Unison[18574:332371] Calling nonGuiStartup
Connected [//SERVER.IP//Users/USer/Desktop/Unison -> //localhost//home/user/test]
Looking for changes Warning: No archive files were found for these roots…

注:私はmacOS Sierra 10.12.4を使用しており、Unison 2.40.61が正常に動作しているようです。

関連情報