2022/12/04

在Rock Pi X單板機上安裝Proxmox VE當虛擬主機伺服器!

自從肥叔叔買了M6以後,Rock Pi X就被打入冷宮,在家裡的「WFH的工位」的一角閒置著。

基本上閒置的Rock Pi X,當時也買了散熱器,後來又買了RTC電池。上面白白一層的是其他電器的包裝物料,厚度剛好,按外形稍為切割後,用來簡單墊高一點保護板上的元件。

因為即使是日常基本文書使用,那個差別還是非一般的大,大約是人間(m6)和地獄第三層(Rock Pi X)的差異。

問題是內存RAM嗎?CPU嗎?eMMC嗎?應該是全部加在一起才有的效果吧。再上一次有如此效果的電腦應該是第一代MacBook Air吧?在SATA年代還在用1.8寸的4200轉IDE機械硬碟和煉獄級的機內保溫設計…不,不是散熱,是保溫,當年夏天沒冷氣可以創造開機即降頻效果,桌面剛跑出來即降至800Mhz…

Anyways…

雖然作為日用主機的體驗不行,那單純作為小小型伺服器問題應該也不大吧?於是在閒逛Youtube時想到了,如果連Rasberry Pi也可以當作虛擬主機(VM)─虛擬伺服器的主機,那東西好歹也是一台有4GB RAM、X86-64的「主機」嘛,要不也試試?

筆者在桌面機上用VM本身就不陌生,當年就在Windows XP上用Virtual Machine裝DOS玩《航空霸業2》和《美少女夢工場2》、後來在家裡的Mac上用Parallels裝XP跑Office(比native在Mac上用Mac版Office順手多了),還有就是舊舊舊公司的Mac上用Virtual Box行Windows 7,在公司用VPN翻牆回家炒股和上馬會網站(馬會還未有App的年代)。

那個年代好像用ESXi作為VM伺服器比較多,但也近七八九年沒有接觸,所以還得研究一下,結果就鎖定了Proxmox VE(簡稱PVE,全寫是Proxmox Virtual Environment)作為虛擬主機的伺服器主系統。

為甚麼是Proxmox VE

選擇Proxmox VE的理由很簡單,先是開源及免費,在英文互聯網和繁簡中文互聯網都有不少高手玩家有用,最新版本是Version 7,所以地雷應該已排得九九十十了。其次,是PVE是基於Debian Linux的,雖然筆者不是全職的系統管理員、開發人員,不過Command line命令列(CLI)上操作Linux還是勉強OK的(在Google加持下,至少知道要搜甚麼,以及千萬不要以root身份跑rm -rf /)。

那就開始下手咯,這個流程應該不單適用於在Rock Pi X上安裝Proxmox VE,應該還適用於所有裝有UEFI、內置eMMC作為主儲存的X86-64主機(也就是不少在淘寶上可以用港幣1,000上下即買到的全新小主機)。

下面的裝機程序是筆者try and error試錯了好幾次才成功的總結。

在X86小主機或單板機上安裝Proxmox VE前的準備

準備材料有──

  • Rock Pi X單板機(或其他類似的eMMC小電腦)
  • 作為Proxmox VE裝機碟的USB手指,容量8GB以上
  • 另外一台電腦──用來製作裝機碟,這裡我用Windows 10的電腦,Mac和Linux都可以
  • 家裡路由器的一個可用的接口和一條夠長的網絡線,因為PVE不建議用Wifi連線管理,而且裝機時也必須先連上網絡
  • Keyboard、Mouse、顯示器、電力…
  • 還有非必要的,另一隻USB手指的「救機碟」,用來預先處理好磁碟分區

製作Proxmox VE裝機碟

先從Proxmox VE官方網站下載PVE的ISO

今次我用Rufus來製作裝機碟,要下載最新版的Rufus,請到官方網站下載,在Windows上執行的exe嘛,還是避免在不知名網站下載比較好。

在Rufus上的操作就是選擇要變成裝機碟的USB手指和裝機碟的ISO映像檔,然後開始──不過,這時就出現了一個對話框,要用戶確認用ISO模式還是DD模式寫入。

