Minecraft Server Managerでマルチサーバを公開してみる

Minecraft Server Manager 0.8.16 Betaを試した。

Minecraft Server Managerとは

Minecraft Server Managerは本家のWikiで以下のような説明。

  • 動作環境はDebian/Ubuntuをサポート
  • MinecraftやBukkitサーバたちを管理できるスクリプト
  • 定期的にWorld Edit互換のバックアップを作成できる
  • “あと10秒でシャットダウンします”といったメッセージをプレーヤーに通知できる
  • Terminalからゲーム内のコマンド(“say”, “op”, “whitelist”など)が使える
  • すべてのコマンドがTabで補完されるので簡単に学習できる

http://msmhq.com/がサイト。複数のマイクラサーバを管理してコマンドであたらしいマイクラサーバを作成したり、開始したり、停止したりできるサーバ管理者向けのツールっぽい。ちょうどDebianサーバを持っているので1マイクラサーバでもいろいろ便利そうなので使ってみることに。

実際にDebianのサーバで動かしているが、コマンドのテストの多くはローカルの仮想環境にあるUbuntuで行った。

インストール

インストールコマンドだと途中でパッケージの更新(apt-get update; apt-get upgrade)が入るので関係のないソフトウェアも全部最新にさせられることに注意(嫌ならManual Installationをする)。wgetだけは先にsudo apt-get install wgetで入れとく。

$ wget -q http://git.io/Sxpr9g -O /tmp/msm && bash /tmp/msm
MSM INSTALL: Configure installation
Install directory [/opt/msm]: (リターン)
New server user to be created [minecraft]:(リターン)
Complete installation with these values? [y/N]: y(リターン)

上記のデフォルトでは/opt/msmにユーザminecraftでインストールすることになる。パッケージが更新され依存するscreen rsync zipがインストールされる。サイトではRedhutはwget -q http://git.io/lu0ULA -O /tmp/msm && bash /tmp/msmでと書いてあるのでCentOSでも動くのかもしれない。

No directory, logging in with HOME=/,ディレクトリがありません。HOME=/ としてログインしますと警告がうるさいのでminecraftユーザのホームディレクトリを作成しておく。

sudo mkdir /home/minecraft
sudo chown minecraft:minecraft /home/minecraft

コマンド

インストールが成功するとmsm helpを打てといわれる。MSMではすべての操作をmsm xxxxのような形で実行する。

セットアップコマンド

コマンド 説明
server list マイクラサーバを一覧
server create <name> 新しいマイクラサーバの生成
server delete <name> 存在するマイクラサーバの削除
server rename <name> <new-name> 存在するマイクラサーバのリネーム

サーバ管理コマンド

コマンド 説明
<server> start マイクラサーバを起動
<server> stop [now] プレーヤーに警告をしてマイクラサーバを停止、またはいますぐ停止
<server> restart [now] プレーヤーに警告してマイクラサーバを再起動、またはすぐに
<server> status マイクラサーバの起動状態(running/stopped)を見る
<server> connected マイクラサーバに接続しているプレーヤーの一覧
<server> worlds list worldstorageにあるワールドの一覧
<server> worlds load worldstorageにあるワールドのリンクをマイクラサーバディレクトリに作成する
<server> worlds ram <world> 指定したワールドをRAMで上で動かすかDiskかのトグル
<server> worlds todisk RAM上のワールドをディスクに同期する
<server> worlds backup マイクラサーバ持っているすべてのワールドのバックアップを作成する
<server> worlds on|off <world> 指定したワールドをアクティブまたは非アクティブにする、非アクティブなワールドはバックアップされない
<server> logroll ログの縮小化のためマイクラサーバログを移動しgzipでアーカイブする
<server> backup マイクラサーバのディレクトリのバックアップを作る
<server> jar <jargroup> [<file>] マイクラサーバのjarファイルを設定する
<server> console インタラクティブコンソールに接続する、アクセスは制限される
<server> config [<setting> <value>] マイクラサーバを指定の値を設定する、指定しなかった場合は設定の一覧

マイクラサーバゲーム内コマンド

