ラズパイでマインクラフトサーバを立ててみる(家庭内LANで公式サーバを動かすまで)~バージョン1.18.1,JAVA 17

はじめに

ラズパイで遊んでみたいな~と思ってた矢先,息子からマイクラ一緒にやろうというお誘いがありました.それではと,ラズパイでサーバーを立ててみることにしました.

意外と簡単にできたので,その備忘録です.

OSのインストール

ラズパイですが,勢いでRaspberry Pi 4 Model Bのメモリ8Gバージョンを買ってしまいました.OSはRaspberry Pi OSを入れるのが色々と簡単かなと思っていたのですが,Raspberry Pi OSは32bit版になるので,メモリが無駄になります.

加えて,設定が終わって稼働し始めたら,ディスプレイ,キーボード,マウスなど全部外して部屋の片隅に置いておくつもりなので,以下の構成にしました.

  • Raspberry Pi 4 Model B/8G
  • Ubuntu Server 20.04.3 LTS
OS書き込みツールとOSのダウンロード

OSをSDカードに書き込むには,公式のRaspberry Pi Imagerを使うことにします.以下からダウンロードしてインストールすれば使えるようになります.

Raspberry Pi Imager単体でもOSを選択してダウンロードしながらSDカードへの書き込みが可能ですが,途中で書き込みに失敗するとダウンロードからやり直しになるので,OSイメージは先にダウンロードしておくことにします.

OSのダウンロードは以下から行います.

Ubuntuを入手する | Ubuntu
Ubuntuは、スマートフォン、タブレット端末、PCからサーバー、クラウドまであらゆる環境で動作するオープンソースのソフトウェアプラットフォームです。

ラズパイで動かすので,「Ubuntu Server for ARM」を選択してダウンロードします.

ダウンロードが完了すると「ubuntu-20.04.3-preinstalled-server-arm64+raspi.img.xz」というファイルが保存されます.

OSの書き込み

ダウンロードが完了すると「ubuntu-20.04.3-preinstalled-server-arm64+raspi.img.xz」というファイルが保存されます. これを,先ほどの Raspberry Pi Imager を使って書き込みます.

「COOSE OS」ボタンを押して,

「Use custom」を選択し, OSイメージ「ubuntu-20.04.3-preinstalled-server-arm64+raspi.img.xz」を指定します.

次に,「CHOOSE STORAGE」ボタンを押して書き込み対象のSDカードを指定します.

その後,「WRITE」ボタンを押して書き込みます(しばらく時間がかかります).書き込みが終わるとSDカードをスロットから抜いて終了です.

OSの初期設定

ディスプレイ無しで動かしたいので,可能な設定は先にすませておきます.

ネットワークの設定

SDカードを再度PCのスロットに差し込むと,System-boot領域にアクセスできます.

その中のnetwork-configというファイル をメモ帳などのテキストエディタで書き換えます.

# This file contains a netplan-compatible configuration which cloud-init
# will apply on first-boot. Please refer to the cloud-init documentation and
# the netplan reference for full details:
#
# https://cloudinit.readthedocs.io/
# https://netplan.io/reference
#
# Some additional examples are commented out below

version: 2
ethernets:
  eth0:
    dhcp4: true
    optional: true
#wifis:
#  wlan0:
#    dhcp4: true
#    optional: true
#    access-points:
#      myhomewifi:
#        password: "S3kr1t"
#      myworkwifi:
#        password: "correct battery horse staple"
#      workssid:
#        auth:
#          key-management: eap
#          method: peap
#          identity: "me@example.com"
#          password: "passw0rd"
#          ca-certificate: /etc/my_ca.pem

デフォルトでは上のようになっていますので,有線LANでDHCPでIPをもらってくる場合はそのまま繋がるはずです.wifi接続の場合,IPはDHCPで割り当て,SSIDが「myhomewifi」,パスワードが「S3kr1t」の場合は15~21行目のコメントを外せばOKです.

使用する環境に応じてSSIDとパスワードを書き換えます.

IPアドレスを固定する場合

サーバとして利用する場合はIPアドレスを固定しておいた方が好都合です.固定する場合は以下のようになります.

version: 2
ethernets:
  eth0:
    dhcp4: false
    optional: true
    addresses:
      - 192.168.11.3/24
    gateway4: 192.168.11.1
    nameservers:
      addresses: [192.168.11.1]
wifis:
  wlan0:
    dhcp4: true
    optional: true
    access-points:
      myhomewifi:
        password: "S3kr1t"
        addresses:
            - 192.168.11.3/24
        gateway4: 192.168.11.1
        nameservers:
            addresses: [192.168.11.1]

