ツンソwiki - サーバーの建て方(Ubuntu)

Minecraft serverの建て方 - Ubuntu 14.10

0.はじめに

  • 日本語だとわりと古い情報しか書いてなかったので
  • 不具合の度に何度も再インストールしてやり直す必要があるので自分向けの覚書も兼ねて
参考にしました

1.Ubuntu 14.10 日本語をインストール

  • Ubuntu 14.10 日本語 Remix リリース https://www.ubuntulinux.jp/News/ubuntu1410-ja-remi...
  • 特に問題はないと思うところなので説明しません
  • 私はインストール時のブートメディア用に専用の8GB USB3.0メモリ(500円)を用意しました。楽なので
  • ちなみにUSBブートメディアを作るときには、既存のUbuntuがあったほうが簡単(バージョンが低くてもOK)
    • 逆に初めて手を出すときはWindowsからブートメディアを作る必要があるためやや面倒
    • そのためWindows機しかない場合は、情報の多くトラブルの解決しやすい任意のバージョンで一度Ubuntuを構築してから最新バージョンのUbuntuのブートメディアを作る方法もある

2.管理者ユーザーで最初にやること

  • いつものやつ
$ sudo apt-get update
$ sudo apt-get upgrade
  • javaを入れる
$ sudo apt-get install default-jdk
  • screenも入れる
$ sudo apt-get install screen
  • ついでに「ソフトウェアの更新」もやっとく
ここで再起動(あとでもいいけど)

3.Minecraft Server専用ユーザーを作る

$ sudo adduser mc
  • サーバー専用ユーザー「mc」を作成
