因為出 OI 題用了 TPS,以往都用 Linux 執行,用 M1 Macbook 跑時遇到不少麻煩。
費盡千辛萬苦解決用 pandoc + latex engin 輸出題敘的問題後,剛要接觸下個生成測資的指令,果不其然又噴錯了:
這次是關於 C++ 的,我已經懶得、也沒能力解決了,只好尋求 VM 的協助。
macOS 上常用的 VM 平台有:VMware, VirtualBox, Parallels。其中只有 Parallels 支援 M1,但連玩手遊都沒課過金的我自然是不會選擇它。
UTM 是一款開源且免費,還能跑在 M1 上的 VM 軟件。在最近幾個月前的更新後,使用變的非常簡單。
安裝好 UTM 後,就能新建一台 Linux VM:
接著,就會進入安裝 Ubuntu Server 的流程。
成功的話會跳訊息。但 UTM 不支援 ping
,我也不知道為什麼這裡能用。或是:
看看有沒有提示連不上 server 的錯誤。或是:
成功的話也會跳訊息。dig
可以指定一個 DNS,然後問他關於這個 domain 的資訊。
原生的 Console 用著還停難受的,特別是在被非常 Fancy 的 Terminal 慣壞之後。一個解決方案是 SSH 進去我們的 VM。
設置步驟:
💡連接埠轉發應該可以想像成,UTM 會去抓送到本機 22022 port 的資料,然後丟到 VM 裡的 22 port。
儲存設置後,開啟 VM。這時再使用上面測試網路的指令,會發現唯獨 ping
不能使用了。
使用本機的 Terminal SSH 到 localhost,並且 port 指定為“主機連接埠”。如果 Server 上的 Username 跟現在的 Username 不一樣的話,需要以 <username>@<ip>
指定以哪個 User 登進去。
如果新增第二台 VM,然後再度 SSH 進去就會發生這種狀況。這通常發生在伺服器重灌之類的時候,因為 host key 跟之前紀錄的不一樣了。只要把 ~/.ssh/known_hosts
裡的對應主機刪掉就好了,或是整個檔案砍掉也行。
💡host key 是用在 SSH protocal 裡的一對公私鑰。
很多狀況都會導致 kex_exchange_identification Connection Closed by Remote Host
。可以檢查一下 server 端有沒有裝 openssh-server
。
當你用不到 GUI,切換到“只有主控台”模式有一些好處。首先,可以複製貼上到 VM 裡面了;另外,也能增加效能。
設置步驟:
此時網路大概是不能用的。進到 VM 裡不管是 dig
或 apt udpate
都會沒反應。因為在不同模式下,網卡(Network adapter)會是不同名字。
enp0s8 就是我現在的網卡,而我在 GUI 模式下的網卡是 enp0s10,跟現在不一樣。
原本的檔案內容長這樣,dhcp4 設成 true 時會自己去抓 ipv4 來用。
把它再加上我現在的網卡(enp0s8)的設置就好了。
有一個奇怪的地方是,切換成主控台模式之後,shutdown
需要加 sudo
了。這應該是因為主控台模式,可以視為 terminal。如果在 GUI 模式下,接觸到的就直接是 console 了。
有了共享資料夾會方便很多,不然可能要把全部東西都丟到 GitHub 才行。我直接把整個家目錄都共享了。可惜的是,主控台模式下不能使用共享功能。
設置步驟:
💡SPICE 是用在虛擬化環境裡的通訊協定。
💡WebDAV 是 HTTP 的擴充,用來遠端操控 Server 上的資源。我們可以透過支持 WebDAV 的工具送出 COPY
、LOCK
、MOVE
等請求,讓 WebDAV Server 執行對應動作。
💡davfs2 則可以讓我們透過本地硬碟存取 WebDAV Server 上的資料。
資料夾會被當成一個 WebDAV server,在 http://127.0.0.1:9843/ 上。我們要把它掛載到 /mnt
上。
首先創個資料夾,叫什麼都好,這裡會東西最後會掛載到這裡裡面。
這是 davfs2 用來儲存登入資料的檔案,在加上這行:
電腦在開機時,他會根據 fstab,自動對特定類型的檔案系統進行 mount 操作,這樣就不用每次都手動 mount 了。加上這行:
只是為了跑 linux 折騰了我兩天🥵,終於可以開始出題了zzzz。
希望等等不要再遇到什麼困難。
更:結果真的出現一樣的錯誤訊息了。