コマンド 説明
<server> wl on|off ホワイトリストチェックの有効・無効
<server> wl add|remove <player> ホワイトリストへプレーヤーを追加または削除する
<server> wl list ホワイトリストにあるプレーヤーの一覧
<server> bl player add|remove <player> プレーヤーをバンまたはバン解除する
<server> bl ip add|remove IPアドレスでバンまたはバン解除する
<server> bl list バンしているプレーヤーとIPアドレスの一覧
<server> op add|remove <player> プレーヤーに管理者権限を与えるまたは取り消す
<server> op list 管理者権限のあるプレーヤーの一覧
<server> gm survival|creative <player> プレーヤーのゲームモードを変更する
<server> kick <player> マイクラサーバーからプレーヤーをキックする
<server> say <message> マイクラサーバ上のすべてのプレーヤーへ(ピンク)メッセージを送る
<server> time set|add <number> マイクラの時刻を設定または追加する(0-24000)
<server> toggledownfall 雨または雪のトグル
<server> give <player> <item> [amount] [data] プレーヤーにアイテムを与える
<server> xp <player> <amount> プレーヤーに経験値を与える、負数なら減らす
<server> save on|off ワールドの変更をファイルに書き込むかの有効・無効
<server> save all 強制的に保存していないワールドの変更をファイルに書き込む
<server> cmd <command> コマンド文字列をマイクラサーバに送る
<server> cmdlog <command> cmdコマンドと同じだが、結果のログ出力を表示する(Ctrl+Cで終了)

Jarコマンド

コマンド 説明
jargroup list jarファイルの一覧
jargroup create <name> <download-url> ダウンロードURLとしてjarグループを生成する
jargroup delete <name> jarグループを削除する
jargroup rename <name> <new-name> jarグループをリネームする
jargroup changeurl <name> <download-url> jarグループのダウンロードURLを変更する
jargroup getlatest <name> jarグループのダウンロードURLから最新のjarファイルをダウンロードする

グローバルコマンド

コマンド 説明
start すべてのアクティブなマイクラサーバを開始する
stop [now] すべての起動中のマイクラサーバを停止する
restart [now] すべてのアクティブなマイクラサーバを再起動する
version Minecraft Server Managerのバージョンを表示する
config MSMで使われている設定の一覧
update [–noinput] MSMのファイルを最新のバージョンに更新する

コマンドから使い方を推測すると複数のマイクラサーバを管理するのでマイクラサーバに名前をつけて、マイクラサーバの名前を指定してコマンドを送ることになる。

またjargroupコマンドがありマイクラサーバと分離されている模様。マイクラサーバをどのjarファイルで生成するのか管理でき、例えばmodを当てたserver.jarを何処かに公開してそれを使って構築したり、あるマイクラサーバは公式のserver.jarから構築するなどの使い方ができると思われる。

サーバの作成と起動

まずは公式のマイクラサーバのminecraft_server.jarをminecraftという名前のjargroupで作成する。(ドキュメントではデフォルトでcraftbukkit、minecraftのjargroupがあるらしいのだが無いと怒られるので作成する)

sudo msm jargroup create minecraft https://s3.amazonaws.com/MinecraftDownload/launcher/minecraft_server.jar
sudo msm jargroup create craftbukkit http://dl.bukkit.org/latest-rb/craftbukkit.jar

次にmyserver1というマイクラサーバを作成し、minecraftjargroup、つまり公式のminecraft_server.jarを指定して開始する。

sudo msm server create myserver1
sudo msm myserver1 jar minecraft
sudo msm myserver1 start

以下の情報は今のところ気にしなくていい。

[MSM Info: Assuming 'minecraft/1.3.0' for this server.You should override this value by adding 'msm-version=minecraft/x.x.x' to '/opt/msm/servers/myserver2/server.properties' to make this message go away]

コマンドなどバージョンによって下位互換を取らないといけないときにMSMにminecraft_serverのバージョンを教えてあげないといけないことがある。どうしても気になるならsudo msm myserver1 config msm-version minecraft/1.5.2などを実行する。

マイクラサーバ実行中でも以下のようにしてLinuxのターミナルから管理者権限を与えることができる。

sudo msm myserver1 op add username

2つ目のマイクラサーバを起動してみる。複数のマイクラサーバを公開するにはそれぞれポートを別にしないといけない。

sudo msm server create myserver2
sudo msm myserver2 jar minecraft
sudo msm myserver2 config server-port 25566
sudo msm myserver2 start

デフォルトのポート以外に接続する場合、クライアントは Server Addressに 127.0.0.1:25566 というようにコロンとポート番号を指定する。

