ConoHaのVPSで作成したVPS(Ubuntu 22.04.3 LTS)にマインクラフトのMinecraft Bedrock Dedicated Server(統合版マインクラフト)のマルチサーバ)をインストールする方法です。
今回は端末多重化ソフトウェアであるtmux上でBedrock Serverを動作させていきます。
unzipとtmuxをインストール
Bedrock Serverはbedrock-server-x.xx.xx.xx.zipというように、zipで圧縮された形で提供されています。
ダウンロードしたzipファイルを解凍するために必要なunzipと、Bedrock Serverを動作させるときに使用するtmuxをインストールします。
$ sudo apt install unzip tmux
管理用ユーザ作成
Bedrock Serverの起動や停止などを行うための管理用ユーザを作成します。
今回はbedrockというユーザ名で作成していきます。
$ sudo adduser bedrock
10132ポート開放
Bbedrock Serverで使用するポート(19132/udp)を、通信可能な状態にするためファイアウォールの設定を変更します。
$ sudo ufw allow 19132/udp
$ sudo ufw statusでファイアウォールの設定を表示させて、19132/udpが追加されていることを確認します。
$ sudo ufw status | grep 19132 19132/udp ALLOW Anywhere 19132/udp (v6) ALLOW Anywhere (v6)
Bedrock Serverインストール
インストール用ディレクトリ作成
Bedrock Serverをインストールするためのディレクトリを作成します。
今回は管理用ユーザのホームディレクトリに、minecraftと言う名前でディレクトリを作成していきます。
$ su - bedrock $ mkdir minecraft $ cd minecraft
ダウンロードと解凍
Bedrock ServerのダウンロードはMinecraft公式サイトの下記ページから行うことができます。
webブラウザでアクセスするとダウンロード用のページが表示されて、そこにWindowsとUbuntu用のソフトウェアをダウンロードボタンがあります。
WebブラウザがChromeの場合はUbuntu用のダウンロードボタンを右クリックして、表示されるメニューから「リンクのアドレスをコピー」を選択します。(プレビュー用もあるので注意してください)
※Edgeの場合は「リンクのコピー」を選択します。
curlコマンドでコピーしたURLからbedrock_serverをダウンロードします。
今回はコピーしたダウンロード用リンクのアドレスが、「https://minecraft.azureedge.net/bin-linux/bedrock-server-1.20.51.01.zip」だったので下記のようにcurlを実行しています。
URLのzipファイル部分はダウンロードするバージョンによって変わるので、そのつど適宜読み替えてください。
$ curl -L -O https://minecraft.azureedge.net/bin-linux/bedrock-server-1.20.51.01.zip
ダウンロードされたデータはzipで圧縮されているので、unzipで解凍してください。
解凍する時に-dオプションで解凍先のディレクトリを指定しています。
指定するディレクトリ名は、どのバージョンのBedrock Serverが格納されているのかが判別できる名前にしています。
$ unzip bedrock-server-1.20.51.01.zip -d ./bedrock-server-1.20.51.01
起動
ダウンロードしたデータで問題なくBedrock Serverを起動できるか確認します。
解凍したディレクトリに移動して、「LD_LIBRARY_PATH=. ./bedrock_server」と実行することでBedrock Serverを起動させることができます。
正常に起動すると、Server started.と表示されます。
$ cd bedrock-server-1.20.51.01
$ LD_LIBRARY_PATH=. ./bedrock_server
NO LOG FILE! - setting up server logging...
[2024-01-07 15:31:20:239 INFO] Starting Server
[2024-01-07 15:31:20:239 INFO] Version: 1.20.51.01
##### 中略 #####
[2024-01-07 15:31:22:865 INFO] Server started. ### 起動したことが確認できます
[2024-01-07 15:31:22:865 INFO] ================ TELEMETRY MESSAGE ===================
[2024-01-07 15:31:22:865 INFO] Server Telemetry is currently not enabled.
[2024-01-07 15:31:22:866 INFO] Enabling this telemetry helps us improve the game.
[2024-01-07 15:31:22:866 INFO]
[2024-01-07 15:31:22:866 INFO] To enable this feature, add the line 'emit-server-telemetry=true'
[2024-01-07 15:31:22:866 INFO] to the server.properties file in the handheld/src-server directory
[2024-01-07 15:31:22:866 INFO] ======================================================
動作確認
次に、Minecraftのクライアントから実際にログインして、問題なく遊ぶことが出来るかを確認してください。
ユーザがログインした際には、下記のようなログが表示されます。(xuidなどはマスクしています)
[2024-01-07 17:15:19:164 INFO] Player connected: tamohiko, xuid: xxxxxxxxxxxxxxxx [2024-01-07 17:15:26:237 INFO] Player Spawned: tamohiko xuid: xxxxxxxxxxxxxxxx, pfid: xxxxxxxxxxxxxxxx
停止
動作確認が終わったらstopと入力してBedrock Serverを停止してください。
stop [2024-01-07 17:32:56:456 INFO] Server stop requested. [2024-01-07 17:32:56:482 INFO] Stopping server... Quit correctly
TELEMETRY MESSAGEについて
起動時にTELEMETRY MESSAGEというメッセージが表示されていますが、これはサーバのテレメトリ機能が無効化されているというメッセージです。
テレメトリ機能とは、ソフトウェアの情報を開発者側に送る機能のことで、送られる情報はソフトウェアの改善のために利用されます。
この機能は特に有効化しなくてもbedrock-serverの動作に支障はありませんので、そのままにしておいても問題ありません。
毎回メッセージが出るのが嫌でテレメントリ機能を有効化したい場合は、表示されているメッセージにあるように、server.propertiesにemit-server-telemetry=trueという設定を追加してください。
$ cp -p server.properties server.properties_$(date +%Y%m%d-%H%M%S) $ vi server.properties
最後に以下の内容を追記します。
emit-server-telemetry=true
自動起動設定
Bedrock Serverの起動に問題がなければ、サーバ起動時に自動的にBedrock Serverを起動できるよう設定を行っていきます。
シンボリックリンク作成
シンボリックリンクを作成して、Bedrock Serverをバージョンアップしてもスクリプトの書き換えを行わなくても良いようにします。
$ cd /home/bedrock/minecraft $ ln -s ./bedrock-server-1.20.51.01 bedrock-server $ ls -l bedrock-server lrwxrwxrwx 1 bedrock bedrock 27 Jan 7 17:40 bedrock-server -> ./bedrock-server-1.20.51.01
Bedrock Server管理スクリプト作成
Bedrock Serverの起動・停止・バックアップを行うためのスクリプトを作成します。
$ vi bedrock_script.sh
スクリプト内で設定している変数の説明です。
環境にあわせて変更する箇所があれば適宜変更してください。
変数 | 設定内容 |
---|---|
USERNAME | bedrock_server実行ユーザ設定 |
SESSION_NAME | tumxのセッションに指定する名前を設定 |
BEDROCK_PATH | bedrock_serverがインストールされているディレクトリを設定 |
LD_LIBRARY_PATH | LD_LIBRARY_PATHを設定 |
SERVICE | 実行するbedrock_serverを設定 |
BK_PATH | バックアップを相対パスで取得するためにtar -Cに設定するディレクトリ |
BK_DIR | バックアップしたデータを保管するディレクトリ |
BK_TIME | バックアップを取得した日時 |
FULL_BK_NAME | 完全バックアップで取得したデータにつける名前 |
SIMPLE_BK_NAME | 簡易バックアップで取得したデータにつける名前 |
BK_FILE | 簡易バックアップ対象データ |
BK_GEN | バックアップしたデータの保存日数 |
スクリプトの内容は下記のようになります。
#!/bin/bash # # bedrock_server start/stop/backup script # # bedrock_server 実行ユーザ USERNAME='bedrock' # session名 SESSION_NAME='bedrock' # bedrock_serverインストールディレクトリ BEDROCK_PATH='/home/bedrock/minecraft/bedrock-server' # LD_LIBRARY_PATH設定 LD_LIBRARY_PATH="$BEDROCK_PATH" # 実行する bedrock_server SERVICE="$BEDROCK_PATH/bedrock_server" ## バックアップ用設定 # バックアップのベースディレクトリ BK_PATH='/home/bedrock/minecraft' # バックアップ格納ディレクトリ BK_DIR="$BK_PATH/bedrock_backup" # バックアップ取得時間 BK_TIME=`date +%Y%m%d-%H%M%S` # 完全バックアップデータ名 FULL_BK_NAME="$BK_DIR/bedrock_full_backup_${BK_TIME}.tar.gz" # 簡易パックアップデータ名 SIMPLE_BK_NAME="$BK_DIR/bedrock_simple_backup_${BK_TIME}.tar" # 簡易バックアップ対象データ BK_FILE="./bedrock-server/worlds \ ./bedrock-server/valid_known_packs.json \ ./bedrock-server/permissions.json \ ./bedrock-server/server.properties \ ./bedrock-server/allowlist.json" # バックアップデータ保存日数 BK_GEN="3" cd $BEDROCK_PATH if [ ! -d $BK_DIR ]; then mkdir $BK_DIR fi ME=`whoami` if [ $ME != $USERNAME ]; then echo "Please run the $USERNAME user." exit fi # 開始処理 start() { if pgrep -u $USERNAME -f $SERVICE > /dev/null; then echo "$SERVICE is already running!" else echo "Starting $SERVICE..." tmux new-session -d -s $SESSION_NAME tmux send-keys -t $SESSION_NAME:0 "LD_LIBRARY_PATH=$LD_LIBRARY_PATH $SERVICE" C-m fi } # 停止処理 stop() { if pgrep -u $USERNAME -f $SERVICE > /dev/null; then echo "Stopping $SERVICE" tmux send-keys -t $SESSION_NAME:0 "say SERVER SHUTTING DOWN IN 30 SECONDS." C-m sleep 30 tmux send-keys -t $SESSION_NAME:0 "stop" C-m sleep 10 echo "Stopped bedrock_server" else echo "$SERVICE is not running!" exit fi while : do if pgrep -u $USERNAME -f $SERVICE > /dev/null; then echo "Stopping $SERVICE" sleep 10 else tmux kill-session -t $SESSION_NAME echo "Stoped $SERVICE" break fi done } # 簡易バックアップ処理 s_backup() { if pgrep -u $USERNAME -f $SERVICE > /dev/null; then echo "Backup start minecraft data..." tmux send-keys -t $SESSION_NAME:0 "say SERVER SHUTTING DOWN IN 30 SECONDS. Saving map..." C-m sleep 30 tmux send-keys -t $SESSION_NAME:0 "stop" C-m while : do if pgrep -u $USERNAME -f $SERVICE > /dev/null; then echo "Stopping $SERVICE" sleep 30 else echo "Stopped bedrock_server" echo "Simple Backup start ..." tar cfv $SIMPLE_BK_NAME -C $BK_PATH $BK_FILE gzip -f $SIMPLE_BK_NAME echo "Simple Backup compleate!" find $BK_DIR -name "bedrock_simple_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \; break fi done echo "Starting $SERVICE..." tmux send-keys -t $SESSION_NAME:0 "$SERVICE" C-m else echo "Simple Backup start ..." tar cfv $SIMPLE_BK_NAME -C $BK_PATH $BK_FILE gzip -f $SIMPLE_BK_NAME echo "Simple Backup compleate!" find $BK_DIR -name "bedrock_simple_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \; fi } # 完全バックアップ処理 f_backup() { if pgrep -u $USERNAME -f $SERVICE > /dev/null; then echo "Full backup start minecraft data..." tmux send-keys -t $SESSION_NAME:0 "say SERVER SHUTTING DOWN IN 30 SECONDS. Saving map..." C-m sleep 30 tmux send-keys -t $SESSION_NAME:0 "stop" C-m while : do if pgrep -u $USERNAME -f $SERVICE > /dev/null; then echo "Stopping $SERVICE" sleep 30 else echo "Stopped bedrock_server" echo "Full Backup start ..." tar cfvhz $FULL_BK_NAME -C $BK_PATH ./bedrock-server echo "Full Backup compleate!" find $BK_DIR -name "bedrock_full_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \; break fi done echo "Starting $SERVICE..." tmux send-keys -t $SESSION_NAME:0 "$SERVICE" C-m else echo "Full Backup start ..." tar cfvhz $FULL_BK_NAME -C $BK_PATH ./bedrock-server echo "Full Backup compleate!" find $BK_DIR -name "bedrock_full_backup_*.tar.gz" -type f -mtime +$BK_GEN -exec rm {} \; fi } # 起動状態確認処理 status() { if pgrep -u $USERNAME -f $SERVICE > /dev/null; then echo "$SERVICE is already running!" exit else echo "$SERVICE is not running!" exit fi } case "$1" in start) echo "Bedrock Server Start" start ;; stop) echo "Bedrock Server Stop" stop ;; s_backup) echo "Simple Backup Start" s_backup ;; f_backup) echo "Full Backup Start" f_backup ;; status) echo "Bedrock Server Check Status" status ;; *) echo "Invalid option" echo "Usage: $0 {start|stop|s_backup|f_backup|status}" esac
スクリプト使用方法
スクリプトを実行する際に「start」「stop」「s_backup」「f_backup」「status」を引数として指定します。
- start 起動
- stop 停止
- s_backup 簡易バックアップ
- f_backup 完全バックアップ
- status 起動状況確認
bedrock_script.sh 引数
パーミッションの設定
スクリプトを実行可能にするためにパーミッションを設定します。
$ chmod 744 bedrock_script.sh
スクリプトの動作確認
作成したスクリプトで「bedrock_server」の起動および停止の動作確認を行っていきます。
起動確認
スクリプトを実行して、正常にBedrock Serverが起動するか確認していきます。
スクリプトを実行すると「SESSION_NAME」で設定した名前で「tmux」のセッションが作成され、そこで「bedrock_server」が起動されます。
「-x」オプションをつけてるとスクリプトの実行状況が表示されますので、スクリプトが正常に動作しない場合の問題切り分けに役立ててください。
動作の確認が終わった後は「-x」オプションをつける必要はありません。
$ sh -x ./bedrock_script.sh start
tmuxのセッションが起動しているかは「tmux ls」を実行することで確認することができます。
下記の例では、1つのセッションが作成されていることが確認できます。
$ tmux ls bedrock: 1 windows (created Sun Jan 7 17:49:55 2024)
tmuxのセッションへ接続(Attach)
「tmux a」と実行することでセッションに接続(Attach)することができるので、正常にBedrock Serverが起動しているか確認してください。
$ tmux a
正常にBedrock Serverが起動しているとtmuxのセッションに接続することができ、Bedrock Serverの起動ログが表示されている状態になります。
LD_LIBRARY_PATH=/home/bedrock/minecraft/bedrock-server /home/bedrock/minecraft/bedrock-server/bedrock_server $ LD_LIBRARY_PATH=/home/bedrock/minecraft/bedrock-server /home/bedrock/minecraft/bedrock-server/bedrock_server NO LOG FILE! - setting up server logging... [2024-01-08 23:57:52:949 INFO] Starting Server [2024-01-08 23:57:52:949 INFO] Version: 1.20.51.01 ##### 中略 ##### [2024-01-08 23:57:54:930 INFO] IPv4 supported, port: 19132: Used for gameplay and LAN discovery [2024-01-08 23:57:54:930 INFO] IPv6 supported, port: 19133: Used for gameplay [2024-01-08 23:57:54:946 INFO] Server started. [2024-01-08 23:57:54:946 INFO] ================ TELEMETRY MESSAGE =================== [2024-01-08 23:57:54:946 INFO] Server Telemetry is currently not enabled. [2024-01-08 23:57:54:946 INFO] Enabling this telemetry helps us improve the game. [2024-01-08 23:57:54:946 INFO] [2024-01-08 23:57:54:946 INFO] To enable this feature, add the line 'emit-server-telemetry=true' [2024-01-08 23:57:54:946 INFO] to the server.properties file in the handheld/src-server directory [2024-01-08 23:57:54:946 INFO] ======================================================
tmuxのセッションから抜ける(Detach)
起動確認ができたら、「Ctrl」+「b」を押下した後に「d」を押下して現在接続しているセッションから抜けて(Detach)ください。
セッションから抜ける(Detach)と[detached]と表示され、元の状態にもどることができます。
[detached (from session bedrock)] $
停止確認
起動することが確認できたら、Bedrock Serverを停止させる動作の確認を行っていきます。
$ sh -x ./bedrock_script.sh stop
正常に停止すると起動時に作成されたセッションがなくなります。
$ tmux ls no server running on /tmp/tmux-1001/default
no server runningと表示さて、セッションが無いことが確認できます。
バックアップ確認
Bedrock Serverのデータをバックアップするための機能を確認します。
なお、バックアップはBedrock Serverを一度停止させてから行われますので注意してください。
バックアップされたデータはBK_DIRに設定されているディレクトリに格納されます。
簡易バックアップ
スクリプト内のBK_FILEに設定されているデータをバックアップします。
- worldsディレクトリ
- valid_known_packs.json
- permissions.json
- server.properties
- allowlist.json
$ sh -x ./bedrock_script.sh s_backup
/home/bedrock/minecraft/bedrock_backupディレクトリにバックアップデータが格納されますので、実際に解凍してデータがバックアップされていることを確認してください。
$ ls bedrock_backup/ bedrock_simple_backup_20240111-110050.tar.gz
バックアップされているデータの中身を「tar tf」コマンドで確認することができます。
$ tar tf bedrock_backup/bedrock_simple_backup_20240111-110050.tar.gz ./bedrock-server/worlds/ ./bedrock-server/worlds/Bedrock level/ ./bedrock-server/worlds/Bedrock level/level.dat_old ./bedrock-server/worlds/Bedrock level/level.dat ./bedrock-server/worlds/Bedrock level/levelname.txt ./bedrock-server/worlds/Bedrock level/db/ ./bedrock-server/worlds/Bedrock level/db/000113.ldb ./bedrock-server/worlds/Bedrock level/db/000111.log ./bedrock-server/worlds/Bedrock level/db/CURRENT ./bedrock-server/worlds/Bedrock level/db/MANIFEST-000109 ./bedrock-server/valid_known_packs.json ./bedrock-server/permissions.json ./bedrock-server/server.properties ./bedrock-server/allowlist.json
Bedrock Serverが起動している状態でバックアップを行った場合、バックアップ処理の終了後に自動的にBedrock Serverを起動させる設定になっていますので、起動確認の方もあわせて行っておいてください。
完全バックアップ
BEDROCK_PATHに設定されているBedrock Serverのフォルダをまるごとバックアップします。
$ sh -x ./bedrock_script.sh f_backup
バックアップデータが作成されている確認して下さい。
$ ls bedrock_backup/ bedrock_full_backup_20240111-111228.tar.gz
バックアップデータの中身も確認しておきます。
$ tar tf bedrock_backup/bedrock_full_backup_20240111-111228.tar.gz
Bedrock Serverが起動している状態でバックアップを行った場合、バックアップ処理の終了後に自動的にBedrock Serverを起動させる設定になっていますので、起動確認の方もあわせて行っておいてください。
データのリストア方法
バックアップされたデータを解凍すると、bedrock-serverというディレクトリが出てきます。
その中にバックアップされたデータが格納されていますので、リストアしたいデータを選んでコピーするなりしてください。
/home/bedrock/minecraftディレクトリ解凍してしまうと、既存のデータが上書きされてしまうので、解凍する場所には注意してください。
実際に解凍してみます。
$ cd /home/bedrock/minecraft/bedrock_backup $ tar xzfv bedrock_simple_backup_20240111-110050.tar.gz ./bedrock-server/worlds/ ./bedrock-server/worlds/Bedrock level/ ./bedrock-server/worlds/Bedrock level/level.dat_old ./bedrock-server/worlds/Bedrock level/level.dat ./bedrock-server/worlds/Bedrock level/levelname.txt ./bedrock-server/worlds/Bedrock level/db/ ./bedrock-server/worlds/Bedrock level/db/000113.ldb ./bedrock-server/worlds/Bedrock level/db/000111.log ./bedrock-server/worlds/Bedrock level/db/CURRENT ./bedrock-server/worlds/Bedrock level/db/MANIFEST-000109 ./bedrock-server/valid_known_packs.json ./bedrock-server/permissions.json ./bedrock-server/server.properties ./bedrock-server/allowlist.json
解凍するとbedrock-serverというディレクトリが出てきます。
$ ls -la total 792 drwxrwxr-x 3 bedrock bedrock 4096 Jan 11 11:04 . drwxrwxr-x 4 bedrock bedrock 4096 Jan 11 10:58 .. drwxrwxr-x 3 bedrock bedrock 4096 Jan 11 11:04 bedrock-server -rw-rw-r-- 1 bedrock bedrock 795072 Jan 11 11:01 bedrock_simple_backup_20240111-110050.tar.gz
systemd登録用ファイル作成
自動起動の設定をsystemdに登録するためのファイル「/etc/systemd/system/bedrock_server.service」を作成します。
ファイルの作成はsudoコマンドを使いますので、sudoできるにユーザになってから行っていきます。
ここまで手順通りに作業を行っている場合は、現在はsuでbedrockユーザになって作業を行っているはずなので、いったんexitコマンドでログアウトしてsudoできるユーザに戻ってください。
$ exit logout
次に、sudoを使ってファイルを作成していきます。
$ sudo vi /etc/systemd/system/bedrock_server.service
設定説明
「bedrock_server」を動作させるユーザやスクリプトのパスを変更している場合は、下記の部分を適宜読み替えて設定ファイルを作成してください。
変数 | 説明 |
---|---|
User | bedrock_server実行ユーザ |
ExecStart | bedrock_server 起動コマンド |
ExecStop | bedrock_server 停止コマンド |
作成するファイルの内容は下記の通りとなります。
[Unit] Description=Minecraft Bedrock Server After=network.target local-fs.target [Service] Type=forking User=bedrock ExecStart=/home/bedrock/minecraft/bedrock_script.sh start ExecStop=/home/bedrock/minecraft/bedrock_script.sh stop [Install] WantedBy=multi-user.target
自動起動設定
systemd登録用のファイルの作成が終わりましたら、「systemctl enable」コマンドで自動起動の登録を行います。
$ sudo systemctl enable bedrock_server.service
動作確認
自動起動の設定が終わりましたら、実際にサーバを再起動して「bedrock_server」が自動的に起動してくるか確認をしてください。
$ sudo reboot
問題なく起動してくればインストール作業は完了となります。
自動起動しない場合
自動起動がうまくいかない場合は「systemctl status bedrock_server」とかでログを表示させてみると、上手く動作しない原因がわかるかもしれません。
コメント