Raspberry Pi4 で minecraft server(Java版)を構築する
息子と同じサーバで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