Minecraft Bedrock Dedicted Server是Mojang推出的基岩版開伺服器程式,適合用於原味生存。雖然支援Windows 10和Ubuntu,但官方只有提供x86-64位元版本。
要在手機ARM平台執行BDS也不是不可能,透過QEMU虛擬機運行Docker,再port forwarding就行。
註解: 手機上執行開服軟體,簡單程度PocketMine > Nukkit > BDS。因為PocketMine有很多人做手機版APP,而Nukkit只要有Java就行。
測試版本: Minecraft 1.18
測試平台: Sony Xperia 5 II,Android 11 (s865, 8GB RAM)
1. 建立虛擬機&安裝Docker#
- 開啟Termux (建議安裝 F-droid版本的),輸入指令:
pkg install qemu-utils qemu-common qemu-system-x86_64-headless
- 下載內含virt的Alpine Linux
mkdir alpine && cd $_
wget http://dl-cdn.alpinelinux.org/alpine/v3.12/releases/x86_64/alpine-virt-3.12.3-x86_64.iso
- 建立8G的虛擬硬碟
qemu-img create -f qcow2 alpine.img 8G
- 開機
qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64
-drive if=pflash,format=raw,read-only,file=$PREFIX/share/qemu/edk2-x86_64-code.fd
-netdev user,id=n1,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1
-cdrom alpine-virt-3.12.3-x86_64.iso
-nographic alpine.img
- 使用
root
帳號登入,啟用網路卡。
setup-interfaces
#Available interfaces are: eth0.
#Enter '?' for help on bridges, bonding and vlans.
#Which one do you want to initialize? (or '?' or 'done') [eth0]
#Ip address for eth0? (or 'dhcp', 'none', '?') [dhcp]
#Do you want to do any manual network configuration? [no]
ifup eth0
- 使用offfnikj準備好的answerfile安裝系統
wget https://gist.githubusercontent.com/oofnikj/e79aef095cd08756f7f26ed244355d62/raw/answerfile
- 讓開機時能輸出訊息
sed -i -E 's/(local kernel_opts)=.*/1="console=ttyS0"/' /sbin/setup-disk
- 安裝系統至硬碟,期間會要求建立root帳號的密碼。
setup-alpine -f answerfile
- 使用
poweroff
指令關機,以後就用另一個指令啟動系統(可將這條指令自行寫成shell):
qemu-system-x86_64 -machine q35 -m 4096 -smp cpus=4 -cpu qemu64
-drive if=pflash,format=raw,read-only,file=$PREFIX/share/qemu/edk2-x86_64-code.fd
-netdev user,id=n1,hostfwd=tcp::2222-:22,hostfwd=udp::19132-:19132 -device virtio-net,netdev=n1
-nographic alpine.img
#m是分配4096MB記憶體,cpu是4核CPU,hostfwd則是把外部19132通訊埠轉發到虛擬機19132通訊埠。
- 安裝docker,並設定開機自動啟動。
apk update && apk add docker
service docker start
rc-update add docker
2. 下載Minecraft BDS伺服器#
- 開機,登入
root
帳號,建立一個minecraft-server
的目錄用來存放遊戲資料。
mkdir minecraft-server
- 使用itzg提供的docker映像檔,會花點時間下載資料。
docker run -d -it -e EULA=TRUE -p 19132:19132/udp -v /root/minecraft-server:/data itzg/minecraft-bedrock-server
- 只要有連線進來,docker容器內的資料就會儲存到
minecraft-server
這個目錄。如果要在虛擬機開機時就執行docker容器,可以再加上--restart always
參數。
3. 連線測試#
- 以LAN區域連線為例,Termux輸入指令取得手機IP(不是在虛擬機內,另外開一個session):
ifconfig
#顯示的IP應該是192.168.x開頭
同一個網路的基岩版,會在好友的介面看到開啟的伺服器。
或是從伺服器輸入Termux的IP,端口19132,然後連線。
4. 總結#
效能應該是很多人關注的部分,經過這麼多層虛擬,連線品質當然大打折扣。
從外部連線到生成一個新世界超過1分鐘,所以使用超平坦比較妥當,例如:
docker run -d -it --name bds-flat-creative
-e EULA=TRUE -e LEVEL_TYPE=flat -e GAMEMODE=creative
-p 19132:19132/udp -v /root/minecraft-server:/data itzg/minecraft-bedrock-server
如果跳過系統虛擬化這一層,那docker效能應該會大大提升。
成功開伺服器後,換地圖、裝模組的其他設定請參考:
Minecraft基岩版BDS伺服器架設教學 & 通訊埠轉發
可以用scp上傳檔案到QEMU虛擬機內。