我正在尝试在 Ubuntu 实例和 CentOS 7 实例之间同步数据。这就像双向 rsync 所以我想一致将是最好的工具。我在两个实例上都安装了它,但是当我尝试连接它们时,我收到错误,因为版本不同:
unison -testServer . ssh://myuser@myremotehost/efs/home/
Contacting server...
myuser@myremotehost's password:
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".
This can happen because you have different versions of Unison
installed on the client and server machines, or because
your connection is failing and somebody is printing an error
message, or because your remote login shell is printing
something itself before starting Unison.
所以我尝试使版本匹配,但当我查看时,我只看到 Ubuntu 上可用的一个版本。
myuser@mylocalhost:/nas/$ apt policy unison
unison:
Installed: 2.48.4-1ubuntu1
Candidate: 2.48.4-1ubuntu1
Version table:
*** 2.48.4-1ubuntu1 500
500 http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 Packages
100 /var/lib/dpkg/status
当我查看 CentOS 7 时,我没有看到任何版本
$ yum --showduplicates list unison
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: d36uatko69830t.cloudfront.net
* epel: mirror.prgmr.com
* extras: d36uatko69830t.cloudfront.net
* updates: d36uatko69830t.cloudfront.net
Error: No matching Packages to list
但是,我可以毫无问题地安装它:
$ sudo yum install unison
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: d36uatko69830t.cloudfront.net
* epel: d2lzkl7pfhq30w.cloudfront.net
* extras: d36uatko69830t.cloudfront.net
* updates: d36uatko69830t.cloudfront.net
Package unison240-gtk-2.40.128-5.el7.x86_64 already installed and latest version
Nothing to do
我在查找版本时做错了什么吗?我怎样才能让它们匹配?
本地主机是:
myuser@mylocalhost:/nas$ cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
远程主机是:
$ cat /etc/*release
CentOS Linux release 7.6.1810 (Core)
答案1
根据@Freddy 的评论,关键是在 CentOS 上从源代码编译 unison:
yum install ocaml ocaml-camlp4-devel ctags ctags-etags
cd ~
wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.4.tar.gz
tar xvfz unison-2.48.4.tar.gz
cd src
make
sudo cp -v unison /usr/local/sbin/
sudo cp -v unison /usr/bin/
cd ~
rm -fr src
然后你就可以一致运行:
在本地服务器上,转到所需的位置,然后使用以下命令进行测试
unison -testServer . ssh://myuser@myremotehost//path/to/data/
要做真正的事情,只需-testServer
从上面删除即可。这也是一个好主意多路复用器在此之前。
答案2
为了跨网络运行,Unison 需要在两端使用相同的程序版本,并使用相同版本的 OCaml 编译器构建。
正如另一个答案中所述,您可以从源代码构建 Unison。要么在一台机器上构建,然后将二进制文件复制到另一台机器上,或者,如果您决定在每台机器上单独构建 Unison,请确保两台机器具有相同版本的 OCaml 编译器。
作为更简单的替代方案,从 2.40 开始的 Unison 版本可作为二进制下载从项目本身来看,至少对于英特尔平台来说是这样。从 2.51.3 开始,他们甚至提供不同 OCaml 版本的构建。抓住你想要的并将其部署到你的两台机器上,这确保你在两端运行相同的东西。