環境構築からWEBアプリ開発・スマホアプリ開発まで。ときには動画制作やゲームも。

supilog
すぴろぐ

【minecraft】AlmaLinux9で統合版マルチサーバー構築(screen)【手順】

【minecraft】AlmaLinux9で統合版マルチサーバー構築(screen)【手順】

個人的に使用しているLinuxサーバーのメインがAlmaLinux9になったので、マイクラ構築手順を更新しておく。あと旧手順と違う点としては、screenを使用してマイクラのプロセスにアタッチできるようにしています。(コマンドが打ちたいので笑)

今回の環境

「WebARENA Indigo」のミニマムである1vCPU/1GBRAM/20GBSSDのプラン(449円/月)で構築してみる。

  • AlmaLinux9.3(WebARENA Indigo)

構築手順

# swapfile
dd if=/dev/zero of=/swapfile bs=1M count=4096
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

vi /etc/fstab
→以下を追記
----------
/swapfile                                 swap                    swap    defaults        0 0
----------


# アップデート
dnf -y update


# インストール
dnf -y install epel-release
dnf -y install wget gcc unzip make libnsl firewalld screen


# firewalld起動
systemctl start firewalld


# firewalld(for minecraft)
firewall-cmd --permanent --new-service minecraft
firewall-cmd --permanent --service=minecraft --set-description=minecraft
firewall-cmd --permanent --service=minecraft --set-short=minecraft
firewall-cmd --permanent --service=minecraft --add-port=19132/tcp
firewall-cmd --permanent --service=minecraft --add-port=19133/tcp
firewall-cmd --permanent --service=minecraft --add-port=19132/udp
firewall-cmd --permanent --service=minecraft --add-port=19133/udp
cat /etc/firewalld/services/minecraft.xml
# ----
# ?xml version="1.0" encoding="utf-8"?>
# service>
#  <short>minecraft</short>
#  <description>minecraft</description>
#  <port port="19132" protocol="tcp"/>
#  <port port="19133" protocol="tcp"/>
#  <port port="19132" protocol="udp"/>
#  <port port="19133" protocol="udp"/>
# /service>
# ----

firewall-cmd --add-service=minecraft --zone=public --permanent
firewall-cmd --reload


# 各種ディレクトリ作成
mkdir -p /usr/local/games/minecraft/backups/{worlds,properties}
mkdir -p /usr/local/games/minecraft/bedrock-server
mkdir -p /usr/local/games/minecraft/zips


# minecraft本体ダウンロード
# 公式ページ(https://www.minecraft.net/ja-jp/download/server/bedrock)
# のリンク先アドレスを確認して、最新バージョンをチェック
# (「I agree ...」にチェックを入れるとダウンロードボタンのアドレスが見れます)
export MCVERSION=1.21.0.03
cd /usr/local/games/minecraft/zips
wget https://minecraft.azureedge.net/bin-linux/bedrock-server-${MCVERSION}.zip
unzip bedrock-server-${MCVERSION}.zip -d ../bedrock-server


# サービス設定ファイル
cat << _EOF_ > /etc/systemd/system/minecraft.service
[Unit]
Description=minecraft
After=syslog.target network.target
   
[Service]
Type=forking
EnvironmentFile=/etc/default/minecraft
WorkingDirectory=/usr/local/games/minecraft/bedrock-server/
ExecStart=/usr/local/bin/minecraft-start.sh
ExecStop=/usr/local/bin/minecraft-stop.sh
User=root
Group=root
KillMode=none
Restart=always
 
[Install]
WantedBy=multi-user.target
_EOF_


# 起動スクリプト
TFILE=/usr/local/bin/minecraft-start.sh
echo '#!/bin/bash' > ${TFILE}
echo 'cd ${MINECRAFT_DIR}' >> ${TFILE}
echo 'LD_LIBRARY_PATH=. screen -dmS ${SESSION_NAME} ./bedrock_server' >> ${TFILE}


# 停止スクリプト
TFILE=/usr/local/bin/minecraft-stop.sh
echo '#!/bin/bash' > ${TFILE}
echo 'screen -r ${SESSION_NAME} -X stuff $"stop\n"' >> ${TFILE}
echo 'while true' >> ${TFILE}
echo 'do' >> ${TFILE}
echo '  screen -r ${SESSION_NAME} -X select . > /dev/null || break' >> ${TFILE}
echo '  sleep 1' >> ${TFILE}
echo 'done' >> ${TFILE}


# 設定ファイル作成
cat << _EOF_ > /etc/default/minecraft
MINECRAFT_DIR="/usr/local/games/minecraft/bedrock-server/"
SESSION_NAME="bedrock"
_EOF_


# ディレクトリ作成, スクリプト実行権限付与
chmod 755 /usr/local/bin/minecraft-start.sh
chmod 755 /usr/local/bin/minecraft-stop.sh


# 起動
systemctl enable minecraft
systemctl start minecraft

これで作業は完了です!

バージョンアップ手順

minecraftのアプリが更新されると、サーバー側も更新作業をしないとバージョン不一致でログインができなくなります。接続ができない時は、バージョン確認をしてみましょう。

# minecraft停止
systemctl stop minecraft


# 定数
export MAINTDATE=`date "+%Y%m%d%H%M%S"`
export BACKUP_BEDROCK=/usr/local/games/minecraft/backups/bedrock-server.${MAINTDATE}
export BACKUP_PROPERTIES=/usr/local/games/minecraft/backups/properties


# バックアップ(bedrock-server)
mv /usr/local/games/minecraft/bedrock-server ${BACKUP_BEDROCK}


# 構築
# 下記ページを確認し、新しいバージョンをチェックする
# https://www.minecraft.net/ja-jp/download/server/bedrock
export MCVERSION=1.21.0.03
cd /usr/local/games/minecraft/zips/
wget https://minecraft.azureedge.net/bin-linux/bedrock-server-${MCVERSION}.zip
unzip bedrock-server-${MCVERSION}.zip -d ../bedrock-server


# 新server.propertiesを生保存
# 新しい設定ファイルを念の為保管しておく
cp -i /usr/local/games/minecraft/bedrock-server/server.properties ${BACKUP_PROPERTIES}/server.properties.${MAINTDATE}


# 新server.propertiesを整頓
egrep -v "^$|^#" /usr/local/games/minecraft/bedrock-server/server.properties | sort > /usr/local/games/minecraft/bedrock-server/server.properties.org


# 旧server.propertiesをコピー
cp -i ${BACKUP_BEDROCK}/server.properties /usr/local/games/minecraft/bedrock-server/server.properties


# 新規項目などがないかチェック
diff /usr/local/games/minecraft/bedrock-server/server.properties.org /usr/local/games/minecraft/bedrock-server/server.properties
→新設定項目をチェックする
→必要に応じてserver.propertiesを更新する


# worlds
mkdir /usr/local/games/minecraft/bedrock-server/worlds
cd /usr/local/games/minecraft/bedrock-server/worlds
cp -ri ${BACKUP_BEDROCK}/worlds/* ./


# 一旦起動する
systemctl start minecraft
systemctl stop minecraft


# allowlist.json, permissions.json
cd /usr/local/games/minecraft/bedrock-server/
diff ${BACKUP_BEDROCK}/allowlist.json ./allowlist.json
diff ${BACKUP_BEDROCK}/permissions.json ./permissions.json
→必要に応じてコピーする


# 起動
systemctl start minecraft

これで更新作業は完了です!接続を試してみてください。

まとめ

そこまで重くない遊び方であれば、ミニマムの環境でもわりと動きますね。