MincraftのJava版/統合版のマルチプレイ用のサーバーをDocker/RaspberryPi4Bで起動する

Windows10HomeエディションでDockerが使えるようになったこともあり、Minecraftのサーバーが組めないかなと思いました。 残念ながらオッサンのワタシにはMinecraftを一緒にやるような友達はいませんが、どこかにお邪魔したときにLANで操作をレクチャーをすることもあるかなという感じでしょうか。今回サーバーを構築するのは主にJava版の方になります。BE版(以降、統合版)のサーバーとは方法が異なるので注意です(念のため統合版のサーバーも立ち上げています)

今回は3つの方法で構築しています。

  1. DockerでMincraft(Java版)サーバーを構築する(DockerのホストはWSL2を有効化したWindows10になります)
  2. RaspberryPiでMincraftサーバーを構築する(メモリ容量がわりと厳しいのでRaspberryPi 4Bを使用します)
  3. DockerでMincraft(統合版)サーバーを構築する(DockerのホストはWSL2を有効化したWindows10になります)

DockerでMincraft(Java版)サーバーを構築する

Mincraftを起動しているPCでDockerのコンテナを起動してもサーバーへ接続できないようです。なんとなくできそうな気もするのですが、何度か設定を変更して試してみましたが、違う方法が必要なのかもしれません。今回は別PCでサーバーを起動して実験を行っていますのでご注意ください。

コンテナの起動

まずはDockerでUbuntuベースのコンテナを作成します。作成するコンテナ名はmc_serverとします。 また、今回のコンテナはサーバーとなるのでMincraftサーバーのポート25565をホスト側と共有するようにポートフォワーディングのオプションをつけて作成を行います。 ホスト側のPCのポート番号にアクセスすると、コンテナ側のポートにフォワードされて通信ができるようになります。ポートの値はJava版(25565)と統合版(19132)では異なるので注意です。

以下のコマンドでコンテナを起動します。

ホスト側(Windows側)の操作

PS> docker run -it -p 25565:25565 --name mc_server ubuntu

インストールの事前設定とパッケージのインストール

コンテナが起動するとbashがrootユーザーとして起動します。事前設定と必要になるパッケージのインストールを行っていきます。 サーバーにはJavaが必要になるのでOpenJDKをインストールしますが、現在、Ubuntuで使用できる一番新しいopenjdk-14-jdkを使用します。 開発を行うってわけでもないのでJREをインストールしても大丈夫のような気もします。

コンテナ側の操作

# cd ~
# apt update ; apt upgrade -y
# apt install -y openjdk-14-jdk

OpenJDKのインストールを行うと、途中で以下のような表示が行われて入力待機状態になります。後ほどタイムゾーン設定を行うので、このような質問が行われています。

Please select the geographic area in which you live. Subsequent configuration questions will narrow this down by
presenting a list of cities, representing the time zones in which they are located.

  1. Africa   3. Antarctica  5. Arctic  7. Atlantic  9. Indian    11. SystemV  13. Etc
  2. America  4. Australia   6. Asia    8. Europe    10. Pacific  12. US
Geographic area:

ここで、キーボードから6を入力してのAsiaを選択します。すると、続けて都市名の選択になります。

