ぽよメモ

レガシーシステム考古学専攻

LXCでマイクラ鯖を建てた話

せっかくもう少しまともなサーバを手に入れたので、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の中身をいじることで起動できます。

$ vim 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を押すことでデタッチできます。  
これがおおよその導入法です。何か間違っていたら教えて下さい。