2021-08-07

Raspberry Pi4 で minecraft server(Java版)を構築する

PI4
Minecraft

息子と同じサーバでMinecraftやってみたかったので、ラズパイでも動くと言われるMinecraftサーバを構築することにした。
統合版をインストールしたかったのにJava版で、残念な感じだったけど記録だけ残す。

ubuntu server 20.04のインストール

Raspbery Pi Imagerを使い、サクッとインストール。

セットアップ

優先LANに繋げば自動でDHCPサーバにつなぎに行ってくれる。

とりあえずやっとけ系

# ライブラリのアップデート
sudo apt update && sudo apt upgrade -y

# [オプション]デフォルトのエディタをnanoじゃなくする
sudo update-alternatives --config editor  

# [オプション]sudo するたびにパスワード求められるのが嫌なら
# userid ALL=NOPASSWD: ALL
# を追記
sudo visudo  

# ユーザ追加(nekohaはuserid)
adduser nekoha  
gpasswd -a nekoha sudo

JDKのインストール

JREでいいんじゃないかと思ったけど他にも使えるのでJDKで。
2021/08/07時点でゲームは1.17.10で、サーバのバージョンは1.17.1でした。

Java11系では動作しなかったので、新しめのJDKをインストール。
具体的にはクラスのコンパイルバージョンが60.0以上を求められますが、Java11では55.0までしか対応していないためです。

https://www.ne.jp/asahi/hishidama/home/tech/java/version.html で調べたところによると、Java16以上が必要なようです。

# aptで利用可能なJDKをリスト表示
javac -version

Command 'javac' not found, but can be installed with:

sudo apt install default-jdk              # version 2:1.11-72, or
sudo apt install openjdk-11-jdk-headless  # version 11.0.11+9-0ubuntu2~20.04
sudo apt install openjdk-13-jdk-headless  # version 13.0.7+5-0ubuntu1~20.04
sudo apt install openjdk-14-jdk-headless  # version 14.0.2+12-1~20.04
sudo apt install openjdk-16-jdk-headless  # version 16.0.1+9-1~20.04
sudo apt install openjdk-8-jdk-headless   # version 8u292-b10-0ubuntu1~20.04
sudo apt install ecj                      # version 3.16.0-1

aptでインストールできる16系があったので、インストール。
もちろんOracleJDKやCorrettoを使いたいならそれでもいいと思います。

# JDKのインストール
sudo apt install openjdk-16-jdk-headless -y

aptでインストールするとjavaコマンドへのパスも通してくれます。便利ですね!

ツール類のインストール

サーバのバックグラウンド実行にscreen、ポートListenの確認にnmapを使います。

sudo apt install screen nmap -y

実行ユーザの作成

サーバの実行ユーザを作成します。

sudo adduser minecraft

## minecraft serverのダウンロード
<https://www.minecraft.net/en-us/download/server>からダウンロードできます。  
本日時点で最新版は`1.17.1`でした。`iPad OS``Switch`版は`1.17.10`です。

```bash
# インストール先を作成、所有者を変更
cd /usr/local/games
sudo mkdir minecraft
sudo chown minecraft:minecraft -R ./minecraft

# ダウンロードをminecraftユーザで実行
su minecraft
wget https://launcher.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar

ダウンロードが完了したら一旦起動します。
この時点ではまだセットアップです。すぐにゲームができる状態にはなりません。
RaspberryPi4は8GB版を使っているので、メモリは2GBを割り当ててみました。

java -Xmx2G -Xms2G -jar server.jar nogui

[14:36:55] [main/ERROR]: Failed to load properties from file: server.properties
[14:36:55] [main/WARN]: Failed to load eula.txt
[14:36:55] [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=falseをtrueに書き換える
echo eula=true > eula.txt

serviceとして起動する

もう一度さっきのjavaコマンドを流せば起動するのですが、サーバ再起動や不意なシャットダウンに備えて自動で起動するように設定します。
ここからは管理者ユーザで作業します。

sudo apt install screen -y

起動スクリプトの作成

sudo vi /etc/systemd/system/minecraft@.service
[Unit]
Description=Minecraft Server: %i
After=network.target

[Service]
WorkingDirectory=/usr/local/games/minecraft/

User=minecraft
Group=minecraft

Restart=always

ExecStart=/usr/bin/screen -DmS mc-%i /usr/bin/java -Xms2G -Xmx2G -jar server.jar nogui

ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "say SERVER SHUTTING DOWN IN 5 SECONDS. SAVING ALL MAPS..."5'
ExecStop=/bin/sleep 5
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "save-all"5'
ExecStop=/usr/bin/screen -p 0 -S mc-%i -X eval 'stuff "stop"5'


[Install]
WantedBy=multi-user.target

ポートの開放

sudo ufw allow 25565
sudo ufw allow 25575

日付の設定(オプション)

なんか日付・時刻のズレが~的な記事があり、下記コマンドが推奨されていた。 効果の程は不明・・・

date `date +'%m%d%H%M%C%y.%S'`

サーバ起動

いよいよサーバ起動です。PI4で2分ちょいくらい時間かかりました。

# サーバ起動の前に設定をロード
sudo systemctl daemon-reload

# サーバ起動
sudo systemctl start minecraft@survival

# ステータス確認
sudo systemctl status minecraft@survival

# 次回以降も自動で起動させる
sudo systemctl enable minecraft@survival

# ポート起動しているか?
nmap -p 25565 localhost


# ログを監視(ctrl+cで監視を抜ける)
tail -f /usr/local/games/minecraft/logs/latest.log

参考サイト

Ubuntu 20.04 Minecraftサーバーのセットアップ - goto-linux.com


猫派 / 基本インドア / ガジェット大好き / RDP推進派 / 自作キーボード
コロナ禍の趣味はPC+VRでゲーム。
最近のゲーム:Factorio / にゃんこ大戦争

→ Policy