Please select the city or region corresponding to your time zone.

  1. Aden      16. Brunei       31. Hong_Kong    46. Kuala_Lumpur  61. Pyongyang      76. Tehran
  2. Almaty    17. Chita        32. Hovd         47. Kuching       62. Qatar          77. Tel_Aviv
  3. Amman     18. Choibalsan   33. Irkutsk      48. Kuwait        63. Qostanay       78. Thimphu
  4. Anadyr    19. Chongqing    34. Istanbul     49. Macau         64. Qyzylorda      79. Tokyo
  5. Aqtau     20. Colombo      35. Jakarta      50. Magadan       65. Rangoon        80. Tomsk
  6. Aqtobe    21. Damascus     36. Jayapura     51. Makassar      66. Riyadh         81. Ujung_Pandang
  7. Ashgabat  22. Dhaka        37. Jerusalem    52. Manila        67. Sakhalin       82. Ulaanbaatar
  8. Atyrau    23. Dili         38. Kabul        53. Muscat        68. Samarkand      83. Urumqi
  9. Baghdad   24. Dubai        39. Kamchatka    54. Nicosia       69. Seoul          84. Ust-Nera
  10. Bahrain  25. Dushanbe     40. Karachi      55. Novokuznetsk  70. Shanghai       85. Vientiane
  11. Baku     26. Famagusta    41. Kashgar      56. Novosibirsk   71. Singapore      86. Vladivostok
  12. Bangkok  27. Gaza         42. Kathmandu    57. Omsk          72. Srednekolymsk  87. Yakutsk
  13. Barnaul  28. Harbin       43. Khandyga     58. Oral          73. Taipei         88. Yangon
  14. Beirut   29. Hebron       44. Kolkata      59. Phnom_Penh    74. Tashkent       89. Yekaterinburg
  15. Bishkek  30. Ho_Chi_Minh  45. Krasnoyarsk  60. Pontianak     75. Tbilisi        90. Yerevan

ここではキーボードから79を入力してTokyoを選択します。

入力が終わって処理が完了すれば無事にインストールができていると思います。あとインストールに必要なものとしてwgetがあるのでそちらもインストールしておきます。 わりとDockerのコンテナは最小限のものしかインストールされていないので、pingなどのネットワーク系のコマンドも入っていませんので、必要になったらインストールを行っていくしかない状況です。 wget以外も編集に必要かなと思いましたのでvimを入れておきました。

# apt install -y wget vim

ここまでで、インストールに必要な準備ができました。続いてはMincraftサーバーのjarファイルを取得します。インストールディレクトリはrootユーザーのホームディレクトリの下に minecraftというディレクトリを作成して使用します。

また最新版のサーバーアプリは以下からダウンロードできます。作業したとき(2020.06.28現在)はminecraft_server.1.16.1.jarとなっていました。取得のページにあるサーバーのバージョン部分を右クリックして、リンクをコピーをしてクリップボードにコピーしておきます。

www.minecraft.net

f:id:ueponx:20200628212819p:plain

もし、過去のバージョンのサーバーアプリが必要な場合には以下から取得を行ってください。

mcversions.net

# cd
# mkdir minecraft
# cd minecraft/
# wget https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar

これで事前設定とインストールは終わりました。

Mincraftサーバの初期設定と実行

Mincraftの初期設定といってもそこまで複雑ではありません。設定ファイルの作成を行い、内容の編集を行うだけで設定は完了になります。 最初に設定ファイルの作成を行います。Mincraftサーバーのjarファイルを実行すると設定ファイルの雛形は生成されます。 以下の様に実行します。

# java -jar server.jar nogui

実行を行うと以下のようなログが表示されてプログラムが終了します。

