Raspberry Pi 3 B+でMinecraftサーバーを立てる方法をご紹介します。Minecraftサーバーを立てたら常時稼働させておきたいところですが、負荷の高いMinecraftを通常利用しているPCで常時稼働させるのは難しいと思います。サーバー専用のPCを買うとなるとそれなりの出費ですし、電気代は言わずもがな。Raspberry Piであれば1万円以下の出費で低消費電力のサーバーを立てることが可能です。
書いてから気づいたのですが、同様の記事が数多ありますね(笑)。一応の差別化として、本記事は以下のポリシーで書いています。
- 対象者は、WindowsPCは扱えてMinecraftは大好きだけど、LinuxやRaspberry Piは扱ったことがない。ような方です。
- 可能な限りシンプルかつ汎用的な手順、構成にするようにしています。screenは使っていません。
- すでに構築済みのDebian系Linux環境があるなら、「4.Minecraftサーバーの構築」のみ実施いただければ構築できます。
目次
用意するもの
以下のものを用意します。秋葉原や大須等の電気街に行けば店頭でも売っていると思いますが、Amazonでも揃いますし、正規代理店のRSコンポーネンツでも良いかと。参考までにAmazonの該当商品へのリンクを張っています。
Raspberry Pi 3 Model B+ [5,000円程度]
MinecraftはそれなりにCPU、メモリを使用するため、本稿執筆時点で最新の3 B+を使用します。
ACアダプタ(5V,2.5A,Micro-B) [1,500円程度]
ACアダプタは出力電圧が5V、出力電流は2.5A以上、コネクタがMicro-Bのものを選びます。Raspberry Pi 3対応と銘打っているものを買えば間違いないです。私は3.0Aのものを買いました。電流が2.5Aより低いと高負荷時にダウンしてしまう場合があるようなので注意してください。
ファン付きケース [1,500円程度]
むき出し状態でも動きますが、取り扱いに注意が必要になってしまうのでケースに入れた方が良いです。Raspberry Pi 3対応のものを購入してください。また、前述のとおりMinecraftはそれなりにCPUを使うので、安定稼働のためにはヒートシンクとファンをつけた方が良いです。ケースに合うファンを別途探すのは難しいので、ケースとセットで売っているものをお勧めします。
MicroSDカード [1,000円程度]
MicroSDカードは転送速度重視で選びます。Raspberry Piの仕様書には転送速度の上限が書いていないのでよく分からないのですが、Class10、UHS-1のものを購入して問題なく稼働しています。容量は16GB~32GBで十分かと思います。ただ相性問題が多々あるようですので、ネット上で問題なしの実績があるものを選んだ方が無難です。私は店舗で購入するときに、隣に置いてあったこの製品を買いました。おそらく検証済みであろうということで。
LANケーブル
500-800円程度ネットワークに有線LANで接続する場合はLANケーブルを用意します。お持ちのRaspberry Piの設置場所からルーターもしくはスイッチングハブに届く長さを用意してください。無線LAN(WiFi)を使うなら不要です。
HDMIケーブル(A-A)
Raspberry PiはHDMIで映像を出力します。Raspberry Pi側はタイプA、モニター側は機器に合わせますが、通常はタイプAだと思います。モニターを接続するのは初期設定時のみなので、他の機器で使っているものを一時的に流用すれば十分です。なければ1000円以内で買えます。
キーボード&マウス
USB接続のキーボードとマウスを用意します。初期設定時にのみ使用するため、専用のものを用意する必要はありません。
PCモニター or TV
モニターは初期設定時にのみ接続するので、専用のものを用意する必要はありません。今のテレビはほとんどHDMI入力が付いているので、テレビを一時的に使えば問題ないです。
OSのインストールと起動
Raspberry Pi用のOSであるRaspbianをインストールします。OSのイメージファイルをダウンロードし、microSDカードに書き込んでRasbperry Piに差し込めばOKです。
Raspbianのダウンロード
Raspbian Stretch Liteをダウンロードします。
推奨されるアーカイバは7-Zipです。定番のlhaplusでも良いのですが、lhaplusは巨大なファイルや、多数のファイルを含むzipファイルを展開するとエラーが起きることがあるので、筆者としても7-Zipがお勧めです。
展開すると「2018-11-13-raspbian-stretch-lite.img」のようなイメージファイルが出来ます。「2018-11-13」の部分はリリースされた日付なので、さらに新しいバージョンが出れば変わります。
イメージの書き込み
イメージファイルをイメージ書き込みツールを使ってmicroSDカードに書き込みます。インストールガイドで推奨されているイメージ書き込みツールは「Etcher」もしくは「Win32DiskImager」です。操作はEtcherの方がシンプルです。Win32DiskImagerは少々複雑ですが、イメージファイルからSDカードへの書き込みだけではなく、SDカードからイメージファイルへの読み取りもできるので、バックアップ目的としても使えます。Etcherでの書き込み方法をインストールガイドから転記します。
- etcher.ioからWindowsインストーラをダウンロードする
- Etcherを実行し、解凍されたRaspbianイメージファイルを選択してください
- SDカードドライブを選択してください
- 最後に、書き込みをクリックしてSDカードにRaspbianイメージを書き込みます
- 進行状況バーが表示されます。 完了すると、ユーティリティはSDカードを自動的にアンマウントし、コンピュータからSDカードを安全に取り外すことができます。
Raspbianを起動
セットアップガイドの転記ですが、以下のように接続して起動します。
- microSDカードを挿入します。
- HDMIケーブルでRaspberry Piとモニターを接続します。
- USBマウスとキーボードを接続します。
- 有線でネットワークに接続する場合は、LANケーブルでRaspberry Piとネットワーク機器(ルーター、スイッチングハブ、場合によってはPC)を接続します。
- ACアダプタの電源プラグをコンセントに差し込み、USB Micro-BコネクタをRaspberry Piに差し込みます。
Raspberry Piには電源ボタンがないので、v.の時点で電源ONとなります。虹色の画面が表示されたのち、しばらく起動処理が行われます。以下の「ログインプロンプト」が表示されれば起動成功です。
1 |
login: |
Raspbianの初期設定
Minecraftを動かす前に、Raspbianの初期設定を行います。インストール直後の状態ではインターネットに接続もできませんし、表示言語も日本語でないうえキーボード設定も違うので文字入力もままなりません。
Raspbianにログイン
Raspbianには最初から「pi」ユーザーが登録されていますが、piユーザーは「一般ユーザー」でシステムに関する設定やサービスの停止起動を行うことができません。OSの設定を行う場合は「root」ユーザーにスイッチします。rootユーザーとはそのOSのあらゆる操作を行うことができる「管理者ユーザー」です。
ここではpiユーザーでログインしたのちrootユーザーにスイッチしています。
1 |
login:pi |
1 2 |
password: ★「raspberry」と入力してEnter $ |
1 2 3 |
$ sudo su - [sudo] pi のパスワード: ★「raspberry」と入力してEnter # |
piユーザーにログインした直後の場合、パスワードの入力を求められない場合があります。
raspi-configによる設定
raspbianにはOSを設定するためのraspi-configが付属していますので、それを利用してOSの初期設定を行います。
1 |
# raspi-config |
以下の画面が開きます。
基本的な操作方法は、矢印上下キー(↓↑)でカーソル移動、Tabキーでカーソルジャンプ、スペースで選択、Enterで決定です。
「2 Network Options」にカーソルを合わせて決定
「N2 Wi-fi」にカーソルを合わせて決定
「JP Japan」にカーソルを合わせて決定
「Wi-fi country set to JP」と表示されるので<Ok>
SSIDを入力して<Ok>
パスフレーズを入力して<Ok>
※SSIDとパスフレーズはお使いのWiFiルーターを確認してください。有線LANで接続する場合はこの設定は不要です。
「4 Localisation Options」にカーソルを合わせて決定
「I2 Change Timezone」にカーソルを合わせて決定
「Asia」にカーソルを合わせて決定
「Tokyo」にカーソルを合わせて決定
「4 Localisation Options」にカーソルを合わせて決定
「I3 Change Keyboard Layout」にカーソルを合わせて決定
「Generic 105-Key(Intel) PC」にカーソルを合わせて決定
「Other」で決定
「Japanese」にカーソルを合わせて決定
「Japanese – Japanese(OADG 109A)」にカーソルを合わせて決定
「The default for the keyboard layout」にカーソルを合わせて決定
「No compose key」にカーソルを合わせて決定
「5 Interfacing Options」にカーソルを合わせて決定
「P2 SSH」にカーソルを合わせて決定
「Would you like the SSH server to be enabled?」と表示されるので<Yes>にカーソルを合わせて決定
「The SSH server is enabled」と表示されるので<Ok>
最後に<Finish>にカーソルを合わせて決定
「Would you like to reboot now?」と表示された場合は<Yes>で再起動します。
再起動が完了しログインプロンプトが表示されたら、再度piユーザーでログインします。
IPアドレスの決定
Raspbianをネットワークに接続するためのIPアドレスを決めます。分かる方は「D.IPアドレスの設定」まで読み飛ばしてください。この項はWindows PCでの操作です。お使いのPCとRaspberry PiにローカルIPアドレスを設定する想定で記載させて頂きます。
1 |
# ipconfig |
有線でネットワークに接続している場合(PCにLANケーブルが繋がっている場合)は「ローカル エリア接続」を、無線LAN(WiFi)で
ネットワークに接続している場合は「Wi-Fi」と書かれている項目を探します。見つかったら、「IPv4 アドレス」「サブネット マスク」「デフォルト ゲートウェイ」「DNS サーバー」の値をメモしておきます。
※この画像はWiFiの場合の例です。
192.168.*.*
172.16.*.*~172.32.*.*
10.*.*.*
※「*」は0~255の数字が入ります。
PCのIPv4アドレスは3つの「.」で区切られていますので、一番右の数値を変えてRaspberry PiのIPアドレスにします。
例えばPCのIPアドレスが192.168.0.10だった場合、192.168.0.110にするなどです。あまり近い数値だとDHCPで自動設定される範囲に入ってしまう可能性が高いので、ある程度離した値にすることをお勧めします。
1 |
ping <Raspberry PiのIPアドレス> |
IPアドレスは同じネットワーク内(家庭内)で重複することはできませんので、同じIPアドレスを持った機器(PC、スマホ、プリンタなど)がないかを確認しています。以下のように表示される場合は問題ありません。
1 |
*.*.*.* からの応答: 宛先ホストに到達できません。 |
実行したときに、以下のように表示された場合は、そのIPアドレスの機器が存在するので、他のIPアドレスに変えて再度pingを実行してください。
1 |
*.*.*.* からの応答: バイト数 =32 時間 =5ms TTL=64 |
IPアドレスの設定
家庭内でDHCPサーバーが稼働している場合は自動的にIPアドレスが設定されていると思いますが、サーバーとして稼働させるためにはIPアドレスを固定しておいた方がよいです。IPアドレスはdhcpcd.confファイルで設定します。ここからはRaspbian上での操作です。
1 2 3 4 |
$ sudo su - [sudo] pi のパスワード: ★「raspberry」と入力してEnter # cp -pi /etc/dhcpcd.conf ~/ # nano /etc/dhcpcd.conf |
#でコメントアウトされた同様の記述があるので、#を外して編集すると楽です。
1 2 3 4 |
interface <インターフェース名> static ip_address=<IPアドレス>/<プレフィックス長> static routers=<デフォルトゲートウェイ> static domain_name_servers=<DNSサーバー> |
各値の決め方は以下の通りです。
インターフェース名 | WiFiで接続する場合は「wlan0」、有線LANで接続する場合は「eth0」 |
IPアドレス | Rapspberry Piに設定する固定IPv4アドレス |
プレフィックス長 | サブネットマスクが255.255.255.0なら「24」、それ以外の場合はこちらの早見表で確認 |
デフォルトゲートウェイ | インターネットに抜けるゲートウェイになるルーターのIPアドレス。LANに接続しているPCと同じ値にする。 |
DNSサーバー | 名前解決を行うDNSサーバーのIPアドレス。複数ある場合は半角スペースで区切って記述する。 |
1 2 3 4 5 |
例) interface wlan0 static ip_address=192.168.0.100/24 static routers=192.168.0.1 static domain_name_servers=192.168.0.1 8.8.8.8 |
1 |
# shutdown -r now |
1 2 3 |
$ ping <IPアドレス> $ ping <デフォルトゲートウェイ> $ ping www.fukushimaya.xyz |
下記のように表示されれば問題ありません。1秒間隔で出力され続けるので、Ctrl + Cを押して止めてください。
1 2 3 4 5 |
PING * (*) 56(84) bytes of data. 64 bytes from *: icmp_seq=1 ttl=64 time=0.185 ms 64 bytes from *: icmp_seq=2 ttl=64 time=0.109 ms 64 bytes from *: icmp_seq=3 ttl=64 time=0.113 ms ・・・ |
※「*」にはFQDNまたはIPアドレスが入ります。
pingは相手との通信相手との疎通を確認するコマンドです。
「ping <IPアドレス>」がうまくいったら、Raspbianのネットワーク設定は問題ありません。
「ping <デフォルトゲートウェイ>」がうまくいったら、デフォルトゲートウェイと通信できています。デフォルトゲートウェイに接続できていれば、大抵の場合家庭内の他の機器とも通信できます。
「ping www.fukushimaya.xyz」は本サイトへのpingです。宛先をgoogleやyahooにしてもかまいません。これができれば、インターネットへ接続できていること、DNSの設定に問題がないことが分かります。
TeraTermでの接続
ネットワークの設定ができたらPCからリモート操作(遠隔操作)ができるようになります。リモート操作を行うには「ターミナルソフトウェア」が必要です。特にこだわりがなければ定番の「TeraTerm」を使いましょう。
1 2 3 |
$ sudo su - [sudo] pi のパスワード: ★「raspberry」と入力してEnter # |
GPUメモリの縮小
Raspberry Piの少ないリソースを少しでもMinecraftサーバーに割り当てるため、GPUに割り当てるメモリを縮小します。デフォルトで64MBがGPUに割り当てられていますが、モニターをつなげてGUIで操作しない限りそこまでのサイズは不要なので、設定可能な最小サイズまで縮小し、その分をシステムで使用できるようにします。こちらを参考にさせて頂きました。
1 2 3 4 5 |
# free -m total used free shared buff/cache available Mem: 927 35 740 6 151 837 Swap: 99 0 99 # |
1 2 |
# cp /boot/config.txt ~/config.txt.org # nano /boot/config.txt |
1 |
gpu_mem=16 |
1 |
# shutdown -r now |
1 2 3 4 5 |
$ free -m total used free shared buff/cache available Mem: 976 28 882 12 65 888 Swap: 99 0 99 # |
Minecraftサーバーの構築
いよいよMinecraftサーバーの構築に入ります。こちらのサイトを参考にしました。
Javaのインストール
1 2 3 4 |
$ sudo su - [sudo] pi のパスワード: ★「raspberry」と入力してEnter # apt-get update # apt-get -y install openjdk-9-jre |
1 2 3 4 |
# java -version openjdk version "9-Raspbian" OpenJDK Runtime Environment (build 9-Raspbian+0-9b181-4bpo9rpt1) OpenJDK Server VM (build 9-Raspbian+0-9b181-4bpo9rpt1, mixed mode) |
Minecraftサーバーのダウンロード
1 2 3 4 5 |
# useradd -m -d /home/minecraft -s /bin/bash minecraft # passwd minecraft 新しい UNIX パスワードを入力してください: ★パスワードを入力 新しい UNIX パスワードを再入力してください: ★パスワードを再入力 passwd: パスワードは正しく更新されました |
「-d /home/minecraft」の部分が後々重要になってきますので、間違わないようにしてください。
1 |
# su - minecraft |
1 2 |
$ mkdir server $ cd server |
Teratermとは別にブラウザを開き、Mojangの公式サイトに接続して画面右上のメニューをクリックします。
1 |
$ wget https://launcher.mojang.com/v1/objects/3737db93722a9e39eeada7c27e7aca28b144ffa7/server.jar |
1 2 |
$ ls -l -rwxr--r-- 1 minecraft minecraft 33835116 10月 22 20:44 server.jar |
1 |
$ chmod u+x server.jar |
特にインストーラーなどはありません。このserver.jarがサーバーとして動作します。
Minecraftサーバーの設定
Minecraftの動作設定を行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ java -Xms900M -Xmx900M -jar server.jar nogui ~省略~ [02:15:47] [main/INFO]: Loaded 0 advancements [02:15:47] [Server thread/INFO]: Starting minecraft server version 1.13.2 [02:15:47] [Server thread/INFO]: Loading properties [02:15:47] [Server thread/WARN]: server.properties does not exist [02:15:47] [Server thread/INFO]: Generating new properties file [02:15:47] [Server thread/WARN]: Failed to load eula.txt [02:15:47] [Server thread/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info. [02:15:47] [Server thread/INFO]: Stopping server [02:15:47] [Server thread/INFO]: Saving worlds [02:15:47] [Server Shutdown Thread/INFO]: Stopping server [02:15:47] [Server Shutdown Thread/INFO]: Saving worlds $ |
初回は起動できず「Stopping server」で終了します。
ファイル内に記載されているURLを開くとMINECRAFT エンド ユーザー ライセンス条項が確認できますので、同意できるようならファイル中の「eula=false」を「eula=true」に変更して保存してください。ちなみに同意しないとサーバーは起動できません。Minecraftで遊んでいるならすでに同意しているはずなので「true」にしましょう。
1 |
$ nano eula.txt |
1 2 3 |
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula). #Sat Dec 29 02:15:47 JST 2018 eula=true ★「false」を「true」に変更 |
1 2 3 4 5 6 7 8 9 10 11 12 |
$ java -Xms900M -Xmx900M -jar server.jar nogui ~省略~ [16:35:29] [main/INFO]: Loaded 0 recipes [16:35:29] [main/INFO]: Loaded 0 advancements [16:35:29] [Server thread/INFO]: Starting minecraft server version 1.13.2 [16:35:29] [Server thread/WARN]: To start the server with more ram, launch it as "java -Xmx900M -Xms900M -jar minecraft_server.jar" ~省略~ [16:38:23] [Server thread/INFO]: Preparing spawn area: 96% [16:38:23] [Server thread/INFO]: Preparing spawn area: 100% [16:38:23] [Server thread/INFO]: Time elapsed: 98307 ms [16:38:23] [Server thread/INFO]: Done (167.602s)! For help, type "help" [16:38:28] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 4187ms or 83 ticks behind |
「Done」と表示され、Minecraftサーバーが起動しました。定期的に「server overloaded」と表示されますが、おそらくCPU、メモリ性能が足りないためかと思います。このまま利用することもできますが、Ctrl + Cで停止させてください。
1 2 |
$ cp -pi server.properties server.properties.org $ nano server.properties |
以下のパラメーターを変更します。
view-distance
表示できるチャンク数の最大値を狭くします。表示チャンク数はシングルプレイでもパフォーマンスに多大な影響を与えますが、サーバーでも同じのようです。
view-distance=10
↓
view-distance=4
max-players
同時接続できるユーザー数を減らします。これは検証していませんので、しばらく稼働させてみて適切な値を決めようと思っています。
max-players=20
↓
max-players=10
Minecraftサーバーのサービス化
上記の方法ではserver.jarを起動したコンソール(TeraTerm)を開き続けていないと使用できません。Raspbian起動時に、コンソール接続なしで自動的に起動させる設定(サービス化)を行います。Raspbianを含む多くのLinuxディストリビューションでは、systemdでサービスを管理していますので、server.jarをそれに登録します。
1 2 |
$ exit # |
1 |
# nano /etc/systemd/system/minecraft-server.service |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[Unit] Description=start and stop the minecraft-server [Service] WorkingDirectory=/home/minecraft/server User=minecraft Group=minecraft Restart=on-failure RestartSec=20 5 ExecStart=/usr/bin/java -Xms900M -Xmx900M -jar server.jar nogui [Install] WantedBy=multi-user.target |
(976 – 33 – 39 = 904MB)
1 |
# systemctl daemon-reload |
1 |
# systemctl enable minecraft-server |
1 |
# systemctl start minecraft-server |
1 2 3 4 5 6 7 |
# systemctl status minecraft-server.service ● minecraft-server.service - start and stop the minecraft-server Loaded: loaded (/etc/systemd/system/minecraft-server.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2018-12-31 02:05:08 JST; 1h 57min ago Main PID: xxx (java) CGroup: /system.slice/minecraft-server.service └xxx /usr/bin/java -Xms900M -Xmx900M -jar server.jar nogui |
「Active:」に「active (running)」と記載されていれば、起動に成功しています。
1 2 3 4 5 6 7 |
# su - minecraft $ tail -f server/logs/latest.log [18:10:35] [Server thread/INFO]: Preparing spawn area: 96% [18:10:35] [Server thread/INFO]: Preparing spawn area: 100% [18:10:35] [Server thread/INFO]: Time elapsed: 9463 ms [18:10:35] [Server thread/INFO]: Done (20.788s)! For help, type "help" [18:10:38] [Server thread/WARN]: Can't keep up! Is the server overloaded? Running 2541ms or 50 ticks behind |
止めるときはCtrl + Cキーを押してください。
1 2 |
$ exit # shutdown -r now |
1 |
$ systemctl status minecraft-server.service |
MinecraftサーバーにPCから接続する
サーバー名:任意の名前
サーバーアドレス:Raspberry PiのIPアドレス
動作について
動作を確認してみたところ、チャンクを生成している際に動きがカクついたり、フリーズしてしまうことがあります。また、モブを攻撃した際の動ぎがカクカクしていることがあります。それらを除けば特に問題はありませんでした。おそらくサバイバルモードで普通に遊ぶ範囲であれば大丈夫です。クリエイティブモードで空を飛んで、高速で移動するような操作は難しいでしょう。
ワールドの様子はシングルプレイと特に変わりません。村も生成されています。表示距離を短くしているので、遠くの景色は見えません。
性能の低いPCではOFFにした方がよい葉の透過(設定の「グラフィックス:描画優先」)は特に変更していませんが、動作に影響しているように見えません。おそらくクライアント側で処理されており、サーバーの性能とは関係ないようです。
チャンクの生成と、同時に動くモブ数およびプレーヤー数がサーバー側の性能に依存すると考えています。未検証ですが。
動画です。すでに生成されたチャンク内を移動しているので、滑らかに動きます。
電気代について
minecraftを稼働させた状態のRasbperry Piの使用電力を計測したところ、30日稼働させておよそ2kWhでした。
東京電力の電気料金一覧を参考に1kWhあたり26円とすると、1か月稼働させて発生する電気代は52円です。サーバーを稼働させる電気代と考えると、かなり安いです。
最後に
いかがでしたでしょうか?Raspberry Pi 3 B+とRaspbianの組み合わせであればほぼ間違いなく再現できるはずです。
試験的に今回構築したサーバーを公開しています。サバイバルモードで特に制限はかけていませんので、以下のFQDNに接続して遊んでみてください。
www.fukushimaya.xyz
何か問題がありましたらコメントしていただければ、(可能な範囲で)対応します!
最後までご覧いただきありがとうございました。よろしければ広告もご覧ください。
GWの暇を使って遊ばしてたラズパイでこちらの方法を試した所、無事サーバーが立ちました。ありがとうございます。
良かったです!試していただいてありがとうございます。
ポート開放の記事はありますか?
すいません仕事で時間がなくまだ書いていません。7月には書けると思います。
マイクラのアップデートの時に最新のバージョンへアップする方法は、ありますか?
しばらくブログをメンテしておらず遅くなりました。
試してはいないですが「4.Minecraftサーバーの構築」を再度実施することでバージョンアップになるはずです。
ユーザーの再作成は不要、ダウンロード時に最新版をダウンロード、Server.jarを置き換えればOKかと。もとに戻せるよう、Server.jarを置き換える前に、/home/minecraft以下をtarで圧縮して別の場所に保管しておくことをお勧めします。またはServer.jarは上書きせずに名前を変えて保存しておくかです。