在Rufus以ISO製作Proxmox VE開機碟時必需選用DD映像模式寫入。

劃一下重點:用Rufus製作Proxmox VE裝機碟時,絕對必須要用DD模式,千萬不要用ISO模式!

選好了DD模式寫入,稍等一會就完事了。

接下來要是沒有甚麼大問題,裝機的過程操作基本上就不會在這「另一台」電腦上發生了。

如果要在其他如Mac、Linux操作系統上製作PVE裝機碟,可以參考PVE官方Wiki

解除Windows授權和移取原有eMMC上的磁碟分區

因為確認要把Rock Pi X內的Windows「連根拔」,所以事前的事前是把機內東西備份,登出Microsoft賬戶,然後是在Rock Pi X上開機並解除Windows的序號和授權,當然,這一步不是每個人都要的,得視乎自己Windows的授權。

然後筆者就取出先前曾經在蝸牛星際文章出現過的「救機天碟」──裝有「微PE」系統的USB手指開機,用微PE的DiskGenius去把所有eMMC上的磁碟分區全部根除。

重啟電腦,拜拜了痛苦的Windows裝機回憶~

安裝前的BIOS設定

以為這時就可以長驅直進,Next Next Next完事?

別太天真,第一關才開始

在重啟後第一件事,就是向鍵盤發動DEL鍵連打進入BIOS。在BIOS裡面,把UEFI開機的設定設為停用Disable。

Disbale UEFI

要不然就會出現這──

Unable to initialize physical volume /dev/mmcblk0

這是因為第三還是第四次重試安裝時遇上的。最後翻查一下Proxmox的討論區上的帖子找到提示,才知道要先停用UEFI作為開機選項。

化解PVE對eMMC的技術性歧視

解決了BIOS後,重啟,開機,進入第二關:Proxmox VE裝機歡迎介面。

Proxmox VE裝機程式的歡迎頁。熱烈歡迎就真的歡迎?

見到人家熱烈歡迎,已經幫你預選了「Install Proxmox VE」,很想按下去吧?開始首兩次時筆者也是這樣想的。結果又浪費了多少所餘無幾的青春。

世事當然沒有這樣簡單了。

你按下要的是第二個的〈進階選項〉(Advanced Options)

在〈進階選項〉的次選單中,我們要進入的是第一項:Debug mode…捉蟲模式

要裝機,先捉蟲,請進入Debug mode。

在捉蟲Debug模式中,會出現那一大堆開機時的程序指令,很有2000年的所謂Cyber風格。命令元會有兩次停頓,當第一次停頓時,按〔Ctrl+D〕跳過,或輸入exit再拍〔Enter〕也可以。

第一次停頓,如果Shell命令元是/ #,即輸入exit再ENTER或直接Ctrl+D跳過。

在第二次停頓時也得先拍一次〔Enter〕去回復到Shell命令元待輸入的狀態,命令元是[email protected]:/ #,才是我們想要的。

在第二次停頓的shell命令元,開始編輯「proxinstall」安裝腳本。在Proxmox VE的Debug Mode,用戶可選vi或nano編輯器,這裡用筆者常用的nano作例子。

這時,我們就要開始編輯「proxinstall」安裝腳本。用戶可選vi或nano編輯器,這裡用筆者常用的nano作例子(因為學了20年也學不會也不想學VI/VIM)。

nano /usr/bin/proxinstall

這樣就打開了nano編輯器。

在nano編輯器中使用快捷鍵Ctrl+W打去搜索功能去搜索「nvme」。

在nano上,找出「nvme」的字樣,應該可以跳到有關載入儲存硬件(傳統機械硬碟、固態硬碟SSD之類)那個部份。然後開始編輯,加入有關eMMC的內容

找到nvme的部份(圖中的黃框)。此處的作用是,如果PVE安裝腳本發現主系統的開機碟的mount point不是硬碟(包括傳統、固態或nvme)的話就會出現unable to get device for partition ...的警告,並不予安裝(圖中的橙色框)。

