chatGPTでマイクラ(統合版)サーバのバージョンアップを半自動化してみた
このnoteでは、マイクラ(統合版)を更新するスクリプトの完成版と、うちのサーバ環境を載せてます。
chatGPTに頼むまでの背景
息子が大好きなマイクラ統合版。友達と遊びたいとのことで、AWSのEC2に自前のサーバを立ててあげました。
ところが面倒なのがバージョンアップ作業。バージョンアップの度に公式サイトからzipファイルをDLして入れ替え作業をしないといけないそうで。入替時にはマイクラサーバ停止、設定ファイル、ワールドを消さないように…仕事の合間にやるには非常に手間です。(その割にバージョンアップ頻度高めで親泣かせ)
そこで、プロンプト考えずに適当にchatGPTに投げていったら良い感じの半自動化シェルができたのでプロンプトと完成品を載せておきます。
プロンプトと出力
投げやりな依頼です。
#!/bin/bash
# 新しいバージョンのMinecraft Bedrock Serverをダウンロード
wget https://minecraft.azureedge.net/bin-linux/bedrock-server-1.17.10.04.zip
# サーバーを停止する
systemctl stop minecraft-bedrock.service
# 古いバージョンのMinecraft Bedrock Serverをバックアップする
cp -r /opt/minecraft-bedrock /opt/minecraft-bedrock-backup
# 新しいバージョンのMinecraft Bedrock Serverを展開する
unzip bedrock-server-1.17.10.04.zip -d /opt/minecraft-bedrock
# サーバーの設定を更新する
# ...
# サーバーを起動する
systemctl start minecraft-bedrock.service
お、良い感じ!すごい。
だけどこのスクリプトの問題点
うちの環境に合ってない
バージョンが固定
ログファイルを出していない
教えてませんからいきなり完璧なものはできませんよねと納得。
完成版 マイクラ(統合版) をバージョンアップするシェル
上記の問題点があるので1つずつ指示をして改善してできたのがこちら。追加で3往復のやり取り、製作時間10分未満、動作確認に15分。ファイル名はupdate_server.shとしました。
#!/bin/bash
# 引数で指定されたバージョンを取得する
version=$1
# 引数が指定されていない場合は終了する
if [ -z "$version" ]; then
echo "Usage: $0 <version>"
exit 1
fi
# 現在の日付を取得する
current_date=$(date "+%Y-%m-%d %H:%M:%S")
# シェル開始のログを書き込む
echo "Update started at $current_date" >> /opt/bedrock/update.log
# 最新バージョンのダウンロードリンクを取得する
download_link="https://minecraft.azureedge.net/bin-linux/bedrock-server-$version.zip"
# 最新バージョンのMinecraft Bedrock Serverをダウンロードする
echo "Downloading the latest version of Minecraft Bedrock Server" >> /opt/bedrock/update.log
wget "$download_link" -O bedrock-server.zip || { echo "Failed to download the latest version of Minecraft Bedrock Server" >> /opt/bedrock/update.log ; exit 1; }
# サーバーを停止する
echo "Stopping Minecraft Bedrock Server" >> /opt/bedrock/update.log
/opt/bedrock/ctrl_bedrock.sh stop || { echo "Failed to stop Minecraft Bedrock Server" >> /opt/bedrock/update.log ; exit 1; }
# 古いバージョンのMinecraft Bedrock Serverをバックアップする
backup_dir="/opt/bedrock/bedrock_backup"
backup_file="$backup_dir/bedrock-server$(date +%Y%m%d).tar.gz"
mkdir -p "$backup_dir"
echo "Backing up the current Minecraft Bedrock Server" >> /opt/bedrock/update.log
tar zcpf "$backup_file" -C /opt/bedrock bedrock-server || { echo "Failed to backup Minecraft Bedrock Server" >> /opt/bedrock/update.log ; exit 1; }
# 新しいバージョンのMinecraft Bedrock Serverを展開する
echo "Extracting the latest version of Minecraft Bedrock Server" >> /opt/bedrock/update.log
rm -rf /opt/bedrock/tmp
mkdir /opt/bedrock/tmp
unzip bedrock-server.zip -d /opt/bedrock/tmp || { echo "Failed to extract the latest version of Minecraft Bedrock Server" >> /opt/bedrock/update.log ; exit 1; }
rm /opt/bedrock/tmp/server.properties
rm /opt/bedrock/tmp/permissions.json
rm /opt/bedrock/tmp/allowlist.json
# 新しいバージョンのMinecraft Bedrock Serverをコピーする
echo "Copying the latest version of Minecraft Bedrock Server" >> /opt/bedrock/update.log
cp -r /opt/bedrock/tmp/* /opt/bedrock/bedrock-server/ || { echo "Failed to copy the latest version of Minecraft Bedrock Server" >> /opt/bedrock/update.log ; exit 1; }
# サーバーを起動する
echo "Starting Minecraft Bedrock Server" >> /opt/bedrock/update.log
/opt/bedrock/ctrl_bedrock.sh start || { echo "Failed to start Minecraft Bedrock Server" >> /opt/bedrock/update.log ; exit 1; }
# 一時ディレクトリを削除する
echo "Deleting temporary files" >> /opt/bedrock/update.log
rm -rf /opt/bedrock/tmp
rm -f /opt/bedrock/bedrock-server.zip
# シェル終了のログを書き込む
current_date=$(date "+%Y-%m-%d %H:%M:%S")
echo "Update completed at $current_date" >> /opt/bedrock/update.log
実行方法
このスクリプトを実行するには、ターミナルでスクリプトが保存されているディレクトリに移動して、以下のコマンドを実行します。
update_server.sh <version>
update_server.shはこのスクリプトのファイル名、<version>はアップデートする Minecraft Bedrock Server のバージョン番号です。
例えば、update_server.shという名前のスクリプトファイルがあり、バージョン1.17.10.02の Minecraft Bedrock Server をアップデートしたい場合は、以下のようにコマンドを実行します。
update_server.sh 1.17.10.02
なお、スクリプトファイルに実行権限がない場合は、事前に以下のコマンドで実行権限を付与しておく必要があります。
chmod +x update_server.sh
処理概要
1.引数で指定されたバージョンを取得する
2.引数が指定されていない場合は終了する
3.現在の日付を取得する
4.シェル開始のログを書き込む
5.最新バージョンのダウンロードリンクを取得する
6.最新バージョンのMinecraft Bedrock Serverをダウンロードする
7.サーバーを停止する
8.古いバージョンのMinecraft Bedrock Serverをバックアップする
9.新しいバージョンのMinecraft Bedrock Serverを展開する
10.新しいバージョンのMinecraft Bedrock Serverをコピーする
11.サーバーを起動する
12.一時ディレクトリを削除する
13.シェル終了のログを書き込む
課題や改善点
実行にあたりバージョンを調べて引数に渡さないといけないのは面倒ですね。とはいえ、マイクラの公式サイトのウェブページはcurlやwgetでアクセス禁止になっていたので、バージョンは自力で確認する必要がありました。
これくらいなら息子でもできるから良いかな、と私的には概ね満足です。
(参考情報)私の環境
AWS EC2上のubuntuサーバ
フォルダ構成は次の通り。今回作成したのはupdate_server.shです。環境差異はchatGPTにうちの環境に合わせて変更してとお願いすれば柔軟に修正してもらえますね。
$ pwd
/opt/bedrock
$ ls
bedrock-server bedrock_backup change_world.sh ctrl_bedrock.sh update.log update_server.sh
$ ls bedrock-server
Dedicated_Server.txt definitions premium_cache valid_known_packs.json
allowlist.json development_behavior_packs release-notes.txt world_templates
bedrock_server development_resource_packs resource_packs worlds
bedrock_server_how_to.html development_skin_packs s_bedrock_server worlds_bk
bedrock_server_symbols.debug log server.properties
behavior_packs minecraftpe structures
config permissions.json treatments