マイクラサーバは/opt/msm/servers/myserver2/といったディレクトリにファイルがあるのでMSMを使わないで直接server.propertiesファイルなどの設定を変更することも可能。ファイル階層は以下のようになる。

/opt/msm
`- servers
   `- server_name
      |- world -> /opt/msm/servers/server_name/worldstorage/world
      `- worldstorage/
         |- world/
      |- worldstorage_inactive/
      |- server.jar
      |- server.properties
      |- server.log
      |- ops.txt
      |- white-list.txt
      |- banned-ips.txt
      `- banned-players.txt

ワールドの管理

基本的にMSMでワールドを管理するときにはworldstorageというディレクトリにワールドの実体ファイル(ディレクトリ)を置いてあげないといけない。

最初にマイクラサーバを起動するとworldというディレクトリにワールドを作成されるので、これをに以下のようにしてworldstorage下へ移動しworlds loadコマンドでシンボリックリンクを作成する。

sudo msm myserver1 stop now
cd /opt/msm/servers/myserver1
sudo mv world worldstorage/
sudo msm myserver1 worlds load

バックアップ

これでsudo msm myserver1 worlds backupを実行するとworldstorageにあるワールドのバックアップ(zip)がWORLD_ARCHIVE_PATH(/opt/msm/archives/worlds)に作成されるようになる。

なおworldstorageに複数ワールドがあるとすべてバックアップされる。これは <server\> worlds on\|off <world\> コマンドでアクティブ・非アクティブを切り替えることでアクティブなものだけがバックアップされるようになる。

リストア

リストアのコマンドは今のところないようなのでバックアップファイルから戻す。

sudo msm myserver1 stop now
cd /opt/msm/servers/myserver1/worldstorage
sudo mv world world_org
sudo unzip /opt/msm/archives/worlds/myserver1/world/{日付}.zip
sudo chown -R minecraft:minecraft world 
sudo msm myserver1 start

RAMを使う

ワールドをRAMに置くことでパフォーマンスが期待できる。

デフォルトでは/dev/shm/msmを使うことになっている。/dev/shmにディレクトリがない場合は以下のようにして作っておく。パスは/etc/msm.cnfのRAMDISK_STORAGE_PATHで変更することもできる。

sudo mkdir /dev/shm/msm
sudo chown minecraft /dev/shm/msm
sudo chmod -R 775 /dev/shm/msm

以下のようにサーバ名、ワールド名を指定してRAMに配置する。ワールドのパスを変えるので当然マイクラサーバは止めないといけない。

sudo msm myserver1 stop now
sudo msm myserver1 worlds ram world
sudo msm myserver1 start

ワールドはstopコマンドでサーバを止めたときなどのタイミングでディスクに同期されるので壊されてもいいようなテンポラリなワールドとして使えるわけではない。

マイクラサーバのバージョンアップ

jargroupコマンドで取得したjarファイルを置き換えることで可能。

停止してバックアップを取る。

sudo msm myserver1 stop now
sudo msm myserver1 backup
sudo msm jargroup getlatest minecraft
sudo msm jargroup list

でjarファイルのリストが見れるので日付で使うファイル名をきめて

sudo msm myserver1 jar minecraft 日付-minecraft_server.jar

起動するとバージョンが上がっているはず。

sudo msm myserver1 start

cronの修正

cronで定期的にバックアップ処理が走るのだが出力がメール送信されるので出力をnullにする。/etc/cron.d/msm ファイルを修正する。

02    05  *   *   *   minecraft   /etc/init.d/msm all worlds backup >/dev/null 2>&1
55    04  *   *   *   minecraft   /etc/init.d/msm all logroll >/dev/null 2>&1
*/30  *   *   *   *   minecraft   /etc/init.d/msm all worlds todisk >/dev/null 2>&1
@hourly               minecraft   /etc/init.d/msm start >/dev/null 2>&1

参考: Disable Cron E-mails

まとめ

MSMを使うとscreenを意識しなくていいし、バックアップもコマンド一つで取れるので楽ちん。マルチサーバを一台管理するだけでも便利だと思う。

人見知りソフトウェアエンジニアです。ビジュアル系、お笑い、Pixarが好き。勢いで吉本超合金おたけびBOTを作った。オールザッツ漫才が放送されない東京在住。

趣味や日常からアウトプットの場としてブログを書いています。自作のWordPressプラグインにGitHub Flavored MarkdownAmazonJSなど。