【AlmaLinux】Java版Minecraftサーバをインストールする方法

minecraftマルチサーバ(バニラ)
記事内に広告が含まれています。

AlmaLinux8.4にjava版のMinecraftサーバ1.17.1をインストールする方法です。

作業内容

本手順で説明するインストール作業は下記の流れで行っていきます。

  • Minecraftサーバ用ポート(25565)の通信許可
  • tmuxインストール
  • tarインストール
  • epelリポジトリの有効化
  • OpenJDKインストール
  • minecraftサーバ動作用ユーザ作成
  • minecraftサーバインストール
  • 起動・停止スクリプト作成
  • 自動起動設定

インストール環境

本手順では以下の環境でMinecraftサーバのインストールを行っていきます。

  • OS: Almalinux: 8.4
  • Minecraftサーバ: 1.17.1
  • Java: OpenJDK 16
  • インストールディレクトリ: /opt/minecraft
  • minecraftサーバ動作用ユーザ: mcadmin

インストールディレクトリやminecraftサーバ動作用ユーザについては、どちらも特に決まりがあるわけではないので自由に変更してもらって構いませんが、その際は以後の説明内容を適宜読み替えてください。

Minecraft用ポート(25565)の通信許可

Minecraftサーバで使用する25565番ポートの通信許可設定を行います。

# firewall-cmd --permanent --add-port=25565/tcp
success
# firewall-cmd --reload
success

tmuxインストール

ユーザがログインしていない状態でもMinecraftサーバを動作させるために必要な、tmuxという仮想端末アプリケーションをインストールを行います。

# dnf -y install tmux

tarインストール

Minecraftサーバのデータバックアップを行う際に必要な、tarのインストールを行います。

# dnf -y install tar

epelリポジトリの追加

Minecraftを動作させるために必要なjava(OpenJDK)をインストールする際に必要なepelリポジトリを追加します。

# dnf -y install epel-release

リポジトリファイルの編集

意図せずEPELリポジトリのアプリケーションをインストールしてしまい、標準のリポジトリにあるアプリケーションと混ざってしまわないようするため、指定した場合のみEPELリポジトリを使用する設定を行います。

# vi /etc/yum.repos.d/epel.repo

epelリポジトリの設定ファイルで「enabled=1」の部分を「enabled=0」へ変更します。

