Unison 和版本/編譯器衝突
我有兩台機器,一台執行 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 版本正常工作,您還需要做兩件事。那些是:
- 一旦您創建了將用於同步文件的 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 時會出現依賴性問題。
更多資訊: