我在三台机器上安装了 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-all
Mint 18 会包含 Mint 17 上的版本。
或者,您可以通过将您在任何地方使用的 Unison 的所有版本复制到用作 Unison 集线器的计算机/usr/local/bin
或其中来安装它们。~/bin
该unison-NN.NN
二进制文件仅依赖于标准库,因此它可以在任何 21 世纪的非嵌入式 Linux 上运行,而无需安装任何额外的东西。我就是做这个的。当错误修复出现时,您确实需要记住更新此二进制文件。
除非您安排在所有地方运行相同版本的 Unison,否则您需要通过输入addversionno = true
您的配置文件来告诉它在远程端调用匹配的版本。
答案2
答案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章),但这可能需要更长的时间。