我有一个运行Raspbian 9的文件服务器,并使用Unison在这两者之间同步我的主目录。
我在Ubuntu18.04上运行了两年,但是在升级到Ubuntu20.04之后,用解封送处理错误同步SSH中止,声称这两个Unison版本(本地版本和远程版本)是用不同的OCaml版本构建的。
所有相关系统的统一版本为2.48 (升级前和升级后)。
怎么回事?
发布于 2020-11-30 20:15:50
在网络上使用Unison大大加快了整个网络的同步(因为文件是在本地而不是在网络上被扫描的),但是它需要在两端匹配Unison版本。由于Unison依赖于一些OCaml库来进行同步,而且由于这些库显然不能保证跨OCaml版本的稳定性,所以两端不仅需要运行相同的Unison版本,还需要运行使用相同的OCaml版本构建的相同的Unison版本。(是的,这很糟糕,而且Unison项目在这方面存在多个问题:#375是关于该协议依赖于用于构建的OCaml版本;它目前正在进行工作,但在Unison2.51.3中仍处于开放状态。#407是关于有线协议随每个版本而变化的假设。)
据我所见,OCaml 4.02的Raspbian 9(拉伸)船,Ubuntu18.04的OCaml 4.05和OCaml 4.08的Ubuntu20.04。据推测,Unison是在平台的默认OCaml版本的基础上构建的,但是2.48还没有告诉我们(后来的版本报告了它们的OCaml版本)。虽然很明显,4.05恰好与4.02兼容,但在4.08之前似乎已经引入了一个破坏兼容性的更改。
Unison项目提供了一些来自他们CI的二进制文件,以后的版本允许在不同的OCaml版本之间进行选择。不幸的是,这对于armhf体系结构和Unison2.48来说都是不可用的,所以这里没有帮助。
目前,把Ubuntu机器上的Unison降级到18.04版的版本对我很有帮助。(除了libc的最低版本之外,包具有最小的依赖项。)
从Ubuntu抓取unison-gtk_2.48.4-1ubuntu1_amd64 (这是18.04版;20.04版有unison-gtk_2.48.4-4ubuntu1_amd64版),然后用以下方式安装:
sudo dpkg -i ~/Downloads/unison-gtk_2.48.4-1ubuntu1_amd64.deb为了防止更新程序在下一次运行时取消您的更改,请搁置该包:
sudo apt-mark hold unison-gtk(如果您决定将来升级,使用unhold重新运行此命令将取消此操作,从而允许再次升级包。)
您可能必须删除您的Unison ~/.unison/ar*和~/.unison/fp*-on两端。
现在,Unison将再次工作。
即将推出的Debian 11 (Bullseye)包括Unison2.51。接下来的方法是将文件服务器更新为Debian 11和Unison2.51,对于任何工作站,都可以从Unison的CI获取二进制构建,并使用匹配的程序和OCaml版本。考虑到Debian之前的发布周期,Bullseye在2021年早期/中期发布是有点现实的。
正如我理解了相应的问题,从有线协议中删除OCaml版本依赖项就在眼前。这样做的方法就是在两端都有匹配的Unison版本(只要它是一个消除了依赖的版本)。不过,你最喜欢的发行版在发布后可能还需要一段时间--我们可能是在谈论2022年4月至2023年中期之间的某个时候。
Unison团队还致力于将有线协议版本号与程序版本分开分配,因此,只要协议不确实改变,多个版本最终将共享同一版本的有线协议。一旦出现这种情况,即使是不同的Unison版本也能够协同工作,只要两者使用相同的协议版本。
https://unix.stackexchange.com/questions/622255
复制相似问题