[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
#baseurl=https://download.fedoraproject.org/pub/epel/$releasever/Everything/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
enabled=1     # 変更前 「enabled=1」の部分を「enabled=0」へ変更
  ↓
enabled=0     # 変更後

OpenJDKインストール

Minecraftのバージョン1.17から、動作させるために必要なJavaのバージョンが8から16以降へと変更されました。

そのため、標準のリポジトリで用意されているOpenJDKのバージョンは古く動作させるための要件を満たさないので、EPELリポジトリを使用して要件を満たすOpenjJDKをインストールします。

# dnf -y install --enablerepo=epel java-latest-openjdk.x86_64

インストールされたjavaのバージョンを確認し、インストールされたOpenJDKのバージョンが要件を満たしていることを確認してください。

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

minecraftサーバ動作用ユーザ作成

rootユーザでMinecraftサーバを動作せるのはセキュリティ的によろしくないため、動作させるためのユーザを作成します。

今回は「mcadmin」というユーザを作成していきます。

# adduser mcadmin
# passwd mcadmin

Minecraftサーバインストール

Minecraftサーバのインストールを以下の流れで行っていきます。

  • インストール用ディレクトリ作成
  • minecraftサーバダウンロード
  • EULAへの同意

インストール用ディレクトリ作成

インストール用ディレクトリとして「/opt/minecraft」ディレクトリを作成し、所有者とグループを先ほど作成した「mcadmin」ユーザに設定します。

# mkdir /opt/minecraft
# chown mcadmin:mcadmin /opt/minecraft/

Minecraftサーバのダウンロード

Minecraftサーバのダウンロードはminecraftサーバ動作用のユーザで、インストール用に作成したディレクトリに行います。

# su - mcadmin
$ cd /opt/minecraft

ダウンロードURLのコピー

Minecraftサーバのダウンロードページで、jarファイルをダウンロードするためのURLをコピーします。

ダウンロードサイトURL: https://www.minecraft.net/ja-jp/download/server

ダウンロード

curlコマンドでjarファイルをダウンロードを行った後に、ダウンロードしてきたファイルの名前をどのバージョンのMinecraftサーバなのかを分かるように変更しておきます。

$ curl -LO ダウンロード用URLをペースト
$ mv server.jar minecraft_server.バージョン.jar

下記は1.17.1.jarファイルをダウンロードした際の作業ログになります。

$ curl -LO https://launcher.mojang.com/v1/objects/a16d67e5807f57fc4e550299cf20226194497dc2/server.jar
$ mv server.jar minecraft_server.1.17.1.jar

EULA(End-User License Agreement)への同意

Minecraftサーバを動作させるにはeula.txtにてEULA(使用許諾契約)に同意する必要がありますが、初回起動時には「eula.txt」存在しないため下記の様に起動が失敗してしまいます。

$ java -Xmx1024M -Xms1024M -jar minecraft_server.1.17.1.jar nogui
[21:31:42] [main/ERROR]: Failed to load properties from file: server.properties17.1.jar nogui
[21:31:44] [main/WARN]: Failed to load eula.txt
[21:31:44] [main/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info.

一度起動させると「eula.txt」「server.properties」「logs」フォルダが作成されますので確認してください。

$ ls -l
合計 42616
-rw-rw-r--. 1 mcadmin mcadmin      181 10月 29 21:31 eula.txt
drwxrwxr-x. 2 mcadmin mcadmin       24 10月 29 21:30 logs
-rw-rw-r--. 1 mcadmin mcadmin 43626592 10月 29 10:40 minecraft_server.1.17.1.jar
-rw-rw-r--. 1 mcadmin mcadmin     1037 10月 29 21:31 server.properties

作成された「eula.txt」の「eula=false」を「eula=true」に変更してEULAに同意します。

$ vi eula.txt

編集内容は下記のとおりです。

eula=false   #変更前 「eula=true」に変更
  ↓
eula=true    #変更後   

起動確認

再度minecraftサーバを起動させてください。

$ java -Xmx1024M -Xms1024M -jar minecraft_server.1.17.1.jar nogui

###  省略  ###

[21:48:37] [Worker-Main-2/INFO]: Preparing spawn area: 94%
[21:48:38] [Worker-Main-2/INFO]: Preparing spawn area: 95%
[21:48:38] [Worker-Main-2/INFO]: Preparing spawn area: 97%
[21:48:53] [Server thread/INFO]: Time elapsed: 63615 ms
[21:48:54] [Server thread/INFO]: Done (76.298s)! For help, type "help"

動作確認

Minecraftのクライアントからサーバに接続できるかの確認を行ってください。

問題なく接続できるようでしたら、stopコマンドを実行しMinecraftサーバを停止させます。

stop

起動・停止スクリプト作成

Minecraftサーバの起動・停止・バックアップを行えるスクリプトを作成します。

$ vi mc_script.sh

作成するスクリプト

#!/bin/bash
#
# mincraft_server start/stop/backup/status script
#

# mincraft_server.jar 実行ユーザ
USERNAME='mcadmin'

# session名
SESSION_NAME='minecraft'

# minecraft_serverディレクトリ
MC_PATH='/opt/minecraft'

# 実行するminecraft_server.jar
SERVICE='minecraft_server.1.17.1.jar'

# メモリ設定
XMX='1024M'
XMS='1024M'

## バックアップ用設定
# バックアップ格納ディレクトリ
BK_DIR="/home/$USERNAME/mc_backup"

# バックアップ取得時間
BK_TIME=`date +%Y%m%d-%H%M%S`

# 完全バックアップデータ名
FULL_BK_NAME="$BK_DIR/mc_full_backup_${BK_TIME}.tar.gz"

# 簡易パックアップデータ名
SIMPLE_BK_NAME="$BK_DIR/mc_simple_backup_${BK_TIME}.tar"

# 簡易バックアップ対象データ
BK_FILE="$MC_PATH/world \
  $MC_PATH/banned-ips.json \
  $MC_PATH/banned-players.json \
  $MC_PATH/ops.json \
  $MC_PATH/server.properties \
  $MC_PATH/usercache.json \
  $MC_PATH/whitelist.json"

# バックアップデータ保存日数
BK_GEN="3"

cd $MC_PATH

if [ ! -d $BK_DIR ]; then
  mkdir $BK_DIR
fi

ME=`whoami`

if [ $ME != $USERNAME ]; then
  echo "Please run the $USERNAME user."
  exit
fi

# Minecraft 開始処理
start() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "$SERVICE is already running!"
  else
    echo "Starting $SERVICE..."
    tmux new-session -d -s $SESSION_NAME
    tmux send-keys -t $SESSION_NAME:0 "java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui" C-m
  fi
}

# Minecraft 停止処理
stop() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "Stopping $SERVICE"
    tmux send-keys -t $SESSION_NAME:0 "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..." C-m
    tmux send-keys -t $SESSION_NAME:0 "save-all" C-m
     sleep 10
    tmux send-keys -t $SESSION_NAME:0 "stop" C-m
    sleep 10
    echo "Stopped minecraftserver"
  else
    echo "$SERVICE is not running!"
    exit
  fi

  while :
   do
     if
      pgrep -u $USERNAME -f $SERVICE > /dev/null; then
      echo "Stopping $SERVICE"
      sleep 10
    else
      tmux kill-session -t $SESSION_NAME
      echo "Stoped $SERVICE"
      break
    fi
  done
}

