kinalog

自称フロントエンドエンジニアが何か喚いています。

LinuxでMinecraftのサーバーをたてる

マイクラは一人でも楽しいですが、皆で遊ぶともっと楽しいですね。
だからサーバーをたてましょう。
皆で繋ぐと負荷がかかるので、サーバー専用機をつくりましょう。
Linuxで構築しましょう。

今回はMinecraftサーバーをたてるまで。

※記事の書き始めからだいぶ時間が経ってしまったため、書かれているバージョンは最新版ではない可能性があります。


前提

Minecraftは現状の最新版の1.10.2
MinecraftのサーバーはSpigot(1.10系対応版)
LinuxはUbuntuServer 16.04.1
・身内で遊ぶ向けの超少人数サーバーの構築をめざす。(最大でも同時接続10人ぐらい)
Linuxでの作業以外は全て同一LAN内のMacで行う。
・基本CUI
・作業者はHTML / CSS / JavaScriptならどんと来いなフロントエンドエンジニア。
Javaはトラウマ。Terminalは業務でも使う。
サーバーやネットワークについてはあまり知識がない。
UbuntuGUI版なら触ったことある。

用意するもの

・余ってるPC:今回は家に転がってたメモリ6G、CPUはAMDのテキトーなのが積んであるのを用意。グラボとかは不要。HDDの中身はパーティション含め全部消えます。
・モニタ:基本的にSSHで他のPCから接続して管理するけど、最低限OSインストール時には必要。
・空のUSBメモリ
・もう1台PC

手順

1. UbuntuServerのインストールメディアを用意する

まずはMac上での作業。

OSのインストーラーをそのままデータをメディアにコピーしても、ブート時にインストーラーを起動できるようになったりはしないので、Bootableな感じにします。
isoをUbuntuのサイトからダウンロードしてきます。


ディスクユーティリティでUSBメモリをフォーマット。
フォーマットはMS-DOS(FAT)、方式はマスター・ブート・レコードに。

フォーマットできたら次は書き込み。
USBメモリを差し込んだら、ターミナルで下記のコマンドを打ちます。

$ diskutil list

上記のコマンドで今認識してるディスクとパーティションの一覧が出るので、差し込んだUSBメモリのデバイス名を覚えておきます。


書き込むファイル名をubuntu-16.04-server-amd64.iso
ディスク名を/dev/disk2とした場合、
まず下記のコマンドでディスクをアンマウントして

$diskutil unmountDisk /dev/disk2

下記のコマンドでUSBメモリに書き込み。

$ sudo dd if=./ubuntu-16.04-server-amd64.iso of=/dev/disk2 bs=4028

書込みできたらディスクを外します。

$ diskutil eject /dev/disk2

参考サイト:
MacOSX上でISOファイルからインストールUSBディスクを作る - re:inventing the wheel


2. UbuntuServerをインストール

ここからはサーバー機で作業。

インストールを始める前に、サーバー用PCのBIOS画面で、USBの起動ディスクの優先順位を上げておきます。

それができたらUSBメモリをサーバー機に差して、インストールを始めます。
基本的に画面の案内の通りに進めればOK。


ちなみに日本語にしたらほんのちょっとトラブル(後述)が発生したので、基本的には英語でインストールをオススメします...。


参考サイト:
Ubuntu 14.04 サーバー インストール: プログラマの歩き方


3. SSHを使えるようにする

これまではモニタを繋いでやってましたが、モニタじゃまだしMacで調べてコピペでペタッとできる方が明らかに効率的なので、MacからサーバーにログインできるようにSSHというものを導入します。

まず下記のコマンドでOpen SSHをインストール。

$ sudo apt-get install openssh-server


インストールできたら設定。
vimとかで/etc/ssh/sshd_configを開くと設定がずらずら並んでいますが、rootのログインは危ないので拒否りたいのと、秘密鍵の設定が終わるまでは一旦パスワード認証にしておきたいので下記の設定をしておきます。

PermitRootLogin no
PasswordAuthentication yes


設定を変更したらSSHサーバーを再起動しときます。

$ sudo service ssh restart


そしたら試しに別PCから接続してみたいと思うのですが、その前にサーバー機のローカルIPを知っておく必要があります。
LinuxのIPの調べ方は

$ ifconfig

このコマンドを叩くとずらずらっと色々な情報が出てきますが、eth0inet addrに書かれているものがローカルIPのようです。


Macに移動して、ターミナルで下記のコマンドを叩きます。

$ ssh (Ubuntuのユーザー名)@xxx.xxx.xxx.xxx(さっき調べたローカルIP)

パスワードとか入力して、ターミナルの表示が

(Ubuntuのユーザー名)@(サーバー名)

ってなったら接続成功です。

参考サイト:
聖杯を探して - Quest for Holy Grail - : Ubuntu 14.04でSSHの設定