[main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

実行とともに生成されたeula.txtのライセンス許諾のeula値をtrue(許諾)と変更することでサーバーの動作できるようになります。 ライセンスに関しては一度見ておくほうがいいかなと思います。

# vim eula.txt

eula.txt編集前

#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Wed Jun 24 23:41:14 JST 2020
eula=false

eula.txt編集後

#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#Wed Jun 24 23:41:14 JST 2020
eula=true

編集が終わったら再度サーバを実行します。今回は先程と違ってJavaVMが使用するメモリを増やすオプションを追加しています (※2回目以降の以降の実行はcd ~/minecrft ; java -Xmx1024M -Xms1024M -jar server.jar noguiで行えます

# java -Xmx1024M -Xms1024M -jar server.jar nogui

ここからはかなり時間がかかりますのでしばらく待ちます。

実行ログで以下の表示が出れば、起動に成功しています。

 [Server thread/INFO]: Done (43.135s)! For help, type "help"

これでサーバープロセスが実行できました。

Minecraftからの接続

後は、Mincraftのゲームを立ち上げ、サーバーにアクセスを行っていきます。ゲームを起動すると以下のような画面が表示されるので 【マルチプレイ】のボタンをクリックします。

f:id:ueponx:20200625172956p:plain

画面が変わると自動的にLAN内にあるサーバーを探しにいくようなのですが、時間が経過してもなかなかサーバーを見つけられなかったので【ダイレクト接続】のボタンをクリックして サーバーのIPアドレスを手動で入力していきます。

f:id:ueponx:20200625173001p:plain

ダイレクト接続の画面でサーバーのIPアドレスを入力したら【サーバーに接続】ボタンをクリックします。IPアドレスはDockerを動作させているPCのIPアドレスになります。Docker側で ポートフォワードされているので、デフォルトのポート番号の設定で大丈夫です。

f:id:ueponx:20200625173004p:plain

設定がうまくいっているようであれば、無事にワールドに入ることができるようになります。ウインドウのバーにもサードパーティ製のサーバーという表記がされているので、 接続が成功していることがわかります。

f:id:ueponx:20200625173009p:plain

これで、うまく接続できました。

RaspberryPi 4BでMincraftサーバを構築する

先程まではDockerのコンテナでMincraftサーバーを構築しましたが、ほぼ同様の手順でRaspberryPiでサーバーを構築できます。大きな違いはユーザーが一般ユーザー(pi)でのインストールになるので sudoコマンドが必要になるということでしょうか。

基本的には同じことを行うので手順は割愛します。

RaspberryPi 4Bでの操作

$ sudo apt update ; sudo apt upgrade
$ sudo raspi-config  # タイムゾーンなどの設定
$ apt search openjdk- #使用可能なopenjdkのバージョンを確認
$ sudo apt install -y openjdk-11-jdk  # openjdk(java)のインストール
$ mkdir minecraft
$ cd minecraft/
$ wget https://launcher.mojang.com/v1/objects/a412fd69db1f81db3f511c1463fd304675244077/server.jar #サーバープログラムの取得
$ java -jar server.jar nogui #初回のサーバーの起動
$ vi eula.txt  # ファイル内のeulaの値をtrueへ変更する
$ java -Xmx1024M -Xms1024M -jar server.jar nogui #サーバーの起動

これでOKです。

Docer環境との違いとしてはRaspberry Pi OSで使用できるJavaの環境はopenjdk-11-jdkとなるようなので、少しバージョンが下がりますが、 動作には大きく影響しません。また、eula.txtの設定後の起動に使用メモリを指定していますが、RaspberryPi 4Bの2GBモデル以上出ない場合には、この指定はできません。もし、それ以下のメモリ量のRaspberryPiを使用する場合にはメモリオプションを消し、java -jar server.jar noguiとすれば起動できます。

設定後、先程と同様にMincraftのJava版から接続することでワールドにログインすることができるようになります。 RaspberryPiのスペックにもよるかもしれませんが、Dockerベースのサーバーよりは少し遅い印象なので、接続数を気にしたり、描画深度を変えたりするほうがいいかなと思いました。

DockerでMincraft(統合版)サーバーを構築する

これまではJava版のサーバでしたが、ここからは統合版のサーバ設定になります。 サーバープログラムは以下からダウンロードできるようになっています。WindowsUbuntuが用意されています。ちなみにRaspberryPiではこのサーバープログラムは動作しません。

www.minecraft.net

設定方法が書かれていませんが以下の手順で動作しました。

コンテナの起動

今回は統合版なのでコンテナ名をbe_serverサーバとしました。統合版のサーバーはudp接続を使用するのでDockerのコンテナ作成時も-pオプションにポート番号だけでなくudpの指定も行う必要があるので注意が必要です。udpの指定をしないと接続ができませんでした。

ホスト側(Windows側)の操作

PS> docker run -it -p 19132:19132/udp  --name be_server ubuntu

コンテナの作成が終わったら事前準備、インストール(取得)、起動と進めます。

事前準備、インストール、サーバーの起動

事前準備は以下のようになります。Java版との違いはサーバーの起動に必要なlibcurl4のSharedObject(.soファイル)とZipファイルの展開用コマンドになります。 多分、非コンテナのUbuntuなどのディストリビューションをサーバーにする場合にはこれらは事前にインストールされているので作業は不要かと思います。

あとはサーバーを置くディレクトリの作成を行っています。

コンテナ側の操作

# cd ~
# apt update ; apt upgrade -y
# apt install -y wget libcurl4 libcurl4-openssl-dev unzip zip
# mkdir minecraft
# cd minecraft/

つづいてはサーバーソフトの取得とインストール。インストールといっても、取得したアプリがzip形式になっているので、それを展開するだけです。

コンテナ側の操作

# wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.16.0.2.zip
# unzip bedrock-server-1.16.0.2.zip

あとは起動になります。起動時にカレントパスをライブラリのロードパスとして追加しておいて実行となります。

コンテナ側の操作

# LD_LIBRARY_PATH=. ./bedrock_server

エラーがでなければ、これで実行状態となっています。基本的にはこちらのほうが実行するまでの手順は少ないです。 Mincraftからサーバーへの接続を行っていくことになります。

Mincraft(統合版)からの接続

統合版からの接続は簡単です。Mincraftの統合版を起動して【遊ぶ】ボタンをクリックします。

f:id:ueponx:20200628204028p:plain

続いて上のほうにある、【サーバー】タブをクリックします。

f:id:ueponx:20200628204106p:plain

接続できるサーバーの一覧が出てきますが、ここでスクロールを行って【サーバーを追加】ボタンをクリックします。

f:id:ueponx:20200628204526p:plain

すると外部サーバーの追加ダイアログが表示されます。このダイアログのサーバー名とサーバーアドレスのフィールドに今回起動したサーバーの情報を入力します。

f:id:ueponx:20200628204532p:plain

サーバー名はどんな名前でも良いのですが、今回はわかりやすくBE_Serverという名前にしてみました。また、サーバーアドレスはサーバーを起動したPCのIPアドレスを入力しています。ipconfigコマンドで調べたところ、192.168.0.17となっていたので、これを入力しました。 ポートに関しては変更はないので、変更はしません(デフォルト値19132のまま)。 入力が完了したら、【遊ぶ】ボタンをクリックします。

f:id:ueponx:20200628204538p:plain

すると、サーバーへ接続が行われて…

f:id:ueponx:20200628204544p:plain

ワールドに入ることができました。

f:id:ueponx:20200628204551p:plain

これで統合版のサーバーの起動もできるようになりました。

おわりに

これで、Java版統合版ともにWindows10(Home)でサーバーを構築し、接続を行うことができるようになりました。簡単な集まりや、家族内であればこれでマルチプレイを楽しむことができそうです。本格的に行うのであれば、レンタルサーバVPCAWS/GCP/IBMCloudなどのクラウド環境)を借りてサーバーを構築することもできます。VPCなどでは作業はほぼ同じ感じですが、セキュリティの作業はもう少しちゃんとやったほうがいいと思います。また、有料ではありますが、公式のRealms(レルム、レルムス)のサービスをつかってマルチプレイを行うこともできると思います。同時に入れる人数によって価格が違うようですが、みんなで大掛かりな建築物を作るようであれば、こちらを使ったほうがいいかなと思いました(Mincraftのバージョンアップにも対応してくれます)。

Windows10Homeエディションで使えるようになったWSL2&Dockerを使ってサーバーの構築をしてみたのですが、最後に少しネット環境を探してみたところDockerHubにMincraft用のコンテナがありました。それもJava版統合版ともに同じ作者の方が作っています。また、私が設定したのとは異なり、UbuntuをベースにしておらずDockerではお馴染みの軽量なAlpine Linuxを使用していました。その情報があれば、もっと楽に構築できたかなと思います…構築の簡易ドキュメントもちゃんとあります。

Java版のサーバーコンテナ ↓

hub.docker.com

統合版のサーバーコンテナ ↓

hub.docker.com

今回の感想としてはLAN環境でマルチプレイをするというのであれば、Windows10を仮想環境のホストとして使わなくても、古いPCにUbuntuなどのLinuxをインストールしてサーバー化するほうが作業も楽だし、便利かなと思います。予想になりますが、その場合であれば、初代のCore i5あたりメモリが4GB程度あれば、サーバーとしてはこなせるのではないかと思います。

なにはともあれ、Minecraftマルチプレイ用サーバーの構築ができたので良かったとしておきます。

参考

uepon.hatenadiary.com

【RaspberryPi】Dockerを使用してRaspberryPiのカーネルをクロスコンパイルする

前回のエントリーではWindows10 HomeエディションDocker Desktopをインストールしました。そこで、このDockerを使用して、RaspberryPiのカーネルのクロスコンパイルを行ってみたいと思います。これまではVirtualBoxなどをインストールして環境を整えましたが、Dockerが使えればこれまでよりも軽量サイズに環境設定を整えることができます。

今回はRaspberryPi 4Bとコンテナ側はUbuntuを使用しています。

参考

uepon.hatenadiary.com

公式のカーネルコンパイルの情報

www.raspberrypi.org

続きを読む

(朗報)これまでWindows10 Homeでは動作できなかったDocker DesktopをWSL2機能で動作させる

いろいろとRaspberryPiを触っていて、たまたまカーネルコンパイルを行うためのクロスコンパイル環境をUbuntuで作成しようと思ったのですが、 Windows10 HomeエディションではDocker Desktopが使用できないといった制限がありました。そのため、環境構築にはVirtual Boxなどが必要になり、 かつインストール後にOSインストールも必要になるので、ちょっと面倒だなと思っていました。

最近、使用できるようになったWSL2(Windows Subsystem for Linux Version 2)を使えばHomeエディションでもDocker Desktopが使えるようになったようです。

※仮想化機能が使えないPCではWindows Homeエディションでも使用できないので注意です。BIOSやタスクマネージャーなどで確認しましょう。

f:id:ueponx:20200614195916p:plain


今回の設定でDockerの設定を行い、これをベースにクロスコンパイル環境を作ってみようと思います。

以下を参照させていただきましたありがとうございました。

docs.microsoft.com

dorasu-tech.dorasu.com

qiita.com

続きを読む

【RaspberryPi】PX-S1UDを使用する

家の掃除をしていたら以下のデバイスが見つかりました。以前、使えるかなと思って購入したのですが、あまり結局のところ必要性がなかったので放置していました。 使用していないRaspberryPi 3Bがあるので、改めて設定を試してみることにしました。

f:id:ueponx:20200609013840p:plain

PLEX USB接続ドングル型地上デジタルTVチューナー PX-S1UD V2.0(以下チューナーユニット)

www.plex-net.co.jp

SCM ICカードリーダー/ライター B-CAS住基カード対応 SCR3310(以下カードリーダー)

www.ntt.com

続きを読む

Windows10のプロジェクションの設定機能を使って、もう一台のPCをサブディスプレイ化

在宅勤務をするために会社のPCを家に持ってきて作業をしているのですが画面が狭い! 携帯性を重視したPCということで採用されたようなので、HDMIコネクタがなくその代わりにUSB Type-Cコネクタ変換するという思想らしい。

自宅には、HDMI-USB Type-C変換のケーブルはもっていないので、画面の拡張もうまくいきません。Android端末をサブディスプレイ化するアプリをインストールするということもポリシー上できない状況なので、どうしようもない状況。

それでもなんとかできないかと思っていたら、Windows10のPCを二台使用することで一台をサブディスプレイ化することが標準機能で可能になっていました。二台のPCを使用するので電気代はかかってしまいますが、サブディスプレイで資料表示を行って効率を上げるといったことも可能になります。

そんな設定を行う場合に古い設定の情報もあり設定にこまる事があったので情報をしてメモしておきます。

続きを読む
/* -----codeの行番号----- */