子供とマイクラをやり始めて、時間を合わせずに進められたほうが便利なのでサーバーを建てることにした。
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でポートを開ける。上記の通り、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