.rute1/

キャリア/心理学/読書/Pythonなどなど

Amazon Linux2 で運用しているMinecraft Serverのバージョンアップ

久しぶりにMinecraftを遊ぼうと思ったらバージョンが上がってたので、サーバー側のバージョンも上げることにしました。

環境はAmazon Linux 2で systemctlでサーバープロセスを管理しています。

まずはサーバーを停止。

$ sudo systemctl stop minecraft_server.service
$ sudo systemctl status minecraft_server.service

無事に停止できたら、新バージョンを公式からダウンロードします。(現時点では、1.17.1が最新でした。)

www.minecraft.net

$ wget https://launcher.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar

実際に動かしているファイル名はminecraft_server.jarなので、ファイル名を変更。
(本来なら元のファイル名を別のファイルに退避などをしても良いです。この環境はバックアップを取得していたので省略)

$ mv server.jar minecraft_server.jar

startしてみましたが、起動しませんでした。

$ systemctl start minecraft_server.service
$ systemctl status minecraft_server.service
 ● minecraft_server.service - Minecraft Server
    Loaded: loaded (/etc/systemd/system/minecraft_server.service; enabled; vendor preset: disabled)
    Active: failed (Result: start-limit) since Fri 2021-07-16 15:06:17 UTC; 439ms ago
   Process: 3519 ExecStart=/bin/bash /home/ec2-user/minecraft/boot (code=exited, status=1/FAILURE)
  Main PID: 3519 (code=exited, status=1/FAILURE)
 
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: minecraft_server.service: main process exited, code=exited, status=1/FAILURE
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: Unit minecraft_server.service entered failed state.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: minecraft_server.service failed.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: minecraft_server.service holdoff time over, scheduling restart.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: start request repeated too quickly for minecraft_server.service
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: Failed to start Minecraft Server.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: Unit minecraft_server.service entered failed state.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: minecraft_server.service failed.

ログを確認すると、Error: A JNI error has occurred, please check your installation and try again というエラーが見つかりました。
これは、javaのバージョンが古いというエラーです。どうやらMinecraftは1.17系からjava16が必要になったようです。

$ journalctl -ex -u minecraft_server.service
(中略)
 -- Unit minecraft_server.service has begun starting up.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: Error: A JNI error has occurred, please check your installation and try again
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: Exception in thread "main" java.lang.UnsupportedClassVersionError: net/minecraft/server/Main has been compiled by a more recent version
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.lang.ClassLoader.defineClass1(Native Method)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.security.AccessController.doPrivileged(Native Method)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal bash[3519]: at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: minecraft_server.service: main process exited, code=exited, status=1/FAILURE
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: Unit minecraft_server.service entered failed state.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: minecraft_server.service failed.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: minecraft_server.service holdoff time over, scheduling restart.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: start request repeated too quickly for minecraft_server.service
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: Failed to start Minecraft Server.
 -- Subject: Unit minecraft_server.service has failed
 -- Defined-By: systemd
 -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
 --
 -- Unit minecraft_server.service has failed.
 --
 -- The result is failed.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: Unit minecraft_server.service entered failed state.
 Jul 16 15:06:17 ip-172-31-41-86.ap-northeast-1.compute.internal systemd[1]: minecraft_server.service failed.

元々の環境では java8でした。

$ java -version
 openjdk version "1.8.0_201"
 OpenJDK Runtime Environment (build 1.8.0_201-b09)
 OpenJDK 64-Bit Server VM (build 25.201-b09, mixed mode)

そこで、javaのバージョンを上げることにします。
そういえばAmazonが管理しているOpenJDKがあったことを思い出したので、ドキュメント通りにインストールします。

docs.aws.amazon.com

$ sudo rpm --import https://yum.corretto.aws/corretto.key
$ sudo curl -L -o /etc/yum.repos.d/corretto.repo https://yum.corretto.aws/corretto.repo
$ sudo yum install -y java-16-amazon-corretto-devel

これだけで簡単にバージョンが上がりました。

$ java --version
 openjdk 16.0.1 2021-04-20
 OpenJDK Runtime Environment Corretto-16.0.1.9.1 (build 16.0.1+9)
 OpenJDK 64-Bit Server VM Corretto-16.0.1.9.1 (build 16.0.1+9, mixed mode, sharing)

これで無事に起動でき、バージョンアップできました!

$ sudo systemctl start minecraft_server.service
$ systemctl status minecraft_server.service
 ● minecraft_server.service - Minecraft Server
    Loaded: loaded (/etc/systemd/system/minecraft_server.service; enabled; vendor preset: disabled)
    Active: active (running) since Fri 2021-07-16 15:35:13 UTC; 7s ago
  Main PID: 23650 (bash)
    CGroup: /system.slice/minecraft_server.service
            ├─23650 /bin/bash /home/ec2-user/minecraft/boot
            └─23651 java -Xms3072M -Xmx3072M -jar /home/ec2-user/minecraft/minecraft_server.jar nogui
 (略)