Unison 失败并出现 "ill-formed message" 错误,相同的远程和本地版本
Unison fails with "ill-formed message" error, same remote & local versions
升级到 Mac OS X Catalina 后,我正试图让 unison 工作。不幸的是,macports 安装了更新版本的 ocaml (4.08.1),这意味着 unison 2.51.2 版本无法编译。
好吧,那没问题,我只是同步更新到 git master,然后重新编译。不幸的是,这在同步时失败了,因为用于在 mac (4.08.1) 上编译的 ocaml 版本与用于在另一个 machine (4.07.1) 上编译的版本不同。叹。好的,使用 opam magic 在我的 machine 上安装 4.07.1。一切都应该没问题,对吧?没有!
这是错误:
Connected [//zzzmyhost//home/clements/unison-home -> //zzzmyotherhost//Users/clements/clements]
Looking for changes
Uncaught exception Failure("input_value: ill-formed message")
Raised at file "/private/tmp/unison/src/lwt/lwt.ml", line 126, characters 16-23
Called from file "/private/tmp/unison/src/lwt/generic/lwt_unix_impl.ml", line 102, characters 8-23
Called from file "/private/tmp/unison/src/update.ml" (inlined), line 2105, characters 2-69
Called from file "/private/tmp/unison/src/uitext.ml", line 978, characters 16-56
Called from file "/private/tmp/unison/src/uitext.ml", line 1066, characters 6-90
Called from file "/private/tmp/unison/src/uitext.ml", line 1088, characters 19-66
Called from file "/private/tmp/unison/src/uitext.ml", line 1144, characters 21-43
怎么回事?
唉...这里的问题(非常不明显)实际上是 corrupted/wrong-format 同步文件,在较早的测试中执行失败的同步时创建。
解决方案只是进入 ~/Library/Application Support/Unison
(在 UNIX 机器上,此路径可能位于 ~/.unison
中并删除导致问题的存档文件(可能是最新的)。在紧要关头,只需删除所有存档文件并重新开始。
从 Ubuntu 18.04 升级后,我在 Windows 和 Ubuntu 20.04 之间遇到了同样的问题。我在 20.04 中尝试了 Ubuntu 18.04 的二进制文件,但仍然失败,因此不兼容可能是在其中一个依赖项中。
作为 解决方法 我根据 Ubuntu 18.04:
创建了一个 Docker 图像
FROM ubuntu:18.04
RUN apt-get update && apt-get dist-upgrade -y
RUN apt-get install unison -y
RUN useradd martin --home /home/martin
WORKDIR /home/martin
USER martin
用 docker build -t unison:18.04 .
构建它
然后我给 ~/bin/unison-2.48.4-docker
添加了一个包装器:
#!/bin/bash
docker run --rm -i \
-v /home/martin/dirtosync:/home/martin/dirtosync \
-v /home/martin/.unison:/home/martin/.unison \
--hostname $(hostname) \
unison:18.04 unison "$@"
设置 --hostname
很重要,因为主机名是存档文件的一部分。
在我的 Windows 机器的配置文件中,我配置了:
servercmd = ~/bin/unison-2.48.4-docker
在我的设置中,有两个 windows 客户端和一个 Ubuntu 18.04 服务器,通过 ssh 连接,问题开始于 Ubuntu 20.04 上的第二个服务器 运行。旧服务器和 windows 客户端都无法与新机器同步。
我的解决方案:将二进制文件从 Ubuntu 18.04 复制到 Ubuntu 20.04 机器中的新目录。这个新文件在新机器上ssh的“authorized_keys”文件中被引用。
到目前为止,unison 2.48.4 一切正常。
升级到 Mac OS X Catalina 后,我正试图让 unison 工作。不幸的是,macports 安装了更新版本的 ocaml (4.08.1),这意味着 unison 2.51.2 版本无法编译。
好吧,那没问题,我只是同步更新到 git master,然后重新编译。不幸的是,这在同步时失败了,因为用于在 mac (4.08.1) 上编译的 ocaml 版本与用于在另一个 machine (4.07.1) 上编译的版本不同。叹。好的,使用 opam magic 在我的 machine 上安装 4.07.1。一切都应该没问题,对吧?没有!
这是错误:
Connected [//zzzmyhost//home/clements/unison-home -> //zzzmyotherhost//Users/clements/clements]
Looking for changes
Uncaught exception Failure("input_value: ill-formed message")
Raised at file "/private/tmp/unison/src/lwt/lwt.ml", line 126, characters 16-23
Called from file "/private/tmp/unison/src/lwt/generic/lwt_unix_impl.ml", line 102, characters 8-23
Called from file "/private/tmp/unison/src/update.ml" (inlined), line 2105, characters 2-69
Called from file "/private/tmp/unison/src/uitext.ml", line 978, characters 16-56
Called from file "/private/tmp/unison/src/uitext.ml", line 1066, characters 6-90
Called from file "/private/tmp/unison/src/uitext.ml", line 1088, characters 19-66
Called from file "/private/tmp/unison/src/uitext.ml", line 1144, characters 21-43
怎么回事?
唉...这里的问题(非常不明显)实际上是 corrupted/wrong-format 同步文件,在较早的测试中执行失败的同步时创建。
解决方案只是进入 ~/Library/Application Support/Unison
(在 UNIX 机器上,此路径可能位于 ~/.unison
中并删除导致问题的存档文件(可能是最新的)。在紧要关头,只需删除所有存档文件并重新开始。
从 Ubuntu 18.04 升级后,我在 Windows 和 Ubuntu 20.04 之间遇到了同样的问题。我在 20.04 中尝试了 Ubuntu 18.04 的二进制文件,但仍然失败,因此不兼容可能是在其中一个依赖项中。
作为 解决方法 我根据 Ubuntu 18.04:
创建了一个 Docker 图像FROM ubuntu:18.04
RUN apt-get update && apt-get dist-upgrade -y
RUN apt-get install unison -y
RUN useradd martin --home /home/martin
WORKDIR /home/martin
USER martin
用 docker build -t unison:18.04 .
然后我给 ~/bin/unison-2.48.4-docker
添加了一个包装器:
#!/bin/bash
docker run --rm -i \
-v /home/martin/dirtosync:/home/martin/dirtosync \
-v /home/martin/.unison:/home/martin/.unison \
--hostname $(hostname) \
unison:18.04 unison "$@"
设置 --hostname
很重要,因为主机名是存档文件的一部分。
在我的 Windows 机器的配置文件中,我配置了:
servercmd = ~/bin/unison-2.48.4-docker
在我的设置中,有两个 windows 客户端和一个 Ubuntu 18.04 服务器,通过 ssh 连接,问题开始于 Ubuntu 20.04 上的第二个服务器 运行。旧服务器和 windows 客户端都无法与新机器同步。
我的解决方案:将二进制文件从 Ubuntu 18.04 复制到 Ubuntu 20.04 机器中的新目录。这个新文件在新机器上ssh的“authorized_keys”文件中被引用。
到目前为止,unison 2.48.4 一切正常。