然後從這個

} elsif ($dev =~ m|^/dev/[^/]+/hd[a-z]$|) {
 return "${dev}$partnum";
} elsif ($dev =~ m|^/dev/nvme\d+n\d+$|) {
 return "${dev}p$partnum";
} else {
 die "unable to get device for partition $partnum on device $dev\n";
}

修改成這個

} elsif ($dev =~ m|^/dev/[^/]+/hd[a-z]$|) {
 return "${dev}$partnum";
} elsif ($dev =~ m|^/dev/nvme\d+n\d+$|) {
 return "${dev}p$partnum";
} elsif ($dev =~ m|^/dev/mmcblk\d+$|) {
 return "${dev}p$partnum";
} else {
 die "unable to get device for partition $partnum on device $dev\n";
}

然後再〔Ctrl+O〕寫入儲存,最後〔Ctrl+X〕離開nano編輯器,返回命令元。

加入了支援eMMC的部份。

這時,裝機腳本加了有關在eMMC上掛載和安裝PVE的內容,可以離開Debug mode捉蟲模式──輸入exit再拍〔Enter〕或直接〔Ctrl+D〕。

不能在eMMC上安裝PVE這點,是在試錯期間浪費最多時間的部份。一是PVE裝機程式中根本沒有註明,而且裝機程式裡面基本上就沒有任何磁碟分區處理能力,所以第一次盲安裝就出現問題──

Unable to get device for partition 1 on device /dev/mmcblk0

在Google上查找了好幾轉,在一個域名是iBug.io網站上就看到修改PVE安裝腳本的方式

話說,筆者是用英文搜,搜到個英文站的英文文章和解決方案,寫的人卻原來是個內地中科大的研究生出身的大哥,還花了幾十美金一年註冊了.io域名,真夠豪氣!不相信的話去註冊域名的服務商Namecheap看看~

說Proxmox VE歧視eMMC,也得先理解人家的「苦心」。PVE的設計是要穩定和長久的,只能裝在傳統硬碟或固態硬碟SSD而不是穩定性和壽命都遠不如的儲存媒體上,所以預設就不能夠安裝在像消耗品一樣的閃存類產品,如便宜的小主機或單板機常見eMMC或SD記憶卡。

把地雷都排除了,從這裡開始,才進入正常的裝機程序

正常地安裝Proxmox VE系統

開始裝機。

進入PVE的正式安裝程序,先閱讀和同意Proxmox VE的用戶協議。
選擇主系統開機碟,這裡就選Rock Pi X上的64GB容量eMMC。安裝時開機碟會被分割和格式化,預置的格式是Linux通用的EXT4,用戶也可以選擇zfs等其他Linux的主流格式。
和其他系統裝機程序類似,先選地域時區和鍵盤格式,前者會按上網的IP預填;再輸入最高權限系統管理員root的密碼和電郵;最後是主機名字和域名。家中網絡IP由路由器分派,由於是家裡用,所以域名填了「local」。
開始在eMMC上進行硬碟分割和格式化,如果能超越3%進度即可以預期成功。
安裝後會返回shell命令元。

這樣基本上就把PVE裝在Rock Pi X上面,重啟和拔掉裝機碟。

開機後,成功的話,即可以在本機操作(PVE本身就是基本有CLI的Linux嘛),也可以拔掉鍵鼠屏,通過瀏覽器到PVE的Web端管理介面操作。

安裝後從eMMC開機的選單。
Proxmox VE本機的CLI登入。

PVE的Web端管理介面網址是https://{PVE_IP}:8006,在第一次登入時使用上Root的密碼,所以絕不建議把在路由器上把8006這個port(通訊埠端口)開放公網並且把通訊埠端口轉發(port forward)到PVE伺服器上(這樣做絕對是找死)。

安裝無線網卡驅動

這時Rock Pi X只能依靠有線網絡連網,無線網絡在Linux上是「可用的」,但要人手操作安裝無線網卡驅動。

