Ubuntu

Unison 和版本/編譯器衝突

  • March 24, 2022

我有兩台機器,一台執行 Ubuntu 18.04,另一台執行 Ubuntu 20.04。我想使用 Unison 在它們之間同步文件,但存在一些問題。首先,因為我也與另一台機器同步,所以我從原始碼 Unison 2.48.3 編譯。然後在 Ubuntu 18.04 中,我從 Ubuntu 軟體 Unison 2.48.4 安裝,所以我用 Ubuntu 20.04 安裝。正確設置它們後,我從 Ubuntu 18.04 的命令行執行 unison-2.48.4-gtk 並嘗試同步。儘管一切正常,即它找到了機器和目錄,然後我收到消息: Fatal error during unmarshaling (input value:ill-formed message) possibly because client and serer have been compiled with different versions of OCaml compiler。在 20.04 中,我檢查了 OCaml 的版本,但顯然它什麼也沒返回(即使我已經從應用商店安裝了 unison)。在 18.04 上,版本是 4.05.0。關於我能做什麼的任何想法?

您正在混合使用 Unison 版本 2.48.3 和 2.48.4。Unison 對此非常挑剔,因為即使在次要版本之間,開發人員也會更改 Unison 存檔文件的格式。無論如何,Unison 的版本應該在你所有的機器之間匹配。我會跳過應用商店,在你的 Ubuntu 機器上手動編譯/安裝 2.48.3。

此外,您必須確保在每台機器上使用相同版本的 oCaml 來編譯相同版本的 Unison ;)

當您需要同步具有不同作業系統的多台電腦時,如果您不想在每次 Unison 和/或 OCaml 更改某些內容時都從原始碼編譯,那麼有一個乾淨的解決方案應該始終有效,並且可以快速安裝 Unison . 這樣,您在所有 linux 電腦、客戶端和伺服器上都擁有相同的 Unison/OCaml 版本。這就是快照的意義所在。無論安裝在哪個作業系統中,相同的快照都應該完全相同。在這種情況下,我們在軟體中心提供了 unison-jz。它將安裝針對 OCaml 4.02.3 編譯的 Unison 2.51.2

如果 snapd 已經安裝,就像在 Ubuntu 中一樣,您只需要發出:

sudo snap install unison-jz

如果你想同步你的主目錄之外的東西,你可能必須在開發者模式下安裝 unison-jz,這樣它才能處理所需的權限。在這種情況下,您必須在終端中使用的行是:

sudo snap install --devmode unison-jz

要使 Unison 的 snap’d 版本正常工作,您還需要做兩件事。那些是:

  1. 一旦您創建了將用於同步文件的 Unison 配置文件,請使用文本編輯器添加該行
servercmd = /snap/bin/unison-jz.unison -ui text

到您的配置文件,位於 ~/snap/unison-jz/current/.unison/

所有配置文件都使用副檔名 .prf

這樣,客戶端機器中的統一呼叫伺服器中的 snap’d 版本 (unison-jz),該版本具有相同的 Unison/OCaml 版本 2. 顯然,unison-jz 中包含的 ssh 版本不理解 ssh 配置文件中的“包含”一詞,如果找到它就會出錯。因此,您可能還必須編輯文件 /etc/ssh/ssh_config

以管理員身份使用您選擇的文本編輯器打開它。例如

sudo nano /etc/ssh/ssh_config

並註釋掉看起來像的第 19 行

Include /etc/ssh/ssh_config.d/*.conf

它應該看起來像這樣

#Include /etc/ssh/ssh_config.d/*.conf

我認為這是處理這種情況的一種更簡單的方法,因為從原始碼建構通常是不可能的,因為在舊版本的 Ubuntu 中嘗試編譯新版本的 OCaml 或 Unison 時會出現依賴性問題。

更多資訊:

http://www.xente.mundo-r.com/zasjls/other/20/unison_en.html

引用自:https://unix.stackexchange.com/questions/583058