Ubuntu Server 22.04にのMinecraft Bedrock Dedicated Server(統合版マインクラフト)をインストールする方法

bedrock_server

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公式サイトの下記ページから行うことができます。

https://www.minecraft.net/ja-jp/download/server/bedrock

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」とかでログを表示させてみると、上手く動作しない原因がわかるかもしれません。

コメント

タイトルとURLをコピーしました