Unison “解组期间发生致命错误”

Unison “解组期间发生致命错误”

我在三台机器上安装了 unison 2.48.4,其中两台运行 Linux Mint 17,一台运行 Linux Mint 18。我通过 SSH 同步。

两个17的同步没有问题。然而,18 无法与其他两个同步。潜在转账列表已生成,但当我按“GO”时,我得到以下信息:

Fatal error: Server: Fatal error during unmarshaling (input 
  value: bad bigarray kind), possibly because client and server 
  have been compiled with different versions of the Ocaml compiler.

当我使用图形或命令行版本的 unison 客户端时,我收到相同的消息。另外,当我在客户端尝试一致 2.48.3 时,这让我相信这是薄荷版本(17 与 18)的差异造成的问题。

我自己没有编译任何东西,只是从存储库或下载的 deb 包安装。

答案1

Unison 协议是特定于版本的。当 M ≠ N 时,版本 N 无法与版本 M 对话。

Debian(及其衍生产品:Ubuntu、Mint 等)提供了全体一致尽管名称包含 Unison 的一些最新但不是最新版本,而不是所有过去的版本。我还没有检查过,但我预计unison-allMint 18 会包含 Mint 17 上的版本。

或者,您可以通过将您在任何地方使用的 Unison 的所有版本复制到用作 Unison 集线器的计算机/usr/local/bin或其中来安装它们。~/binunison-NN.NN二进制文件仅依赖于标准库,因此它可以在任何 21 世纪的非嵌入式 Linux 上运行,而无需安装任何额外的东西。我就是做这个的。当错误修复出现时,您确实需要记住更新此二进制文件。

除非您安排在所有地方运行相同版本的 Unison,否则您需要通过输入addversionno = true您的配置文件来告诉它在远程端调用匹配的版本。

答案2

是的,我以前见过这个错误。除了运行相同版本的 Unison 之外,这些 Unison 二进制文件(有时)还必须使用相同版本的 OCaml 进行编译。当使用 OCaml 版本 >4 编译 Unison 时,我还看到了一些其他错误,但我不记得具体细节了。

所以你的选择是:

  1. 做为吉尔斯 说并将二进制文件从一台机器复制到其他机器。

  2. 下载、编译并安装正确版本的奥卡米尔(我必须使用3.12.1),并使用它来编译和安装从源头一致

答案3

为了在网络上使用 Unison,两端需要运行相同的版本使用相同版本的 OCaml 编译器构建。这可能是导致您出现问题的原因,因为它通常会导致您看到消息。最有可能的是,每个 Unison 二进制文件都是使用发行版存储库中提供的 OCaml 版本构建的。

更新的 Unison 版本(从 2.40 开始)可作为二进制下载从项目本身来看。从 2.51.3 开始,他们甚至提供不同 OCaml 版本的构建。抓住你想要的并将其部署到你的两台机器上,这确保你在两端运行相同的东西。

或者,您可以将 Mint 18 机器降级到 Mint 17 附带的 Unison 软件包 -.deb从存储库中获取 Mint 17 的软件包并使用dpkg. (在 Ubuntu 上做了类似的技巧;它应该适用于大多数发行版,因为 Unison 除了 之外没有任何依赖项libc。)

为了防止更新程序在下次运行时撤消您的更改,请将包置于保留状态:

sudo apt-mark hold unison-gtk

(如果您决定将来升级,重新运行此命令unhold将撤消此操作,从而允许再次升级软件包。)

您可能必须删除两端的Unison~/.unison/ar*缓存。~/.unison/fp*

从长远来看,团队正在努力摆脱 OCaml 版本依赖性(据我了解问题第375章,开发人员只是在等待下一个版本来合并他的更改)。我们可能会在 2.52 或 2.53 版本中立即享受到这一点。他们还计划在不同 Unison 版本之间引入互操作性,只要有线协议保持不变(第407章),但这可能需要更长的时间。

相关内容