先到Radax網站找到Linux版Wifi驅動的下載連結。

如果是在另一台電腦上,可以在登入Web端管理介面,點下【local(PVE)】,在中間導航上有【Shell】,點擊後即可用瀏覽器使用shell命令列。要是繼續使用本身的話,就得人手輸入下載連結的網址。

在命令元輸入要下載工具wget去下載驅動:

wget https://dl.radxa.com/rockpix/drivers/firmware/AP6255_BT_WIFI_Firmware.zip

這時下載回來的驅動放在root的資料夾,格式是zip。

筆者比較懶,所以另外直接安裝了unzip去解壓(預設的PVE竟然沒有裝…)

apt install unzip

安裝過程Unzip很快,不過新裝Linux後第一次跑Apt套件安裝可能要花一點時間去更新。裝完後,就跑unzip去解壓。

unzip -r AP6255_BT_WIFI_Firmware.zip

然後,得先進入解壓後的驅動包資料夾,裡面的裡面有 btwifi兩個資料夾,安裝方法無線網卡驅動的方法是把「正確的」驅動檔從wifi資料夾抄到Linux系統資料夾/lib/firmware/brcm裡面。

問題是「正確的」驅動檔是重點…因為天才一樣的RADAX (Rock Pi X廠商)不知那個天才把其中一個檔案改成了個古古怪怪的名字,而因為檔案名改了驅動就載入不了。(而且兩年前在官方討論區被人指出後,至2022年的今天還沒有更正!也沒有文檔!)

先把brcmfmac43455-sdio.ROCK Pi-ROCK Pi X.txt改成正確的檔案名brcmfmac43455-sdio.txt。再連同另一個brcmfmac43455c0-sdio.bin檔案抄寫到/lib/firmware/brcm

假設已經在驅動檔案的同一層wifi目錄:

cp ./brcmfmac43455c0-sdio.bin /lib/firmware/brcm/
cp ./brcmfmac43455-sdio.ROCK Pi-ROCK Pi X.txt /lib/firmware/brcm/brcmfmac43455-sdio.txt

重啟後驅動就安裝上了──但要連線和使用到這無線網卡的話,就得有另外其他操作,本篇就不詳述了。

同樣地,要把藍芽驅動都裝上,也是把bt資料夾裡面的BCM4345C0.hcd複製到系統資料夾/lib/firmware/brcm裡面。同樣假設現時在藍芽驅動bt的目錄內:

cp ./BCM4345C0.hcd /lib/firmware/brcm/

這適用於筆者的Rock Pi X v1.4硬件,新版本的話,可能操作又不一樣,要自求多福了。

其他雜項

安裝時,務必記下PVE主機的主IP,而且為免日後出現家裡網絡IP新重分派的問題,可以在路由器上把IP設為靜態不變,其實家裡有NAS也推薦這樣操作。

另外,iBug大哥在blog裡還提示,如果想eMMC壽命長一點,最好是把PVE的Linux系統上用硬碟(這裡就指eMMC)的SWAP交換空間解除。於是又在另一個Blog上找到方法,「編輯系統內核運行參數配置」──書面語好煩吧?… 港式IT風格粵語謂之:「改config」(12個音節vs三個音節)。

nano /etc/sysctl.conf

vm.swappiness設定為0。系統預設值是60,數值從0至100,0基本上是停用SWAP,100則是要系統盡量多用SWAP交換空間。

vm.swappiness=0

這裡直接把SWAP交換停用,一了百了。

最後如果真的打算把Rock Pi X當成伺服器並長時點亮的話,機體的熱力和擺放的位置也要考慮。Rock Pi X本身沒有散熱器,官方散熱器也沒有帶風扇,放置的地方是否有空氣流通、有效散去熱力也是要考慮的。

這點即使是其他無風扇甚至有風扇的主機其實也得注意。

這樣把閒在家裡的玩具的折騰,好玩是好玩,但來真的、用有eMMC的電腦當成PVE服務器的話,筆會也不會再考慮Radax出品的ZERO售後、驅動食自己Rock Pi系列…