諦め続ける薬

忘れることは、疲れに対する最高の薬。思い出に対する最悪の薬。

分からないところからRaspberry Pi3B+でHamachi+Minecraft serverを立ててみた

Raspberry Piを衝動的に買って、遊んでみた。
そのうちの一つ、Minecraftサーバーを立ててみるテスト。

f:id:hidoread:20181107213019j:plain

  • スタート
    • Raspbian、etcherをwinPCに入れる
    • MicroSDにbootイメージを書き込む
      • etcherを起動し、raspbianを選択してburn
    • Raspberry piに、ヒートシンクをつける
    • Raspberry piに、microSD、USBキーボード、HDMIケーブルをつける
    • ACアダプターをつけて起動する
    • 初期アカウントでログインする
      • id:pi
      • password:raspberry
    • config
  • 初期設定
    • つなぐと、読み込み後にデスクトップが起動する マウスでnext
    • country:japan
    • language:japanese
    • timezone:tokyo
    • new password設定
    • wifiが自動検索される。いったんskip
    • アップデートが自動検索される。ネットにつながっていないのでエラーになる
    • rebootで再起動される
  • account変更 (仮名:raspberrysan)
    • $sudo adduser raspberrysan
    • $groups pi
    • $sudo usermod -G pi,adm,……
    • $groups raspberrysan
  • piアカウントを一応消しておく
    • $userdel -r pi
  • sshd_configで、ポートや直接ログイン禁止を設定
  • アップデート
    • LANをつなぎ、アップデート
      • $sudo rpi-update
      • $sudo reboot
      • $sudo apt-get update
      • $sudo apt-get upgrade
    • $sudo apt-get install iptables iptables-persistentし、設定

sshでもよかったけれど、いったん無効にして、win10とPiをVNCでつなぐ。
こちらを参考に。

    • 自分のルーターにアクセスし、raspberry pi(MACアドレスがb8:27:eb……)のIPアドレスを192.168.1.10に固定
    • メニュー>設定>Raspberry Piの設定>インターフェース>VNC:有効にする
    • ネットワークアイコンにカーソルを合わせ、eth0が設定した192.168.1.10になっていることを確認
    • win10では、VNC Viewerをダウンロード、インストール
    • VNC Viewerを起動して、192.168.1.10にアクセス、フレーズ等確認してOK
    • これでリモートデスクトップ完了
    • 切るときはVNC Viewer上部の×を押す

起動したときにコマンドラインで起動するように

以降、デスクトップを起動したいときは$startxで。デスクトップから$rebootでもCLIに戻れる。

ここまででいったんMicroSDをバックアップしておいた。


ここからがMinecraft Server導入。

  • Minecraft Serverのインストール。今回は1.13.2。

こちらを参考に。

  • screenのインストール
    • $sudo apt-get install screen
  • フォルダの作成
  • serverファイル取得
  • 権限切り替え(行わないとたまにパーミッションエラーになる)
    • $cd ~
    • $sudo chmod 747 /home/raspberrysan/minecraft
  • 作業フォルダ移動
  • 一度目の起動
    • $java -jar -server -Xmx800M -Xms800M minecraft_server.1.13.2.jar nogui
  • Stopping serverを確認し、当該フォルダのeula.txtを開き、「eula=false」を「eula=true」にする
  • 二度目の起動(ゆっくり待つ)
    • $java -jar -server -Xmx800M -Xms800M minecraft_server.1.13.2.jar nogui
  • 起動用シェルスクリプトの作成(上記サイト参照)
    • 起動コマンド中に指定するメモリ割り当て量は、上記では800MBにしているものの、ぎりぎりまで上げたいところ。$freeでフリーメモリをみておいて、その分を入れておきたい。
  • $reboot

Hamachiの導入
グローバルIP指定やポート開放ができるのであればこれは省略。hamachiを使う場合は必ず身内用で。
こちらを参考に。
最新のHamachi for Linuxはこちら。今回は2.1.0.198-1。
https://www.vpn.net/linux

(あらかじめ、hamachiアカウントを登録しておく。ここでは例としてa@b。グループがなければそれも作成する。ここでは例として000000/password)

こちらを参考に。

    • $sudo vi /etc/rc.localし、末尾「exit 0」より前に下記を追加
    • $reboot

ここまでで二度目のバックアップ。

通常起動

    • $./startmc.sh
    • $screen -r
  • 「Done!」が出ればサーバー起動成功

あとはそのまま。(stopでサーバー停止。Ctrl+A+DでCLI画面に戻る)

クライアントwinPC

  • クライアントをダウンロード、1.13.2をインストール
  • hamachiクライアントをインストール、raspberry piと同じグループに入る
  • クライアントを起動、マルチプレイ>サーバーに192.168.1.10(もしくはhamachiに表示されているpiのIP)を指定
  • プレイ可能

//////////
ここまでの感想
導入は意外と簡単に感じた。たまにパーミッションで引っかかることはあるものの、それ以外はスムーズに。あと、サーバー起動時にメモリ量設定をしないとメモリ不足エラーになる。
サーバーが起動しなくなることはほぼなく、worldの散歩もできる。しかし、実際のプレイ感としては、ところどころに重い部分がある。
主なエラーとして、
"Can't keep up!"
という、メモリ不足による処理エラーが数十秒に一度出る。あまりにこの数値が大きいときはラグも大きめ。
あまりにひどいと、木を伐採したのが無効化されたり、数秒巻き戻されたりする。
また、
"Player moved quickly!"
という、キャラクタの移動が速いエラーも起こる。特にworldの新しい場所に行ったときに頻発。
もちろん、接続人数が二人に増えるとラグも多め。特に、ネザーゲートを作成した途端かなり重くなった。
対策としては下記になるだろうか。
・なるべく多めにメモリを充てる
・CPUのオーバークロック (3B+だとデフォルトで無効?)
・server.properties中のview-distanceを少なめにする
・spigotサーバーを導入してみる
というわけで、spigotサーバーも試してみた。
//////////

Spigotサーバーの導入
こちらを参考に。

$git config --global --unset cora.autocrlf
$java -jar BuildTools.jar -rev 1.13.2
↑がかなり時間がかかる。とまっているように見えるときも進んでいる。
successで成功。spigot-1.13.2.jarが目的ファイル。

  • 一度目の起動
    • $java -jar -server -Xmx800M -Xms800M spigot-1.13.2.jar nogui
  • Stopping serverを確認し、当該フォルダのeula.txtを開き、「eula=false」を「eula=true」にする
  • 二度目の起動(ゆっくり待つ)
    • $java -jar -server -Xmx800M -Xms800M spigot-1.13.2.jar nogui
  • 起動用シェルスクリプトminecraft_server.1.13.2.jarをspigot-1.13.2.jarに書き換える
  • $reboot
  • バックアップ
  • $./startmc.sh
  • $screen -r

//////////
Spigotの感想
エラーが減るとのことで試してみたところ、確かにCan't keep upエラーはまずでなくなった。比較してもかなり軽い。本当たまにtoo moved quicklyエラーが出るくらい。あと、敵の挙動が少し変わる。
//////////


//////////
その他やってみたいこと

  • オーバークロックでarm_freq=1000,over_voltage=2にしたら改善傾向
  • 定期的な再起動
  • もっと軽くする

//////////