將我的筆記型電腦升級到 Ubuntu 20.04 後,與 Raspbian 文件伺服器的 Unison 不再有效
我有一個執行 Raspbian 9 的文件伺服器,並使用 Unison over SSH 在這兩者之間同步我的主目錄。
這在我使用 Ubuntu 18.04 的兩年中執行良好,但在升級到 Ubuntu 20.04 後,通過 SSH 同步中止並出現解組錯誤,聲稱兩個 Unison 版本(本地和遠端)是使用不同的 OCaml 版本建構的。
Unison 版本在所有涉及的系統上為 2.48(升級前和升級後)。
是什麼賦予了?
原因
在網路上使用 Unison 極大地加快了網路上的同步(因為文件在本地而不是通過網路掃描更改),但它需要在兩端匹配 Unison 版本。由於 Unison 依賴於一些 OCaml 庫來進行同步,並且這些庫顯然不能保證在 OCaml 版本之間保持穩定,因此兩端不僅需要執行相同的 Unison 版本,還需要執行使用相同 OCaml 建構的相同 Unison 版本版本。(是的,這很糟糕,Unison 項目在這方面存在多個問題:#375是關於協議依賴於用於建構的 OCaml 版本;它目前正在開發中,但自 Unison 2.51.3 起仍處於開放狀態第407章是關於有線協議隨每個版本而變化的假設。)
據我所知,Raspbian 9 (Stretch) 附帶 OCaml 4.02,Ubuntu 18.04 附帶 OCaml 4.05,Ubuntu 20.04 附帶 OCaml 4.08。據推測,Unison 是在該平台的預設 OCaml 版本上建構的,但 2.48 還沒有告訴我們(後來的版本報告了他們的 OCaml 版本)。雖然顯然 4.05 恰好與 4.02 兼容,但 4.08 似乎引入了一個破壞兼容性的更改。
Unison 項目從他們的 CI 中提供了一些二進製文件,並且更高版本允許在不同的 OCaml 版本之間進行選擇。不幸的是,這不適用於
armhf
架構,也不適用於 Unison 2.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/ar*
的Unison 記憶體。~/.unison/fp*
目前,Unison 將再次工作。
中短期解決方案(~2021 年中)
即將推出的 Debian 11 (Bullseye) 包括 Unison 2.51。然後要走的路是將文件伺服器更新到 Debian 11 和 Unison 2.51,並為任何工作站從 Unison 的 CI 中獲取二進制建構,並帶有匹配的程序和 OCaml 版本。鑑於 Debian 之前的發布週期,Bullseye 在 2021 年初/中期的某個時間發布是有些現實的。
中長期解決方案(2022-2023)
據我了解相應的問題,從有線協議中刪除 OCaml 版本依賴關係指日可待。那麼要走的路就是在兩端都有匹配的 Unison 版本(前提是它是一個消除了依賴關係的版本)。不過,您最喜歡的發行版在發布後可能需要一段時間才能攜帶這樣的版本——我們可能談論的是 2022 年 4 月至 2023 年年中之間的某個時間。
長期解決方案
Unison 團隊還致力於將有線協議版本號與程序版本分開分配,因此只要協議確實沒有改變,多個版本最終將共享相同版本的有線協議。一旦發生這種情況,即使是不同的 Unison 版本也可以一起工作,只要它們使用相同的協議版本。