【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
これで更新作業は完了です!接続を試してみてください。
まとめ
そこまで重くない遊び方であれば、ミニマムの環境でもわりと動きますね。