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でお好みの設定を行ってください。




コメント