背景・目的
自作サーバ仮想化で、収支計算、開発環境を構築してきましたが、新たな機能を追加したいと思うようになりました。
また、妻がMinecraftに最近興味を示し始めたことで、ゲームが出来たらストレス解消になるのではと思いました。
そこで、Minecraftのオープンソース版(?)であるminetest game(以降minetestと記載)の構築をしようと思います。
Minecraftはmicrosoftアカウントと製品購入が必須です。
これまでの活動として無料利用というコンセプトは崩したくないため、OSS版がないかを調べたところ、Github上にminetestというサンドボックスゲームが使えるということがわかりました。
Minetest専用クライアントをインストールし、サーバ上にMinetestをインストールすれば使えそうです。
今回、自分好みにカスタマイズできるminetest環境を構築することにしました。
ただし、セキュリティ脆弱性は十分考慮の上利用するよう注意が必要のため、脆弱性情報(CVE)も事前確認しながら進める必要があります。
前提
-
docker-composeで構築します。
低スペックで、シングルプレイで利用するならゲーミングPCを使わなくても良いため、仮想サーバを搭載したノートPC上で稼働させることを前提とします。 -
アーキテクチャは下記とします。
- Minetestクライアント→SSHポートフォワーディング→Minetestコンテナ
- ゲーム中断・再開ができるよう、データはVirtual Machine上の仮想ディスク(/var領域)に保管
実施内容
- minetestのクライアントツールのインストール
以下のサイトでダウンロードが可能ですので、ダウンロードし、zipファイルを任意フォルダに展開します。
ダウンロード時の注意点として、5.6.0未満は
情報を取得される、情報を改ざんされる、およびサービス運用妨害 (DoS) 状態にされる可能性があるという記載がCVEで公開されているため、
最新版5.8.0をダウンロードしています。
https://qiita.com/kolinz/items/ef7a22a73def7f860758
→minetestのクライアントインストール。
Github上のdocker imageをpullする
- 参考
[root@t_kyn040 minecraftcompose]# docker pull lscr.io/linuxserver/minetest:5.8.0-ls139
5.8.0-ls139: Pulling from linuxserver/minetest
7d799789a204: Pulling fs layer
2298c655b51e: Pulling fs layer
037ea017dcd2: Pulling fs layer
d63427398e66: Pulling fs layer
5bc242145922: Pulling fs layer
36a2b6ebeb4c: Pulling fs layer
74a25c9f8e57: Pulling fs layer
5bc242145922: Waiting
36a2b6ebeb4c: Waiting
74a25c9f8e57: Waiting
d63427398e66: Waiting
~~~長いので省略~~~
74a25c9f8e57: Pull complete Digest: sha256:3ee96cb1949f77779d2fc322053b353796fa512042aea607a416f9f3ef865c34
Status: Downloaded newer image for lscr.io/linuxserver/minetest:5.8.0-ls139
lscr.io/linuxserver/minetest:5.8.0-ls139
[root@t_kyn040 minecraftcompose]#
minetestのdockerコンテナを作成
- ポートは必要に応じてカスタマイズ(今回はデフォルト)
- ほかに操作許可する設定は好みに合わせて変更する。
[root@t_kyn040 minecraftcompose]# cat docker-compose.yml
version: '3.3'
services:
minetest:
image: lscr.io/linuxserver/minetest:5.8.0-ls139
container_name: minetest
environment:
- PUID=<ユーザ秘密!>
- PGID=<グループ秘密!>
- TZ=Etc/UTC
- "CLI_ARGS=--gameid minetest_game --port 30000"
volumes:
- /var/mc_data/config:/config/.minetest
ports:
- 30000:30000/udp
restart: unless-stopped
[root@t_kyn040 minecraftcompose]#
-
ゲームはdevtestで簡素なものしかないので、minetestのgamesを入れるとよいでしょう。
https://github.com/minetest/minetest_game -
コンテナを作成する
dockerComposeで起動します。
docker-compose up -d
サーバのSSHポートフォワーディングをします。
-
teratermかSSHコマンドで行います。今回はTeratermから
ログイン後
コンテナを停止・起動する
コンテナを中断したい場合、下記コマンドで停止します。
docker stop <コンテナID>
docker stop minetest
データは保存されるので、再び起動すると停止した際にいた場所から再開します
docker start <コンテナID>
docker start minetest
あとがき
構築はできましたが、課題がたくさん出てきました。
-
妻レビュー
ゲームをプレイしたものの、結局すぐ中断…- 「こんなのできるんだ!すごい!」という第一印象
- しかし、10分だけプレイしてくれてからはPCのキーボード操作なのでやりづらい
- 構築した私がゲームに夢中な姿を見て、廃人になるからもうやめてと悲しいコメント
-
キャラクターやネザーゲートがない
キャラクターやネザーゲートの追加はmobs追加が必要…- 動物
- 村人
- ゾンビ、クリーパーなどのモンスター
- ネザーゲート
-
イメージやコンテナの状態をバックアップする運用がほしいです。
運用イメージは下記の通り- イメージの保存、ロード
- docker save | gzip > XXXXXXXX.tar.gz
- docker load < XXXXXXXX.tar.gz
- コンテナ状態のエクスポート、インポート
- docker export <コンテナID> > XXXXXXXX.tar
- docker import <コンテナID> < XXXXXXXX.tar
- イメージの保存、ロード
-
CVEを調べていくのは時間がかかるため、脆弱性診断ツールが必要
- Trivyでコンテナイメージに対する脆弱性診断が可能
- https://engineering.nifty.co.jp/blog/14208
-
上記の改善や、性能測定も今後時間に余裕ができれば確認しようと思います。
謝辞
Minetest構築を進めるにあたって、本記事が参考になりました。感謝申し上げます。