上の例は,有線・wifiともに

  • ラズパイのIPアドレスを192.168.11.3に固定
  • デフォルトゲートウェイ:192.168.11.1
  • DNS:192.168.11.1

の場合です.IPアドレスは環境によって異なりますので適宜変更して下さい.

ラズパイ側のIPが192.168.11.3/24と書かれています.「/24」はネットワーク部が何ビットあるかを示すもので,wifiルータのサブネットマスクの設定を見れば分かります.「/24」はサブネットマスクが「255.255.255.0」の場合となります.

255.255.255.0を2進表記すると
11111111 11111111 11111111 00000000
となるので,上位24ビットがネットワーク部ということになり,「/24」で表します.

(よく使いそうな)対応の早見表は以下のようになります.

サブネットマスクIPアドレスの表記
255.255.255.255***.***.***.***/32
255.255.255.254***.***.***.***/31
255.255.255.252***.***.***.***/30
255.255.255.248***.***.***.***/29
255.255.255.240***.***.***.***/28
255.255.255.224***.***.***.***/27
255.255.255.192***.***.***.***/26
255.255.255.128***.***.***.***/25
255.255.255.0***.***.***.***/24

現在のIPアドレスを確認するには

現在のIPアドレスはipコマンドで確認できます.

ip addr show       または      ip a       (どちらも同じ)

動作確認してみる

以上でとりあえず必要な設定は終わりましたので,SDカードをラズパイに差し込み起動してみます.(初回は何かと時間がかかったりしますので,モニタとキーボードを繋いで様子を見た方が安心です)

初期のユーザ名,パスワードはともに「ubuntu」です.ログインプロンプトが出たら,ログインしてみます.初回はパスワードの変更を求められますので変更しておきます.

また,適当なホストにpingを打ってみて,ネットワーク接続されていることを確認しておきます.下の例は接続したwifiルータにpingを打った結果です.ちゃんと返ってきてますのでOKです.

次にSSHでの接続も確認します.別のPCから,Teraterm等のターミナルソフトを使ってラズパイに接続します.下はRLoginというアプリを使って接続した例です.

先ずは接続の設定をします.特に難しくはなく,ラズパイのIPアドレス,ログインユーザ名,パスワードを入力し,プロトコルにsshを選択するだけです.

接続すると,プロンプトが表示されちゃんと接続されたことが分かります.これでディスプレイ,キーボードを繋がなくても,全ての操作がPCから可能になりました.

JAVA 17をインストールする

マイクラサーバを動かすにはJAVAが必要になりますのでインストールします.

2022年1月8日現在のマイクラサーバ(公式)のバージョンは1.18.1で,これを実行するにはJAVA17が必要になります.

まずは,aptコマンドでインストールできないか見てみました.パッケージ情報が古いとJava 17が取得できない場合もあるのでaptコマンドで最新のパッケージ情報にアップデートします.

sudo apt update

この環境では以下のような結果になりました.JAVA 17のJDKはリストに出てきませんのでaptコマンド一発でインストールできないようです.

ubuntu@ubuntu:~$ sudo apt search openjdk-\(\.\)\+-jdk$
Sorting... Done
Full Text Search... Done
openjdk-11-jdk/focal-updates,focal-security 11.0.11+9-0ubuntu2~20.04 arm64
  OpenJDK Development Kit (JDK)

openjdk-13-jdk/focal-updates,focal-security 13.0.7+5-0ubuntu1~20.04 arm64
  OpenJDK Development Kit (JDK)

openjdk-14-jdk/focal-updates 14.0.2+12-1~20.04 arm64
  OpenJDK Development Kit (JDK)

openjdk-16-jdk/focal-updates,focal-security 16.0.1+9-1~20.04 arm64
  OpenJDK Development Kit (JDK)

openjdk-8-jdk/focal-updates,focal-security 8u292-b10-0ubuntu1~20.04 arm64
  OpenJDK Development Kit (JDK)

しかたがないので,手作業でインストールしていくことにします.ダウンロード用URLを以下から調べます.openjdkとかでも大丈夫です.

Download the Latest Java LTS Free
Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts.

ラズパイで動かすので,「Arm 64 Compressed Archive」のURLを調べ,wgetでダウンロードします.

wget --no-check-certificate  https://download.oracle.com/java/17/latest/jdk-17_linux-aarch64_bin.tar.gz

今回はホームディレクトリにJDKsというディレクトリを作り,その中にJDKをインストールすることにします.上でゲットした圧縮ファイルをJDKsの中に展開します.

mkdir JDKs
tar --extract --file jdk-17_linux-aarch64_bin.tar.gz --directory=./JDKs/

