せっかくもう少しまともなサーバを手に入れたので、Minecraftでのマルチプレイを楽しむためにサーバを建てました。
また、Sambaの導入時にも使用したLXCを活用し、別コンテナで動作させます。
````bash $ sudo apt-get update $ sudo apt-get upgrade
インストールがまだの場合
$ sudo apt-get install lxc
新規でコンテナを作成
$ sudo lxc-create -n minecraft -t ubuntu
通常、lxcbr0というブリッジインターフェースに仮想OSは紐付けられますが、面倒なのでホスト側でbr0というブリッジインターフェースを作成し、そこからIPアドレスを振ります。 先輩のブログ(<a href="https://www.erscl.org/blog/20151026/lxc-memo1/" target="_blank">Ubuntu14.04上でのLXC環境構築</a>)を<del>コピペ</del>参考にして、
ブリッジインターフェースを作成
$ sudo vim /etc/networking/interfaces
なぜかインターフェース名がem1
auto em1 iface em1 inet static address 0.0.0.0
auto br0 iface br0 inet static address 192.168.0.150 network 192.168.0.0 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 bridge_ports em1 bridge_stp off bridge_maxwait 10
$ sudo /etc/init.d/networking restart
minecraftコンテナの設定をいじる
$ sudo vim /var/lib/lxc/minecraft/config
Common configuration
lxc.include = /usr/share/lxc/config/ubuntu.common.conf
Container specific configuration
lxc.rootfs = /var/lib/lxc/minecraft/rootfs lxc.mount = /var/lib/lxc/minecraft/fstab
lxc.utsname = minecraft lxc.arch = amd64
autostart 関連
lxc.start.auto = 1 lxc.start.delay = 5
Network configuration
lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = コンテナのNICの仮想MACアドレス
使用するディレクトリをマウント
サーバには3台のHDDでRAID-Z1を構築済み
lxc.mount.entry = /tank/minecraft minecraft none bind,create=dir
こんな感じで。 後はコンテナを起動し、普通にsshしてログインします。
$ sudo lxc-start -d -n minecraft $ ssh ubuntu@192.168.0.130
以下ゲストOSでの作業。 Minecraft実行用のユーザを追加してsudoersに
$ sudo adduser minecraft $ sudo usermod -G sudo minecraft
ここからMinecraftのアレやコレをインストールしていきます。
$ sudo apt-get install wget openjdk-7-jre $ mkdir /minecraft/server $ cd /minecraft/server $ wget https://s3.amazonaws.com/Minecraft.Download/versions/1.7.10/minecraft_server.1.7.10.jar
ここでは公式の.jarを使用していますが例えばforgeなんかでも一緒です。forgeの場合は、もう考えるのが面倒だたのでWinでインストーラをダウンロードして適当なフォルダに展開、その後smbやらで適当にゲスト側に取り込むことでforge-xxx-universal.jarを含むファイル群を展開すればOK。
$ java -Xmx2048M -Xms1024M -jar minecraft_server.jar nogui
-Xmx:最大使用メモリ量 -Xms:最小使用メモリ量 ここでサーバの起動に失敗します。 eula.txtの中身をいじることで起動できます。
Thu Feb 25 21:10:05 JST 2016
eula=True
もう一度実行してみます。
$ java -Xmx2048M -Xms1024M -jar minecraft_server.jar nogui [21:10:51] [Server thread/INFO]: Done (6.605s)! For help, type "help" or "?"
こんな感じになったら成功。後は自動で起動するようにとかの設定をしていきます。 起動・停止用のシェルスクリプトは自分で書くよりすでにあるものを使ったほうが楽だと思います。
screenがない場合インストール
$ sudo apt-get install screen $ wget -O minecraft "http://minecraft.gamepedia.com/Tutorials/Server_startup_script/Script?action=raw" $ vim minecraft SERVICE='minecraft_server.jar' #起動する.jarファイル名 OPTIONS='nogui' USERNAME='minecraft' #ユーザ名 WORLD='world' MCPATH='/minecraft/server' #起動する.jarのあるディレクトリを指定 BACKUPPATH='/minecraft/server.backup' #バックアップ用に別のディレクトリを用意 MAXHEAP=2048 #最大使用メモリ量 MINHEAP=1024 #最小使用メモリ量
$ sudo cp minecraft /etc/init.d/ $ sudo chmod a+x /etc/init.d/minecraft $ sudo apt-get install sysv-rc-conf
minecraftというサービスを登録
$ sudo sysv-rc-conf minecraft on
定期バックアップの設定
$ crontab -e
30分ごとに一回バックアップを取る
0,30 * * * * /etc/init.d/minecraft backup
これでこのminecraftコンテナを起動するだけで自動でMinecraftサーバが立ち上がり、使えるようになります。うちはRTX1100でファイアウォールルールを設定しているので、適当に
[code]# nat descriptor masquerade static 1 3 192.168.0.130 tcp ポート番号
ip filter 2019 pass * 192.168.0.130 tcp ポート番号
ip filter 2120 pass 192.168.0.130 * tcp ポート番号
こんな感じでフィルタを作ってそれぞれpp1のinとoutに設定しました。これで外部からもアクセスが可能になりました。 Minecraftサーバの設定はそれぞれminecraft_server.jarのあるディレクトリにあるserver.propertiesに書いてあるのでこれを編集します。 詳細はここ→<a href="http://www.server-memo.net/minecraft/mc-install/server-properties_183.html" target="_blank">サーバ設定ファイル(server.properties)</a> 指定ユーザ以外の参加を禁止するには、
$ vim server.properties whitelist=true
$ vim whitelist.json [ {"uuid":"参加可能にしたいユーザのUUID" "name":"参加可能にしたいユーザのユーザ名" },
{"uuid":"参加可能にしたいユーザのUUID" "name":"参加可能にしたいユーザのユーザ名" } ]
みたいな感じで書いてサーバを立ち上げると良いです。 UUIDはここ(<a href="http://minecraft.ex-t.jp/check_user/uuid.cgi" target="_blank">Minecraft UUIDチェックサイト</a>)で調べられますが、whitelist.jsonに書き込む際には 8文字-4文字-4文字-4文字-12文字 になるように適切にハイフンを入れる必要があります。 Minecraftのサーバコンソールが見たい場合は
$ screen -r minecraft
サーバコンソールから抜けるにはCtrl+aしてからdを押すことでデタッチできます。 これがおおよその導入法です。何か間違っていたら教えて下さい。