Linux 與 macOS
讀完本頁,你就知道 lip 在你的系統上能執行哪些伺服器、為了執行它們會下載什麼並放在哪裡,以及會遇到哪些限制。命令在每種系統上都一樣:見用命令管理伺服器。
什麼系統能執行什麼
Minecraft 發佈了兩種伺服器:Windows 版和 Linux 版。模組需要的載入器 LeviLamina 只能載入進 Windows 伺服器。所以帶模組的伺服器一定是 Windows 伺服器;在非 Windows 的系統上,lip 通過 Wine 執行它。
| 系統 | Windows 伺服器,帶或不帶 LeviLamina | Linux 伺服器,不帶載入器 |
|---|---|---|
| x64 的 Windows | 可以 | 不可以 |
| arm64 的 Windows | 可以。由 Windows 模擬 x64。 | 不可以 |
| x64 的 Linux | 可以,通過 lip 的 Wine | 可以 |
| x64 的 macOS | 可以,通過 lip 的 Wine | 不可以 |
| arm64 的 macOS(Apple 芯片) | 可以,通過 lip 的 Wine 和 Rosetta 2 | 不可以 |
| arm64 的 Linux,以及其他任何系統 | 不可以 | 不可以 |
lip 為前五種系統發佈。沒有 arm64 Linux 版的 lip:見限制和已知問題。
無論 lip 執行在什麼系統上,它安裝的都是同一批套件,也就是為 x64 的 Windows 製作的那些。在一種系統上安裝好的伺服器資料夾,可以搬到另一種系統上。
通過 Wine 執行 Windows 伺服器
安裝和執行伺服器的方法與 Windows 上完全一樣:
mkdir -p ~/servers/survival
cd ~/servers/survival
lip setup --game 1.26.50
lip run你不需要安裝 Wine。lip 自帶一份,並且從不執行別的 Wine,例如 PATH 裡的 wine。
lip 下載什麼放在哪裡
lip 第一次需要執行 Windows 程式時,會先準備好系統。這發生在 lip setup 安裝 Windows 伺服器時、某個套件在安裝過程中要執行自己的程式時,以及 lip run 啟動 Windows 伺服器之前。
| 內容 | 放在哪裡 | 是否共用 |
|---|---|---|
| Wine:適合你係統的一個組建,Linux 上來自 Kron4ek/Wine-Builds,macOS 上來自 Gcenx/macOS_Wine_builds | lip 資料目錄下的 wine/:Linux 和 macOS 上都是 $XDG_DATA_HOME/lip,預設 ~/.local/share/lip | 所有工作區共用。只下載一次。 |
| Microsoft Visual C++ Redistributable,伺服器需要它 | 安裝到工作區的 Wine 前綴裡 | 不共用。每個工作區一次。 |
安裝 Wine 時,lip 會告訴你:
lip runs the server with Wine <version>, which it installs once for every workspace, into <directory>.這兩樣下載都會經過校驗。每個版本的 lip 都通過 SHA-256 確切地知道它要的是哪個檔案。不一致的下載會被刪除、不會被使用,命令在變更工作區之前就失敗。下載下來的壓縮檔和安裝程式用完即刪。
這兩步都不需要 root 權限。
想騰出空間,可以在沒有 lip 執行時刪除資料目錄。不會丟失任何東西:lip 下次需要時會重新安裝 Wine。
Wine 前綴
Wine 把它的「Windows」(登錄檔和 C: 盤)放在一個叫作前綴的資料夾裡。lip 給每個工作區單獨一個:伺服器資料夾裡的 .lip/wine。Wine 第一次在那裡執行時會建立它,所以第一次執行會慢一些。
前綴會隨伺服器資料夾一起移動。在伺服器停止時刪除 .lip/wine 是安全的:Wine 會重新建立它,lip 會重新把 Visual C++ Redistributable 裝進去。
想使用別的前綴,請自己設定 WINEPREFIX,並且對該工作區的每條 lip 命令都這樣設定:
export WINEPREFIX="$HOME/.wine-bedrock"
lip setup --game 1.26.50
lip runApple 芯片的 macOS
lip 的 Wine 是 x64 程式,Apple 芯片的 Mac 通過 Rosetta 2 執行它。安裝 Rosetta 2 需要系統管理員權限,所以 lip 不會替你安裝。缺少它時,lip 會失敗並提示你執行:
softwareupdate --install-rosetta --agree-to-license然後重新執行 lip 命令。
Linux 伺服器
在 x64 的 Linux 上,lip 還能執行 Minecraft 的 Linux 伺服器。它不需要 Wine,也不需要系統裡的其他東西。它沒有載入器,所以不能在它旁邊安裝需要 LeviLamina 的模組。
lip setup --game 1.26.50 --build linux
lip runlip setup放置伺服器的檔案,並把bedrock_server設為可執行。lip run在工作區裡啟動bedrock_server。LD_LIBRARY_PATH未設定或為空時,lip 會把它設為.,讓伺服器能找到旁邊的庫。- 在 x64 的 Linux 以外的系統上,對這樣安裝的工作區執行
lip run會失敗,並提示你到那種系統上執行,或者改裝 Windows 伺服器。
一個工作區只有一個遊戲。在已有 Windows 伺服器的資料夾裡安裝 Linux 伺服器會取代掉它,反過來也一樣。見變更遊戲版本。
環境變數
lip 從你執行它的終端機裡讀取這些變數。
| 變數 | lip 怎麼用它 |
|---|---|
WINEPREFIX | Wine 前綴。未設定或為空時,lip 使用工作區裡的 .lip/wine。 |
WINEDEBUG | 傳給 Wine。未設定時,lip 把它設為 -all,隱藏 Wine 的偵錯資訊。想看這些資訊,可以設成例如 err+all。 |
LD_LIBRARY_PATH | 用於 Linux 伺服器。未設定或為空時,lip 把它設為 .。 |
XDG_CONFIG_HOME | 使用者設定所在位置:$XDG_CONFIG_HOME/lip。預設 ~/.config。 |
XDG_CACHE_HOME | 下載快取所在位置:$XDG_CACHE_HOME/lip。預設 ~/.cache。 |
XDG_DATA_HOME | Wine 的安裝位置:$XDG_DATA_HOME/lip。預設 ~/.local/share。 |
XDG_STATE_HOME | 介面的工作區清單所在位置:$XDG_STATE_HOME/lip。預設 ~/.local/state。 |
XDG_RUNTIME_DIR | 常駐程式的套接字所在位置:$XDG_RUNTIME_DIR/lip/daemon.sock。未設定時,套接字在狀態目錄裡。 |
HTTPS_PROXY、HTTP_PROXY、ALL_PROXY、NO_PROXY | 你的網路代理伺服器。見系統代理伺服器。 |
LC_ALL、LC_MESSAGES、LANG | 介面的語言,除非 language 設定已經指定了語言。 |
未設定、為空或不是絕對路徑的 XDG_ 變數會取預設值。macOS 使用與 Linux 相同的目錄。
其他變數都會原樣傳給伺服器和套件的程式。
INFO
lip 的工作是在背景處理程序(常駐程式)裡完成的。這不影響哪些變數起作用:每條命令使用的都是輸入它的那個終端機裡的變數。託管伺服器保留的是啟動它的那個終端機的變數。
限制和已知問題
- 不支援 arm64 的 Linux。 試過的辦法都不能在那裡可靠地執行 LeviLamina 伺服器:Hangover 能執行原版伺服器,但執行不了被 LeviLamina 修改過的;box64 下的 x64 Wine 會丟失 Windows 程式的結束代碼;FEX 下的 x64 Wine 只在部分嘗試中啟動了 LeviLamina 伺服器。
- 其他系統沒有 Wine。 在沒有 lip 的 Wine 的系統上,凡是需要 Windows 程式的操作都會失敗,並提示
lip runs the server with Wine on systems other than Windows, but has no Wine for <system>. Run the server on Windows, on Linux on x64 or on macOS. - 第一次啟動很慢。 要下載並解壓縮 Wine、建立前綴、安裝 Visual C++ Redistributable。之後的啟動會跳過這三步。
- 檔案名稱不區分大小寫。 在 Windows 伺服器的工作區裡,lip 把
Plugins/a.dll和plugins/a.dll當作同一個檔案,和 Wine 下的程式一樣。如果資料夾裡有兩個只差大小寫的名字,而 lip 需要的是其中唯一的一個,命令會失敗。請給其中一個改名。 - 套件命令裡的引號。 Wine 會把
"以\"的形式傳給 Windows 命令行。安裝命令裡含有"的套件,通過 Wine 可能無法正常工作。請向套件的作者反饋。 - 結束代碼是 Wine 的。
lip run以wine的結束代碼結束,或者以 128 加上結束它的信號編號結束。 - 會改動下載內容的代理伺服器會讓校驗失敗。 Wine 或 Visual C++ Redistributable 的 SHA-256 與預期不符時,lip 會拒絕這個檔案。請稍後再試,或換一個網路。
- 損壞的前綴。 Visual C++ Redistributable 在某個前綴裡安裝失敗時,lip 會指出這個前綴。刪除那個資料夾,再執行 lip。如果連
wine本身都執行不了,請刪除資料目錄裡的wine/,讓 lip 重新安裝。 - 舊版 lip 的資料夾。 早期 lip 為
linux-x64平臺建立的工作區,如果裡面只有伺服器,仍然可以使用:lip 會把它讀作 Linux 伺服器。如果裡面還有別的套件,lip 會停下並說明它只為win-x64安裝套件。請建立一個資料夾重新安裝。
這些限制背後的原因見內部機制。