ユーザー `mc' を追加しています...
新しいグループ `mc' (1001) を追加しています...
新しいユーザー `mc' (1001) をグループ `mc' に追加しています...
ホームディレクトリ `/home/mc' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しい UNIX パスワードを入力してください: 
  • パスワードを二回入れる
passwd: パスワードは正しく更新されました
mc のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
  • Enterを6回押す
$ su - mc
  • サーバー専用ユーザーでログイン

4.サーバーのインストール

1つ上で作ったユーザーでやっているものとする
  • インストールフォルダを作成
$ mkdir minecraft
  • 作成したフォルダに移動
$ cd minecraft
$ wget -O minecraft_server.jar https://s3.amazonaws.com/Minecraft.Download/versions/1.8.1/minecraft_server.1.8.1.jar
※ここでは最新バージョンを1.8.1としますが適宜置き換えてください
  • 一度通常起動
$ java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
  • ワールドを生成する前にプログラムは勝手に終了する。もしサーバー起動まで出来ているようならサーバーを終了(/stop)させ、次の説明は飛ばして(5)へ進む
    • これまでに一度もUbuntuを再起動してないと多分ここで詰む
  • 新しく生成されたeula.txtにチェックを入れる
$ nano eula.txt
  • 指示に従いeula=TRUEへ変更して保存(ctrl+X → y → Enter)
とりあえずこれでサーバーは立ちました

5.簡単に起動するようにシェルスクリプトを作る

  • まずサーバーを起動するシェルスクリプトを作る
$ nano minecraft.sh
  • ついでにscreenで起動するように書いておく
#!/bin/sh
screen -S minecraft java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
    • Xmx等の設定については周知の通りなので割愛
  • シェルスクリプトに実行権限を付与
$ chmod 700 minecraft.sh
  • .profileをちょっと改変
$ cd
$ nano .profile
  • [cd minecraft]〜[exit]までの3行を追記して保存
# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
    cd minecraft
    script /dev/null
    exit
fi
  • 一度ログアウトして作業終了
$ exit

6.サーバーを動かしてみる

  • まずは専用ユーザーでログイン
$ su - mc
  • すると.profileに書いたものが実行され、起動直前まで処理が進む
スクリプトを開始しました。ファイルは /dev/null です
mc@login-usrPC:~/minecraft$
  • このように表示されるため、-あとはシェルスクリプトを実行するだけ
$ ./minecraft.sh
  • これはスクリーンで起動しているためctrl+d → a で端末に戻れます
  • コマンド実行画面にもどるなら
$ screen -r minecraft
  • なにかやらかしてスクリーンIDがわかんなくなったら
$ screen -ls
  • で起動しているスクリーンを探すこと
(本当はシェルスクリプト実行まで.profileでやりたいのだが、scriptやるとexitするまで次の行に処理が行かないためやり方がわからない)

外部に公開する

サーバーを建てたらいよいよ外部に公開です

1.Ubuntuのファイアーウォール設定を変える

  • ファイアーウォールを開始&初期設定
$ sudo ufw enable
$ sudo ufw default DENY
  • 上ですべてのポートを閉じてしまったので、マイクラサーバとして使うポートのみを外部に開放する
$ sudo ufw allow 25565
$ sudo ufw status
To                         Action      From
--                         ------      ----
25565                      ALLOW       Anywhere
25565 (v6)                 ALLOW       Anywhere (v6)

2.ルーターのポート開放設定を調べる

  • 自分の使っているルーター名を調べる (終端装置から一番近いものです。BUFFALO等の無線LANルーターは多分違うと思います)
  • 管理画面に入る方法を調べる(アドレスバーに「192.168.0.1」などを入力)
  • ポート開放、ポートマッピング、ポートフォワーディングなどのメニュー項目を探す
※この時点で行き詰まるならあなたはサーバーを外部に公開するのに向いてません。潔くあきらめましょう。なお、ここで質問されても答えられません

3.サーバーのローカルアドレスを調べてルーターのポート開放設定に追加する

  • ifconfigでローカルIPアドレスを調べる
$ ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス **:**:**:**:**:**  
          inetアドレス:192.168.0.5  ブロードキャスト:192.168.1.255  マスク:255.255.255.0
(以下省略)
  • この場合ルーターの設定で、[192.168.0.5]に[25565]を割り当てれば良い(設定はルーターによりますので自分で考えてください)

4.ローカルIPを固定する

  • ルーターで出来る場合はマイクラサーバーのMACアドレスとDHCPの固定割り当て機能とを紐付ける
  • ルーターに固定割り当て機能が無い場合はUbuntu側で設定してやる

5.グローバルIPを固定を調べて相手に通知する


高度な設定

高度すぎて自分でもよくわからない高度な設定

VNCでUbuntuをWindowsから操作する

  • やり方はいろいろありますがGUIじゃないとダメな人向け。多分これが一番簡単
  • Dashから[de]と入れて出来てくる「デスクトップ共有の設定」を開く
  • 「他のユーザーが自分のデスクトップを表示できる」にチェックを入れ、その他の項目も自分好みに設定
  • 5900のポートを開放する
  • 接続するPCが決まっている場合はローカルIPアドレスを限定するといい
$ sudo ufw allow from 192.168.0.4 to any port 5900
    • もちろん接続する側のPCのローカルIPアドレスを固定していないと意味がない
  • しかしこのままではエラーで繋げられないので最後に以下を端末で実行して完了。この設定変更は再起動しても失われないため最初の一度だけでよい。
$ gsettings set org.gnome.Vino require-encryption false
    • VNCクライアントは適宜自分で見つけてください
[トラブル]VNCのアクセスが異様に遅い
  • 設定が一通り完了し、いざLANと電源だけでサーバーを起動してみると、「デスクトップ共有」が異様に遅くなった
    • VNCクライアントからのアクセスはそこまで遅くなっていはいないものの、サーバーからのレスポンスが遅い
    • 1文字入力してそれが反映されるまで2〜3秒程度かかり、画面の変更が多ければ多いほど待たされる
    • 反映は即時行われるため、マイクラサーバーコマンドなどは画面表示を待たずに入力してEnterを押した瞬間適用される (VNCに表示が帰ってくるのは十数秒後)
  • どうやら外部ディスプレイが存在しないことが原因のようで、ディスプレイを接続しなおしたら改善した
  • 検索しても同様の症状が見つからなかった。環境によるものの可能性もある

DDNSを利用してサーバーのグローバルIPアドレスをURLに変更する

※URLに変更しても逆引きでグローバルIPはわかってしまう
※あくまで動的なグローバルIPに対処する意味でしか、URL表記に変更するメリットはない
  • ここでは一番簡単なmydns.jpを利用した方法を記載
  • アカウント取得等諸々の設定が済んだら、グローバルアドレスの通知をcrontabで設定する
  • 参考1:http://www.omnioo.com/record/ubuntudebian/crontab/
  • 参考2:http://www.mydns.jp/?MENU=040
    • 方法さえわかれば簡単ではあるものの、公式サイトの説明は初心者にはわかりにくすぎると思う (全くもって『簡単でしょ?』じゃない)
$ crontab -e
no crontab for login-usr - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.tiny

Choose 1-3 [2]:
  • ここでは2を選択。ずらっと説明が出るがすでに編集画面なので
*/5 * * * * /usr/bin/wget -O - 'http://[id]:[password]@ipv4.mydns.jp/login.html'
  • と、文頭にでも入れて保存する ([id]と[password]はmydns.jpからのメールに書いてあるものを入力)
  • mydns.jpにログインして「IP ADDR DIRECT」からIPv4アドレスを「1.1.1.1」などのいい加減なアドレスに設定して、cronの実行を待つ (この設定では5分おき)
  • 数分のち、分の1の位が5の時間に「LOG INFO」を確認し、下記のように正しくIPアドレスが通知されていれば成功
20XX/XX/XX XX:45:03 JST  	DNSINFO UPDATE : ********.mydns.jp 
20XX/XX/XX XX:45:03 JST  	IPv4 UPDATE : mydns******* XXX.XXX.XXX.X (***********************.ne.jp), http, asia    <-------ここに正しくグローバルIPアドレスが入っている
20XX/XX/XX XX:41:19 JST  	DNSINFO UPDATE : ********.mydns.jp 
20XX/XX/XX XX:41:19 JST  	CHANGE IPINFO : 1.1.1.1, XXXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX 

Minecraft server 稼働後のトラブル

トラブルが起きた場合の対処を都度記載していく

外部にポート開放したのに繋がらない

  • もしかしてグローバルIPで接続していませんか?
  • 自分自身でマイクラサーバに繋げる場合は(同一ネットワーク上では)ローカルIPでないと接続できません
  • 外部から接続可能かどうかはここで調べてください https://dinnerbone.com/minecraft/tools/status/

ワールドデータ移行

  • サーバー専用ユーザーではなくログインユーザーでワールドデータをコピーしてしまうとアクセス権の都合上エラーが起きる
  • ただ自分はファイルの移動やコピーを半分GUIでやってるのでどうしてもそうなってしまう (SMBサーバーに端末からアクセスするのが面倒だから)
    • 対処法:端末からアクセス権を変更する
  • GUIを使ってログインユーザー[login-usr]のホーム下にワールドデータ[old_world]をコピーしてきてしまったと仮定した場合の作業は以下の通り
    • まずサーバー専用ユーザー[mc]のminecraftフォルダにワールドデータを移動する
$ sudo mv oldworld /home/mc/minecraft/
    • そのままログインユーザーを使ってminecraftフォルダへ移動し[ls]の[-l]オプションでファイルの詳細リスト表示
$ cd /home/mc/minecraft
$ ls -l
drwxrwxr-x 8 login-usr login-usr   4096  X月 XX XX:XX old_world
...
(中略)
...
drwxrwxr-x 7 mc        mc           4096  X月 XX XX:XX world
    • [world]を基準に[old_world]も全く同じ設定になるように変更
    • 上の場合は所有者のみ変えればいいためchownで変更する(パーミッションが違う場合はchmodで変えること)
$ sudo chown -R mc:mc old_world
$ ls -l
drwxrwxr-x 8 mc        mc           4096  X月 XX XX:XX old_world
...
(中略)
...
drwxrwxr-x 7 mc        mc           4096  X月 XX XX:XX world

サーバーアップデート

サーバー再稼動した直後にマイクラ本体が1.9.4から1.10へアップデートされて接続できなくなりました。
ここでは実際に1.9.4から1.10にアップデートした際の手順を記載します。
  • 参考URL:minecraft_serverバージョンアップ方法(Linux版マルチサーバ) - http://www.server-memo.net/minecraft/mc-op/update....
  • いつも通り端末を開いてサーバー専用ユーザーに切り替えてから作業開始。
    • まずはサーバーのバックアップ
$ cd
$ ls
examples.desktop  minecraft
    • 切り替え時は「minecraft」フォルダにいるため、1階層上に戻り、念のため階層下に「minecraft」フォルダが存在することを確認
$ cp -Rp ./minecraft ./old_minecraft_20160609 
$ ls
examples.desktop  minecraft  old_minecraft_20160609
    • cpコマンドで「old_minecraft_20160609」フォルダにコピーし、正常にフォルダが存在するか確認
    • あとはサーバーインストール時と同様、「minecraft」フォルダにサーバーファイルをダウンロードする
$ cd minecraft
$ wget -O minecraft_server.jar https://s3.amazonaws.com/Minecraft.Download/versions/1.10/minecraft_server.1.10.jar
  • 最後に「./minecraft.sh」を実行し、行頭が『Starting minecraft server version 1.10』となって入ればアップデート成功

何か間違っているところなどがあればコメント欄でご指摘おねがいします