# Minecraft 簡易バックアップ処理
s_backup() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "Backup start minecraft data..."
    tmux send-keys -t $SESSION_NAME:0 "save-all" C-m
    sleep 10
    tmux send-keys -t $SESSION_NAME:0 "save-off" C-m
    tar cfv $SIMPLE_BK_NAME $BK_FILE
    sleep 10
    tmux send-keys -t $SESSION_NAME:0 "save-on" C-m
    echo "minecraft_server backup compleate!"
    gzip -f $SIMPLE_BK_NAME
    find $BK_DIR -name "mc_simple_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
  else
    echo "Backup start ..."
    gzip -f $HOUR_BK_NAME
    find $BK_DIR -name "mc_simple_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
  fi
}

# Minecraft 完全バックアップ処理
f_backup() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "Full backup start minecraft data..."
    tmux send-keys -t $SESSION_NAME:0 "say SERVER SHUTTING DOWN IN 10 SECONDS. Saving map..." C-m
    sleep 10
    tmux send-keys -t $SESSION_NAME:0 "save-all" C-m
    tmux send-keys -t $SESSION_NAME:0 "stop" C-m
    while :
      do
        if
          pgrep -u $USERNAME -f $SERVICE > /dev/null; then
          echo "Stopping $SERVICE"
           sleep 10
        else
          echo "Stopped minecraft_server"
          echo "Full Backup start ..."
          tar cfvz $FULL_BK_NAME $MC_PATH
          echo "Full Backup compleate!"
          find $BK_DIR -name "mc_full_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
          break
        fi
      done
    echo "Starting $SERVICE..."
    tmux send-keys -t $SESSION_NAME:0 "java -Xmx$XMX -Xms$XMS -jar $SERVICE nogui" C-m
  else
    echo "Full Backup start ..."
    tar cfvz $FULL_BK_NAME $MC_PATH
    echo "Full Backup compleate!"
    find $BK_DIR -name "mc_full_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \;
  fi
}

# Minecraft 起動状態確認処理
status() {
  if pgrep -u $USERNAME -f $SERVICE > /dev/null; then
    echo "$SERVICE is already running!"
    exit
  else
    echo "$SERVICE is not running!"
    exit
  fi
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  s_backup)
    s_backup
    ;;
  f_backup)
    f_backup
    ;;
  status)
    status
    ;;
  *)
    echo  $"Usage: $0 {start|stop|s_backup|f_backup|status}"
esac

変数の説明

スクリプト内で設定している変数の説明です。

必要に応じて設定内容を変更してください。

変数 説明
USERNAME Minecraftサーバ動作用ユーザ
SESSION_NAME tmuxで作成するセッション名
MC_PATH Minecraftサーバインストールディレクトリ
SERVICE 実行するminecraft_server.バージョン.jarファイル
XMX 最大メモリ使用量
XMS 初期メモリ使用量(XMXを超えない値)
BK_DIR バックアップデータ保存ディレクトリ
BK_TIME バックアップ取得日時
FULL_BK_NAME 完全バックアップデータ名
SIMPLE_BK_NAME 簡易バックアップデータ名
BK_FILE 簡易バックアップ対象データ
BK_GEN バックアップデータ保存する日数