4. 秘密鍵の設定

まずは鍵を作りましょう。
Macのターミナルでssh-keygenコマンドを入力。

$ ssh-keygen

少し聞かれることがあるので適宜入力します。

Enter file in which to save the key
→鍵の保存場所。そのままEnter、もしくは何か入力しても良い。

Enter passphrase
→パスワード。今回はつけない方向なので、何も入力せずEnter。

Enter same passphrase again
→何も入力せずEnter。

すると何やらずらっと表示されて鍵が生成されます。
鍵の保存場所をデフォルトのままにした場合は、ホームディレクトリ直下の.sshディレクトリの下にid_rsa.pubid_rsaという2つのファイルができてます。
拡張子が.pubの方が公開鍵、もう一方が秘密鍵です。


で、上記で作った鍵のうち、公開鍵をサーバー機に送ります。
送る手段はscpコマンドが楽ちん。

$ scp ~/.ssh/id_rsa.pub (サーバー機のローカルIP):~/

上記のコマンドを実行したあとサーバー機を確認すると、ホームディレクトリにid_rsa.pubがあるはずです。
この鍵の内容を、サーバー側の~/.ssh/authorized_keysというファイルに書き写します。
(もし上記のディレクトリやファイルがなかったら自分で作る。)

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

パーミッションを変えときます。

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

これで鍵の設定完了。Macのターミナルから接続確認してみます。

$ ssh (ユーザ名)@ (サーバー機のローカルIP)

もし鍵の保存場所やファイル名をデフォルトから変えている場合は、下記でログイン可能です。

$ ssh  -i (秘密鍵のパス) (ユーザ名)@ (サーバー機のローカルIP)

公開鍵での認証ができることを確認したら、最初に設定したパスワード認証は外しときましょう。サーバー機にログインし、vimなどで/etc/ssh/sshd_configを開いて該当の行をnoにしときます。

PasswordAuthentication no

設定を変更したらSSHを再起動して設定完了。

$ sudo service ssh restart

参考サイト:
ssh公開鍵認証設定まとめ - Qiita
公開鍵暗号を用いてのSSH接続(初歩) - Qiita


5. Javaのインストール

Spigotをビルドしたり動かしたりするのにJavaが必要なのでインストール。
サーバー機にて下記コマンドを実行。

$ sudo apt-get install default-jdk

 

6. Spigotのインストール

ホームフォルダに適当なディレクトリを作ってその中にビルドツールを入れときます。
(今回はspigotbuildとしておく)

$ mkdir spigotbuild
$ cd spigotbuild
$ curl -L -O https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar

落とせたらビルドします。オプションでバージョンを選べるようなので、今回は1.10にしときます。

$ java -jar BuildTools.jar --rev 1.10

するといっぱい色んなファイルが生成されるんですが、今回使うのはspigot-1.10.jarのみなので、そいつだけ別のディレクトリに移動させときます。

$ mkdir ../spigot
$ mv spigot-1.10.jar ../spigot

ファイルの移動ができたらspigotディレクトリに移動。
試しに起動してみます。

$ java -Xms1024M -Xmx1024M -jar spigot-1.10.jar

すると、英語でEULAが云々〜〜と出てすぐに終了してしまいます。

初回起動時はMinecraftEULA(エンドユーザーライセンス条項)に同意する必要があるため自動的に終了します。

ということなので、こちらに目を通してSpigotを配置したディレクトリ内にできたeula.txtというファイルを開いて、中のeula=falseeula=trueにします。

で、もっかい起動のコマンドを叩いてあげると起動するハズです。


参考サイト:
[Minecraft]1.10対応のSpigot(Bukkit)を用意する | 純規の暇人趣味ブログ
Minecraft Japan Wiki - サーバーMOD/Spigot


トラブルシューティング

日本語が文字化けする

UbuntuServerインストール時になんとなく日本語を選び、いざ色々導入を始めよう!ってところになって気づいたのが、サーバーを直接操作したときの文字が化けていて全く読めない...!


◆◆◆◆◆◆◆◆◆◆◆ (Y/n)

という感じで、何かを聞かれているんだけど、何を聞かれているのかわからない恐怖の質問になっていました(;´Д`)
どうやら、普通にインストールしただけでは日本語表示に対応しないらしい...。


もしインストールで日本語を選んでしまって文字化けした場合は、コンソールで表示する言語を英語に変更してあげればいいとのこと。


viとかで.bashrcなどに下記を追加してあげればOK。

case $TERM in
     linux)LANG=C ;;
     *)LANG=ja_JP.UTF-8 ;;
esac


参考サイト:
Ubuntuサーバーの日本語化-文字化けに対処する! | Linux | 経済的自由を得てセミリタイヤ-悠々自適生活!





というわけで、Minecraftサーバー導入編でした。
※まだ皆で遊べる段階ではありません。
続きは書く気力があったら...。