その後は,update-alternativesで/usr/bin/javaにリンクを作ります.パスの設定なども自動でやってくれます.

sudo update-alternatives --install "/usr/bin/java" "java" "/home/ubuntu/JDKs/jdk-17.0.1/bin/java" 1

もし,バージョンの異なる複数のJAVAがインストールされている場合は以下のコマンドで選択が可能です.

sudo update-alternatives --config java

最後に,動作確認を兼ねてバージョンを確認しておきます.以下のように出てくれば成功です.

ubuntu@ubuntu:~$ java -version
java version "17.0.1" 2021-10-19 LTS
Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)

マイクラサーバをインストールする

インストールするといっても,サーバのjarファイルをダウンロードして適当な場所に配置するだけの作業です.

公式webサイトでダウンロード用のURLを調べます.

Download server for Minecraft
友達とプレイするなら、Realmsを購入するのがいちばん簡単ですが、Minecraft: Java Editionのマルチプレイヤーサーバーを自分で用意したいという人は、こちらのインストラクションを読んでください。

今回は,ホームディレクトリにminecraftというディレクトリを作り,その中に配置することにします.

mkdir minecraft
cd minecraft
wget https://launcher.mojang.com/v1/objects/125e5adf40c659fd3bce3e66e67a16bb49ecc1b9/server.jar

サーバを起動します.メモリはとりあえず3G割り当ててみました.

java -Xmx3072M -Xms3072M -jar server.jar nogui

初回起動時はいろいろ表示された後

(これより上は省略)
Starting net.minecraft.server.Main
[19:15:15] [ServerMain/ERROR]: Failed to load properties from file: server.properties
[19:15:16] [ServerMain/WARN]: Failed to load eula.txt
[19:15:16] [ServerMain/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

のようなメッセージが出て終了します.サーバと同じディレクトリに「eula.txt」というファイルができていますので,これを書き換えてサーバの起動を許可する必要があります.

ubuntu@ubuntu:~/minecraft$ more 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 Jul 21 19:15:16 UTC 2021
eula=false (eula=trueに書き換える)

eula.txtの内容を見ると上のようになっていますので,「eula=false」を「eula=true」に書き換えて,サーバを再度起動します.

再度起動して以下のような表示が出れば,マイクラサーバは起動しています.初回は結構時間がかかります.

Done (216.861s)! For help, type "help"

サーバを停止するには

stop

と打ち込みます.

サーバ起動用スクリプト

サーバ起動のコマンドが長ったらしくて覚えられないので,スクリプトを作っておきます.

mStart.shという名前(何でも良い)でファイルを作り,以下の内容を書いておきます.

#!/bin/sh
java -Xmx3072M -Xms3072M -jar ./server.jar nogui 

作ったmStart.shに実行可能フラグを立てます.

chmod +x mStart.sh

これで,./mStart.shと打ち込めばサーバが起動します.

screenでセッションを保存する

基本的には以上でOKですが,このままではサーバを起動したユーザがログアウトしたり,SSH接続が切れたりすると,サーバのプロセスも終了してしまいますので,screenコマンドで新しいセッションを作り,その中でサーバを動かすことにします.

新しいセッションを作ってサーバを起動する

screen

何やらメッセージが出てきます.

Enterを押すと通常のプロンプトが出てきます.何の変哲も無いプロンプトですが,先ほどとは異なるセッションで動いています.

ここで,マイクラサーバを起動します.

./mStart.sh

サーバが起動したらこのセッションから抜けます(デタッチ).

(Ctrl + a) d

Ctrlを押しながらaを押し,その後でdを押します.

デタッチした後は,ログアウトしたりSSH接続を閉じたりしても,ラズパイの電源が入っていればサーバは動き続けます.

サーバが動いているセッションに入り直す

screenコマンドで作ったセッションリストを確認します.

screen -ls

以下のようにセッションのリストが出てきます.

ubuntu@ubuntu:~$ screen -ls
There is a screen on:
        2816.pts-0.ubuntu       (07/21/21 20:14:03)     (Detached)
1 Socket in /run/screen/S-ubuntu.

この場合,セッションIDが「2816」で一つ動いているのが分かりますので,「screen -r」にセッションIDを指定することで,そのセッションに戻る(アタッチする)ことができます.

screen -r 2816

使用感

まだ使い込んでいませんが,家庭内LANで2,3人でプレイする分には特に問題無く動いているように思います.

家にサーバマシンを置いておくスペースも無いですし,お金払ってRelmsを使う(月々4ドル~8ドルくらい)よりコスパ良いのではと思っています.

タイトルとURLをコピーしました