パーミッションの設定

作成したスクリプトのパーミッションを744に設定します。

$ chmod 744 mc_script.sh

スクリプト使用方法

作成したスクリプトはMinecraftサーバ用ユーザで行う必要があり、下記のように引数を指定して実行します。

  • 起動 /opt/minecraft/mc_script.sh start
  • 停止 /opt/minecraft/mc_script.sh stop
  • 簡易バックアップ /opt/minecraft/mc_script.sh s_backup
  • 完全バックアップ /opt/minecraft/mc_script.sh f_backup
  • 起動状態確認 /opt/minecraft/mc_script.sh status

Minecraftサーバの起動

引数としてstartを指定することで、SESSION_NAMEで指定した名前のセッションがtmuxで作成され、その中でMinecraftサーバが実行されます。

$ /opt/minecraft/mc_script.sh start
tmuxセッションへの接続(アタッチ)

tmuxのセッションに接続(アタッチ)する場合は、Minecraftサーバ用のユーザで下記コマンドを実行します。

tmux ls コマンドで起動しているセッションを表示させます。

$ tmux ls
minecraft: 1 windows (created Thu Nov  4 05:34:40 2021) [80x24]

minecraftサーバ起動しているセッションを指定して接続します。

$ tmux a -t minecraft

Minecraftサーバが動作している仮想端末に接続することが出来ます。

[05:35:40] [Worker-Main-2/INFO]: Preparing spawn area: 22%
[05:35:40] [Worker-Main-2/INFO]: Preparing spawn area: 22%
[05:35:40] [Worker-Main-2/INFO]: Preparing spawn area: 22%
[05:35:57] [Server thread/INFO]: Time elapsed: 53743 ms
[05:35:57] [Server thread/INFO]: Done (54.683s)! For help, type "help"
tmuxセッションからの切断(デタッチ)

セッションから抜けたい(デタッチ)場合は「Ctrl」+「b」キーを押下した後に「d」キーを押下します。

セッションから抜けることができたら、コンソールには[detached]と表示されます。

[detached (from session minecraft)]

Minecraftサーバの停止

引数としてstopを指定することで、Mincraftサーバを停止させることができます。

$ /opt/minecraft/mc_script.sh stop

tmuxで作成したセッションも自動的に削除されます。

$ tmux ls
no server running on /tmp/tmux-1001/default

簡易バックアップ

引数としてs_backupを指定することで、Minecraftサーバを停止させずに、BK_FILEで指定したデータをBK_DIRで指定したディレクトリにバックアップします。

バックアップデータはSIMPLE_BK_NAMEで指定された名前で保存されます。

$ /opt/minecraft/mc_script.sh s_backup

バックアップを行う際はminecraftサーバが起動している必要があります。

完全バックアップ

引数としてf_backupを指定することで、Minecraftサーバを一旦停止させて、インストールディレクトリ丸ごとBK_DIRで指定したディレクトリにバックアップします。

バックアップデータはFULL_BK_NAMEで指定された名前で保存されます。

$ /opt/minecraft/mc_script.sh f_backup

バックアップを行う際はMinecraftサーバが起動している必要があります。

起動状態確認

引数としてstatusを指定することで、Minecraftサーバの起動状態を確認することが出来ます。

$ /opt/minecraft/mc_script.sh status

スクリプト動作確認

スクリプトの作成が終わったら動作確認を必ず行ってください。

自動起動設定

Minecraftサーバを自動起動させるために必要な、systemd登録用の設定ファイルを作成します。

$ su - 
# vi /etc/systemd/system/minecraft.service

ファイルの内容は下記の通りとなります。

[Unit]
Description=Minecraft Server
After=network.target local-fs.target

[Service]
Type=forking
User=mcadmin
ExecStart=/opt/minecraft/mc_script.sh start
ExecStop=/opt/minecraft/mc_script.sh stop

[Install]
WantedBy=multi-user.target

systemd登録用ファイルが作成できたら自動起動出来るように登録を行います。

# systemctl enable minecraft

登録が完了しましたら、サーバを再起動して自動起動されるか確認してください。

# reboot

サーバの再起動後に自動的にminecraftサーバが起動することを確認できましたらインストール作業は完了となります。

あとは、server.propertiesでお好みの設定を行ってください。

コメント

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