【初心者向け】minecraft serverをLinuxのCUI環境で建てる

## はじめに
　この記事は、SP2LC Advent Calender 2017の12/20の記事です。
　この記事では、LinuxのCUI環境においてminecraft server(以下サーバー)を建てる方法について解説します。
　一応、Linuxを触ったことがあまりない方や、初心者の方でも理解できるように書いてあります。
　サーバーを導入するPC(以下サーバー用PC)とは別で、必要なファイルをダウンロードでき、
　SSH接続ができるPC(以下別PC)があることを前提とします。
##注意事項
　この記事に記載されている処理は、お使いのLinuxディストリビューションによって異なる場合が
　あります。
## 事前準備
　ここでは、サーバーを導入するにあたり、必要な準備とその方法について解説します。
　まず、パッケージを最新の状態にアップグレードします。

  ```bash:
  ユーザー名@サーバー用PCのホスト名:~$ sudo apt-get update
  ユーザー名@サーバー用PCのホスト名:~$ sudo apt-get upgrade
  ```
　javaがインストールされていない場合、javaを導入します。

  ```bash:
  ユーザー名@サーバー用PCのホスト名:~$ sudo apt-get install default-jre
  ```
　サーバー用PCにssh serverがインストールされていない場合、ssh serverを導入します。

  ```bash:
  ユーザー名@サーバー用PCのホスト名:~$ sudo apt-get install ssh-server
  ```

　インストールが完了したら、ssh接続に使用するポートを変更します。
　ポートは、/etc/sshにあるsshd_configというファイルを編集することで変更できます。
　エディタを使用して、以下の部分の"*"を任意の番号に変更します。(例:2022)
  
  ```bash:
  #What ports, IPs and protcols we listen for
  Port ****
  ```

　変更したら、以下のコマンドを入力してssh serverを再起動します。

  ```bash:
  ユーザー名@サーバー用PCのホスト名:~$ service sshd restart
  ```
　CentOS7を使用されている場合、この他にもfirewalldの設定をする必要がありますが、その方法については
　ここでは割愛します。
## minecraft serverの導入
　**ここでは、minecraft server(所謂バニラサーバー)を導入する方法について解説します。**
　まず、別PCでサーバー本体をダウンロードします。サーバー本体は、以下のURLからダウンロードする
　ことができます。

  ```
  https://s3.amazonaws.com/Minecraft.Download/versions/*.*.*/minecraft_server.*.*.*.jar
  ```

　上記のURLの"*"の部分を、導入したいサーバーのバージョンに置き換えてください。
　例えば、1.7.10のサーバーを導入したい場合は、URLは次のようになります。

  ```
  https://s3.amazonaws.com/Minecraft.Download/versions/1.7.10/minecraft_server.1.7.10.jar
  ```

　次に、ダウンロードしたサーバー本体をサーバー用PCへ転送します。転送にはscpコマンドを使用します。
　ここでは、サーバー本体を別PCのホームディレクトリからサーバー用PCのホームディレクトリへ
　送ることとします。

  ```bash:
  ユーザー名@別PCのホスト名:~$ scp -P **** minecraft_server.*.*.*.jar ユーザー名@サーバー用PCのホスト名:~
  ```

　上記の"*"の部分には、事前準備で変更したポート番号を入力します。
　このとき、警告文が出たらyesを入力し、パスワードを要求されたら、サーバー用PCのパスワードを
　入力します。
　ファイルが転送されたら、サーバー起動時に生成されるファイルを入れておくディレクトリを作成します。

  ```bash:
   ユーザー名@サーバー用PCのホスト名:~$ mkdir server
  ```

　作成したディレクトリ内に、サーバー本体を移動します。

  ```bash:
  ユーザー名@サーバー用PCのホスト名:~$ mv minecraft_server.*.*.*.jar server
  ```

　サーバー本体があるディレクトリに移動し、サーバーを起動します。

  ```bash:
  ユーザー名@サーバー用PCのホスト名:~$ cd server
  ユーザー名@サーバー用PCのホスト名:~/server$ java -jar minecraft_server.*.*.*.jar
  ```

　起動すると、何やら文字がたくさん出てすぐ終了し、ディレクトリ内にファイルが生成されていると
　思います。**その中のeula.txtをエディタで　開き、eula=falseとなっている部分をeula=trueに変更します。**
　その後、もう一度サーバーを起動します。

  ```bash:
  ユーザー名@サーバー用PCのホスト名:~/server$ java -jar minecraft_server.*.*.*.jar -Xmx4G -Xms1G
  ```

