子供とマイクラをやり始めて、時間を合わせずに進められたほうが便利なのでサーバーを建てることにした。
OCI側の用意
armを使いたかったけど全然空きがない。AMDでも動くことは動くのでこちらにする。
bedrock serverのインストールから起動まで
インストール
sshでログインして作業する。
mkdir minecraft cd minecraft/ curl -O https://minecraft.azureedge.net/bin-linux/bedrock-server-1.20.51.01.zip sudo apt install unzip unzip bedrock-server-1.20.51.01.zip -d bedrock-server-1.20.51.01 ln -s bedrock-server-1.20.51.01 latest
バージョンアップもあるので、シンボリックリンクを作成している。これで、 /home/ubuntu/minecraft/latest
がサーバー一式のフォルダーになった。
iptables
iptablesでポートを開ける。上記の通り、OCI側でセキュリティグループでの許可も設定済みなので、これでクライアントからサーバーへの接続ができる。
sudo ufw allow 19132/udp sudo ufw reload sudo shutdown -r now
reloadしたら反映されるはずなのに反映されず。とりあえずでrebootしたら、なんか接続できた。ヨシ!
起動の確認
cd latest LD_LIBRARY_PATH=. ./bedrock_server
こういうのが出ていたら成功。
NO LOG FILE! - setting up server logging... [2024-05-06 03:41:38:889 INFO] Starting Server [2024-05-06 03:41:38:889 INFO] Version: 1.20.51.01 [2024-05-06 03:41:38:889 INFO] Session ID: 577dbb5d-08f2-4fa1-9986-136465ee936c [2024-05-06 03:41:38:889 INFO] Build ID: 24130113 [2024-05-06 03:41:38:889 INFO] Branch: r/20_u8 [2024-05-06 03:41:38:889 INFO] Commit ID: a9081c5429038dcf3f26269f7351d89f75cfb331 [2024-05-06 03:41:38:889 INFO] Configuration: Publish [2024-05-06 03:41:38:890 INFO] Level Name: foobar [2024-05-06 03:41:38:892 INFO] No CDN config file found for dedicated server [2024-05-06 03:41:38:892 INFO] Game mode: 0 Survival [2024-05-06 03:41:38:892 INFO] Difficulty: 1 EASY [2024-05-06 03:41:38:893 INFO] Content logging to console is enabled. [2024-05-06 03:41:39:220 INFO] Opening level 'worlds/xxxxxxxx/db' [2024-05-06 03:41:44:228 INFO] IPv4 supported, port: 19132: Used for gameplay and LAN discovery [2024-05-06 03:41:44:228 INFO] IPv6 supported, port: 19133: Used for gameplay [2024-05-06 03:41:44:243 INFO] Server started. [2024-05-06 03:41:44:243 INFO] ================ TELEMETRY MESSAGE =================== [2024-05-06 03:41:44:243 INFO] Server Telemetry is currently not enabled. [2024-05-06 03:41:44:243 INFO] Enabling this telemetry helps us improve the game. [2024-05-06 03:41:44:243 INFO] [2024-05-06 03:41:44:243 INFO] To enable this feature, add the line 'emit-server-telemetry=true' [2024-05-06 03:41:44:243 INFO] to the server.properties file in the handheld/src-server directory [2024-05-06 03:41:44:243 INFO] ======================================================
こういうのが出ていたら失敗。メッセージを読んで修正する。
これはカレントワーキングディレクトリが bedrock-server-1.20.51.01
じゃなかった。
NO LOG FILE! - setting up server logging... [2024-05-06 03:41:05:497 INFO] Starting Server [2024-05-06 03:41:05:497 INFO] Version: 1.20.51.01 [2024-05-06 03:41:05:497 INFO] Session ID: 17a5ab6b-13b2-49df-886a-c867fb5329d9 [2024-05-06 03:41:05:497 INFO] Build ID: 24130113 [2024-05-06 03:41:05:497 INFO] Branch: r/20_u8 [2024-05-06 03:41:05:497 INFO] Commit ID: a9081c5429038dcf3f26269f7351d89f75cfb331 [2024-05-06 03:41:05:497 INFO] Configuration: Publish [2024-05-06 03:41:05:497 ERROR] Error reading file: server.properties [2024-05-06 03:41:05:497 ERROR] Could not load server.properties file, Please check if the current working directory is the same as the bedrock_server directory. [2024-05-06 03:41:05:497 INFO] Server stop requested.
ファイル編集
接続許可ユーザーやサーバー設定などの各種ファイルを希望に応じて編集。
vim allowlist.json vim permissions.json vim server.properties
systemdでサーバー起動
OCIのインスタンスはしばらく使ってないとシャットダウンされるみたい。サーバー起動時に自動で起動してくれる方が便利なのでsystemdを使う。
/etc/systemd/system/minecraft_server.service
にファイルを作り、以下の内容を記述。
[Unit] Description=Minecraft bedrock server After=network.target [Service] User=ubuntu Group=ubuntu Type=simple WorkingDirectory=/home/ubuntu/minecraft Environment=LD_LIBRARY_PATH=. ExecStart=/home/ubuntu/minecraft/bedrock-server Restart=always [Install] WantedBy=multi-user.target
以下で設定ファイルを読み込み、有効化、状況確認、起動をする。
sudo systemctl daemon-reload sudo systemctl enable minecraft_server sudo systemctl status minecraft_server sudo systemctl start minecraft_server sudo systemctl status minecraft_server
最後のstatus確認で、 Active: active (running)
と出ていればOK.
● minecraft_server.service - Minecraft bedrock server Loaded: loaded (/etc/systemd/system/minecraft_server.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2024-05-06 03:46:46 UTC; 49min ago Main PID: 1141547 (bedrock_server) Tasks: 14 (limit: 1053) Memory: 129.8M CPU: 1min 22.012s CGroup: /system.slice/minecraft_server.service └─1141547 /home/ubuntu/minecraft/latest/bedrock_server
activeじゃなかったら、次のコマンドでログが確認できるので何が起きたか確認して修正する。
journalctl -xeu minecraft_server
既存のワールドデータの展開
Windowsからのデータ移行なので、「世界をエクスポート」からエクスポートしたファイルをサーバーに持っていき、worldsフォルダー配下に置けばOK。
unzip foobar.mcworld -d foobar
ワールドデータのバックアップ
OCIのオブジェクトストレージに置く。
instance principalというのを使うとAWSでのIAMロールっぽいのが使える。
- ダイナミックグループ作成
- ポリシー作成
ocicliをインストール
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)" oci -v oci setup config
疎通確認
oci os ns get --auth instance_principal OCI_CLI_AUTH=instance_principal oci os object put --bucket-name bucket-20240117-2254 --file fuga.txt export OCI_CLI_AUTH=instance_principal
スクリプトにまとめる
/home/ubuntu/backup.sh
mkdir -p /home/ubuntu/minecraft_worlds_backup filename=/home/ubuntu/minecraft_worlds_backup/world_backup_$(date '+%Y%m%d-%H%M%S').tar.gz cd /home/ubuntu/minecraft/worlds/ tar -czvf $filename foobar export OCI_CLI_AUTH=instance_principal oci os object put --bucket-name bucket-20240117-2254 --file $filename
バックアップのタイマー起動
これもsystemdで管理する。
/etc/systemd/system/minecraft_backup.service
というファイルを作り、以下を記述。
[Unit] Description=Minecraft backup [Service] User=ubuntu Group=ubuntu Type=oneshot WorkingDirectory=/home/ubuntu ExecStart=/home/ubuntu/backup.sh
/etc/systemd/system/minecraft_backup.timer
というタイマー設定のファイルも作成。時間はなんでもいい。一日一回の起動。
[Unit] Description=Minecraft backup timer [Timer] OnCalendar=16:00 [Install] WantedBy=timers.target
サーバーと同じで、以下で読み込み、有効化、状況確認、起動をする。
sudo systemctl daemon-reload sudo systemctl enable minecraft_backup.timer sudo systemctl status minecraft_backup.timer sudo systemctl start minecraft_backup.timer sudo systemctl status minecraft_backup.timer
ジャーナルも見ておく。
journalctl -xeu minecraft_backup.timer
以下でタイマーの起動状況が確認できる。
systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES Mon 2024-05-06 09:30:04 UTC 4h 39min left Mon 2024-05-06 03:37:51 UTC 1h 12min ago fwupd-refresh.timer fwupd-refresh.service Mon 2024-05-06 12:08:22 UTC 7h left Mon 2024-05-06 03:37:04 UTC 1h 13min ago motd-news.timer motd-news.service Mon 2024-05-06 16:05:06 UTC 11h left Sun 2024-05-05 16:09:15 UTC 12h ago minecraft_backup.timer minecraft_backup.service Tue 2024-05-07 00:00:00 UTC 19h left Mon 2024-05-06 00:00:17 UTC 4h 49min ago dpkg-db-backup.timer dpkg-db-backup.service Tue 2024-05-07 00:00:00 UTC 19h left Mon 2024-05-06 00:00:17 UTC 4h 49min ago logrotate.timer logrotate.service Tue 2024-05-07 02:15:32 UTC 21h left Mon 2024-05-06 02:15:32 UTC 2h 34min ago update-notifier-download.timer update-notifier-download.service Tue 2024-05-07 02:31:17 UTC 21h left Mon 2024-05-06 02:31:17 UTC 2h 18min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service Tue 2024-05-07 10:25:21 UTC 1 day 5h left Mon 2024-05-06 03:46:42 UTC 1h 3min ago man-db.timer man-db.service Sun 2024-05-12 03:10:53 UTC 5 days left Sun 2024-05-05 03:11:17 UTC 1 day 1h ago e2scrub_all.timer e2scrub_all.service Mon 2024-05-13 00:37:45 UTC 6 days left Mon 2024-05-06 00:44:17 UTC 4h 5min ago fstrim.timer fstrim.service Mon 2024-05-13 09:11:46 UTC 1 week 0 days left Sun 2024-05-05 18:21:59 UTC 10h ago update-notifier-motd.timer update-notifier-motd.service 11 timers listed. Pass --all to see loaded but inactive timers, too.
バージョンの更新
最新をインストール
先にサーバーを止める。
sudo systemctl stop minecraft_server
更新版をインストール。
cd minecraft/ curl -O https://minecraft.azureedge.net/bin-linux/bedrock-server-1.21.1.03.zip export NEXT_VER=bedrock-server-1.21.1.03 unzip $NEXT_VER.zip -d $NEXT_VER unlink latest ln -s $NEXT_VER latest
データの移行
移行前にデフォルト設定が変更されてないかdiffを取りながらやる。
export PREV_VER=bedrock-server-1.20.81.01 diff $PREV_VER/allowlist.json $NEXT_VER/allowlist.json cp $PREV_VER/allowlist.json $NEXT_VER/allowlist.json diff $PREV_VER/permissions.json $NEXT_VER/permissions.json cp $PREV_VER/permissions.json $NEXT_VER/permissions.json
server.propertiesは内容が変わっている可能性が高いのでdiffを見て、cpか直接編集するか決める。
diff $PREV_VER/server.properties $NEXT_VER/server.properties cp $PREV_VER/server.properties $NEXT_VER/server.properties vim $NEXT_VER/server.properties
worldデータは丸ごとコピー。
cp -Rp $PREV_VER/worlds $NEXT_VER/
起動
sudo systemctl start minecraft_server
起動に失敗したらジャーナルを確認して問題を解決する。成功してもjournalは見ておいた方がいい。
journalctl -xeu minecraft_server