【實驗性】手機開Minecraft基岩版BDS伺服器



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

2. 下載Minecraft BDS伺服器

3. 連線測試

4. 總結

5. 參考資料

## 建立虛擬機&安裝Docker

1. 開啟Termux (建議安裝[F-droid](https://f-droid.org/en/packages/com.termux/)版本的),輸入指令:

```bash
pkg install qemu-utils qemu-common qemu-system-x86_64-headless
```

2. 下載內含virt的Alpine Linux

```bash
mkdir alpine && cd $_
wget http://dl-cdn.alpinelinux.org/alpine/v3.12/releases/x86_64/alpine-virt-3.12.3-x86_64.iso
```

3. 建立8G的虛擬硬碟

```bash
qemu-img create -f qcow2 alpine.img 8G
```

4. 開機

```bash
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
```

5. 使用`root`帳號登入,啟用網路卡。

```bash
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
```

6. 使用offfnikj準備好的answerfile安裝系統

```bash
wget https://gist.githubusercontent.com/oofnikj/e79aef095cd08756f7f26ed244355d62/raw/answerfile
```

7. 讓開機時能輸出訊息

```bash
sed -i -E 's/(local kernel_opts)=.*/\1="console=ttyS0"/' /sbin/setup-disk
```

8. 安裝系統至硬碟,期間會要求建立root帳號的密碼。

```bash
setup-alpine -f answerfile
```

9. 使用`poweroff`指令關機,以後就用另一個指令啟動系統(可將這條指令自行寫成shell):

```bash
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通訊埠。
```

10. 安裝docker,並設定開機自動啟動。

```bash
apk update && apk add docker
service docker start
rc-update add docker
```

## 下載Minecraft BDS伺服器
1. 開機,登入`root`帳號,建立一個`minecraft-server`的目錄用來存放遊戲資料。
```bash
mkdir minecraft-server
```

2. 使用itzg提供的docker映像檔,會花點時間下載資料。
```bash
docker run -d -it -e EULA=TRUE -p 19132:19132/udp -v /root/minecraft-server:/data itzg/minecraft-bedrock-server
```

3. 只要有連線進來,docker容器內的資料就會儲存到`minecraft-server`這個目錄。如果要在虛擬機開機時就執行docker容器,可以再加上`--restart always`參數。

## 連線測試

1. 以LAN區域連線為例,Termux輸入指令取得手機IP(不是在虛擬機內,另外開一個session):

```bash
ifconfig
#顯示的IP應該是192.168.x開頭
```

2. 同一個網路的基岩版,會在好友的介面看到開啟的伺服器。
![](https://i.postimg.cc/B668hLcc/Screenshot-20211219-104215.png)

3. 或是從伺服器輸入Termux的IP,端口19132,然後連線。
![](https://i.postimg.cc/J7sDZXhR/0616CDBC-6541-40DD-B7A7-3B08CBB5912D.png)

## 總結

效能應該是很多人關注的部分,經過這麼多層虛擬,連線品質當然大打折扣。

從外部連線到生成一個新世界超過1分鐘,所以使用超平坦比較妥當,例如:

```bash
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伺服器架設教學 & 通訊埠轉發](https://www.mcbedev.net/2021/07/minecraft_82.html)

可以用scp上傳檔案到QEMU虛擬機內。

## 參考資料

- [Docker on Termux in a VM](https://gist.github.com/oofnikj/e79aef095cd08756f7f26ed244355d62)

- [itzg/minecraft-bedrock-server](https://hub.docker.com/r/itzg/minecraft-bedrock-server)

留言

此網誌的熱門文章

Minecraft基岩版多人連線教學: 方法一覽

【詳細解說】什麼是Minecraft基岩版,跟Java版有什麼差?

Minecraft基岩版安裝模組(Add-On)&資源包&光影教學