　-Xmxで割り当てメモリの最大値、-Xmsで割り当てメモリの初期値を
　指定します。この設定はサーバー用PCの環境により異なります。
　ここでは、最大値を4GB、初期値を1GBとしています。
　Done!と表示されていれば起動成功です。
##forge serverの導入
　**ここでは、modを導入することができるforge serverを導入する方法について解説します。**
　まず、別PCで以下のURLから導入したいバージョンのforgeインストーラーをダウンロードします。

  ```
  https://files.minecraftforge.net/
  ```
　次に、ダウンロードしたファイルをバニラサーバーの時と同様にしてサーバー用PCに
　scpを使用して転送します。

  ```bash:
  ユーザー名@別PCのホスト名:~$ scp -P **** forge-バージョン-installer.jar ユーザー名@サーバー用PCのホスト名:~
  ```

　forgeサーバー用のディレクトリを作成し、そこにファイルを移動します。

  ```bash:
  ユーザー名@別PCのホスト名:~$ mkdir forgeserver
  ユーザー名@別PCのホスト名:~$ mv forge-バージョン-installer.jar forgeserver
  ```

　javaコマンドを使用してサーバーをインストールします。
　**このとき、末尾に"--installserver"をつけてください。**

  ```bash:
  ユーザー名@別PCのホスト名:~$ cd forgeserver
  ユーザー名@別PCのホスト名:~/forgeserver$ java -jar forge-バージョン-installer.jar --installserver
  ```

　起動すると、文字が出てすぐ終了します。
　バニラサーバーの時と同様にeula.txtを開き、eula=falseをtrueに変更します。
　その後、javaコマンドでjarファイルを開きます。
　**ここで開くのはforge-バージョン-universal.jarです。**

  ```bash:
  ユーザー名@別PCのホスト名:~/forgeserver$ java -jar forge-バージョン-universal.jar -Xmx4G -Xms1G
  ```
　バニラサーバーの時と同様にメモリの設定を付けて実行します。
　Done!と表示されていれば起動成功です。

　modファイルは、scpコマンドを使用して別PCからサーバー用PCに転送し、
　modsディレクトリに入れて下さい。

##ポート開放・IPアドレスの固定について
　**インターネットからサーバーにログインする場合、ルーター側のポートを開放する必要あります。**
　ポート開放は、ルーターの設定から行うことができます。この方法はお使いのルーターによって異なるため
　ここでは割愛します。
　ポート開放をする際、ルーターからポート開放する機器をIPアドレスを用いて指定する必要があります。
　しかし、IPアドレスはDHCPにより変動してしまいますので、まずはIPアドレスを固定する必要があります。
　IPアドレスを固定する方法は2つあります。

　**PC側から設定する場合**
　　ここでは、PC側でIPアドレスを固定する設定の方法について解説します。
　　まず、エディタで/etc/networkにあるinterfacesというファイルを開きます。

  ```bash:
  iface eth0 inet dhcp
  ```

　　のように記述されている箇所を書き換えます。以下に示すのは一例です。

  ```bash:
  iface eth0 inet static
        address 192.168.0.128
        netmask 255.255.255.0
        gateway 192.168.0.1
        dns-nameservers 192.168.0.1 8.8.8.8
  ```
　　
　　addressの部分には固定して使いたいアドレスを書いてください。
　　gatewayとdns-nameserversの部分に書くアドレスはお使いの環境によって異なりますが、
　　基本的にルーターのアドレスになります。
　　変更した内容を保存したら、次のようにコマンドを入力し、変更を反映します。

  ```bash:
  ユーザー名@別PCのホスト名:~$ service networking restart
  ```
　　pingコマンドを使用して、正しく設定が適用されたか検証します。

  ```bash:
  ユーザー名@別PCのホスト名:~$ ping 8.8.8.8
  ```

　　正常にpingされていれば64 bytes from~の様に表示されます。
　　正常にpingされていることを確認したら、Ctrl+cでpingを終了します。
　　IPアドレスの固定はこれで終わりです。
　
　**ルーター側から払い出す場合**
　　DHCPを使用している場合でも、MACアドレスで機器を指定して、特定のIPを割り当てる
　　ことができます。この方法の解説は、お使いのルーターによって異なるため、
　　ここでは割愛します。

## 最後に
　ここで書いた内容には誤りがある可能性もあります。
　もし、誤りがある場合はコメントで教えて頂けると幸いです。
　投稿がクリスマス当日になるとは...申し訳ないです。

## 参考にした記事
　CentOS 5のcui環境にMinecraft Forge 1.8を入れる
　https://qiita.com/todanano/items/507b8f5fe8e123d7a53a
  
　【minecraft】旧Server.jarの手に入れ方！※1.6以降も！
　http://pioneervillage.ldblog.jp/archives/35825094.html

　Tutorials/Setting up a server
　https://minecraft.gamepedia.com/Tutorials/Setting_up_a_server

　Linuxで固定IP設定（設定ファイル・コマンド）
　https://qiita.com/routerman/items/4d19b3084fa58723830c