如何在 Raspberry Pi 上架设 Minecraft 服务器
Minecraft是有史以来最受欢迎的游戏之一。你可以在多人游戏模式中与你的朋友一起玩它。你知道Raspberry Pi 4足够强大,可以运行Minecraft服务器吗?在这篇文章中,你将了解到存在哪些不同的变化的基本知识,Minecraft的一点历史,以及如何在你的树莓派上设置和操作你自己的Minecraft服务器。
威廉与服务器的历史
要谈Minecraft服务器,我们必须简要地讨论Minecraft的两个 "大 "分叉。
Mojang是《Minecraft》的创造者,最初创建《Minecraft》时是在2008年。 爪哇.
有趣的题外话:尽管Java应该是真正可移植的("一次编写,随处运行"),但游戏依赖于x86的本地库。这意味着Java版本的Minecraft将不能在其他平台上运行,比如Raspberry Pi。树莓派是基于ARM的(ARMv6 / ARMv7 / ARMv8,取决于你看的是哪个树莓派)。
Raspi Berry的Java解释
这个Java Minecraft版本可以在PC、Mac和Linux(x86)机器上运行。
相应地,有与Java版兼容的服务器软件(见下文对不同的可用选择的全面讨论)。
第二个版本的Minecraft,从头开始写,被称为MCPE(Minecraft Pocket Edition)。它最初出现在安卓系统上,并且是用 C++.这个版本被移植到Windows 10、iOS、PlayStation 4、XBox和Nintendo Switch。它现在被称为 威廉姆斯基岩版.(Bedrock指的是用C++编写的引擎)。这就是现在的主要版本,包括跨平台游戏。
不幸的是,Bedrock版与Java版不兼容。这意味着Mac和Linux的玩家不能用它来参加跨平台游戏。
更重要的是,它需要有自己的服务器软件,我们将在下面简单介绍一下。
在Raspberry Pi操作系统32位上安装Spigot
这将引导你完成Spigot的安装。我使用一个8GB的Raspberry Pi 4,在默认的32位操作系统下开始安装。
准备安装
打开一个终端,并运行以下命令。
sudo apt-get update
sudo apt-get install git openjdk-8-jre-headless
mkdir /home/pi/spigot-build
cd /home/pi/spigot-build
这将更新软件包列表,并安装git和OpenJDK 8(Java Runtime Environment,JRE)。此外,它还将创建一个新的目录用于构建Spigot,并将其改为。
然后,下载最新的 来自SpigotMC网站的BuildTools.jar.你可以使用 wget 为这个。
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
这是一个快速下载,约4MB。
建造水龙头
现在开始构建。
java -jar BuildTools.jar
我已经开始在 13:00在使用我的树莓派4 8GB时,它的完成度约为 13:15 - 所以它花了大约1小时15分钟。下面是你将看到的初始输出的截图。
构建过程使用了你的Raspberry Pi上的多个内核。
这里是你将看到的最后一个屏幕。
一旦构建完成,你会看到完成的Spigot服务器.jar文件被保存到哪里。在我的例子中(因为它已经构建了spigot-1.16.4.jar),它是。
/home/pi/spigot-build/./spigot-1.16.4.jar
剩下的文件不再需要了,我们只需要最后的spigot-*.jar。
安装新的威廉与服务器
我建议将 Minecraft 服务器安装到 /opt 目录层次中。让我们在下一步中完成安装,并将 .jar 文件重命名为 spigot.jar:
sudo mkdir /opt/spigot
sudo mv /home/pi/spigot-build/spigot-*.jar /opt/spigot/spigot.jar
sudo chown -R pi:pi /opt/spigot
最后一条命令将该目录的所有者改为用户pi,这将使你更容易以必要的权限开始工作,而不必创建一个新用户。对于一个多人使用的系统来说,为了获得额外的安全/控制权,你可能想创建自己的系统用户来运行spigot。
安全提示
现在你可以尝试启动你的新Minecraft服务器,为它分配2GB内存。
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
在32位Raspberry Pi操作系统上为spigot分配超过2700M的资源,导致我的服务器无法启动。
[47.195s][warning][os,thread] 启动线程失败 - pthread_create failed (EAGAIN) for attributes: stacksize: 320k, guardsize: 0k, detached.
[07:57:48] [服务器线程/ERROR]。遇到了一个意外的异常
java.lang.OutOfMemoryError: 无法创建本地线程:可能是内存不足或达到进程/资源限制
at java.lang.Thread.start0(Native Method) ~[?:?] 。
at java.lang.Thread.start(Thread.java:803) ~[?:?] 。
at java.util.Timer.(Timer.java:177) ~[?:?] 。
at org.spigotmc.Metrics.start(Metrics.java:217) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at org.spigotmc.SpigotConfig.registerCommands(SpigotConfig.java:91) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:149) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:809) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$0(MinecraftServer.java:164) ~[spigot.jar:git-Spigot-a19903d-167ff59]
at java.lang.Thread.run(Thread.java:834) [?:?] 。
[07:57:48] [服务器线程/ERROR]。此崩溃报告已被保存到。/opt/spigot/./crash-reports/crash-2020-11-23_07.57.48-server.txt
[07:57:48] [服务器线程/INFO]。停止服务器
[07:57:48] [服务器线程/INFO]。拯救球员
[07:57:49] [服务器线程/INFO]。保存世界如下所述(错误处理/内存不足)。 即使服务器启动正常,它也可能因内存不足而崩溃。如果你给它太多的内存--这就是为什么我们坚持使用一个安全的内存。 最大2GB 这里。在64位操作系统上,这个数字可能更高,所以你可以使用更多的Raspberry Pi 4 / 8 GB的内存。
32位Raspberry Pi操作系统的Spigot内存限制
现在Spigot将生成两个新文件(eula.txt & 服务器.属性)和一个目录(原木).你会在第一次运行时看到一个错误,因为EULA还没有被接受。
正在加载图书馆,请等待...
[15:01:09] [main/ERROR]:从文件中加载属性失败:server.properties
[15:01:09] [main/WARN]。加载eula.txt失败
[15:01:09] [main/INFO]:你需要同意EULA才能运行服务器。请到eula.txt查看更多信息。
如果你看一下eula.txt,你会看到以下内容。
#B如果将下面的设置改为 "true",则表明您同意我们的EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Nov 22 15:01:09 CET 2020
eula=false
请前往Mojang的网站并 阅读EULA (终端用户许可协议),然后再实际接受它。
下面是你如何接受它。运行
nano /opt/spigot/eula.txt
并将最后一行编辑为
eula=true
用Ctrl + O保存(并按回车键),用Ctrl + X退出
从命令行启动Spigot
现在试着运行命令,再次启动服务器。
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
Spigot Minecraft服务器现在将启动并初始化。
在这段时间里,你的CPU负载将在所有核心上接近100 %。
在开始时,将显示一些有用的信息(在此摘录)。
[15:09:05] [Server thread/INFO]:启动minecraft服务器版本1.16.4
[15:09:06] [Server thread/INFO]:默认的游戏类型。生存(SURVIVAL)
[15:09:09] [Server thread/INFO]:在*:25565上启动Minecraft服务器
上面引用的最后一行显示,你的Minecraft服务器绑定了Raspberry Pi上的所有IP地址,并且绑定了 端口25565 在这些IP地址上。
这家初创企业采取了 190.812 s (或大约三分钟)在我的Raspbery Pi 4 / 8GB的股票上。一旦完成,你会看到一个提示。
与Spigot服务器交互
类型
help
在这个提示下(没有 /),以获得一个可能的命令列表。
例如,用命令 列表,你可以看到有多少玩家在线。
使用命令 版本,你可以看到你的服务器的当前版本,以及是否有更新的服务器可用。注意,你必须重建spigot.jar来更新服务器。
跟不上!服务器超载了吗?警告背后的运行
你很可能会看到这样的输出
[08:06:11] [服务器主题/WARN]。跟不上了!服务器超载了吗?运行时间为8444ms,即落后168ticks
找到你的Raspberry Pi Minecraft服务器的IP地址
如果你不确定你的Raspberry Pi的IP地址是什么,你可以简单地通过输入来找到它。
ip -4 addr show
这将显示类似以下的输出。
寻找eth0条目(在我的例子中是2),这是Raspberry Pi上的LAN。IP地址是inet之后,斜杠之前的那一位。在我的例子中 192.168.1.235 :
连接到你的Minecraft服务器
你将(当然🙂需要Minecraft,你可以从以下网站获得 威廉斯的官方网站.你需要Java版本的Minecraft,如前所述。
如果你还没有Minecraft,并且需要购买它,你将需要建立一个Mojang账户。你在购买时将会收到一封收据电子邮件,其中包括Windows、macOS、Linux、Arch Linux和Debian的下载链接(注意这些必须是X86系统,正如之前讨论的那样!)。
例如,对于Windows,你会得到MinecraftInstaller.msi。
在启动Minecraft时,你将会看到一个登录屏幕。
登录后,你会看到一个概述屏幕,有一个播放按钮。
下载完成后,游戏主界面会出现。
点击这里的多人游戏。你会得到一个关于第三方在线游戏的警告,点击 着手进行 这里(可选:你也可以在方框内打勾 不要再显示这个屏幕).
现在你会得到一个Windows(如果你在Windows上玩)的安全提示。
点击允许访问这里(德语为 "Zugriff zulassen")。
现在你将看到以下屏幕。
要快速开始,请点击直接连接,并在这里输入你的服务器的IP地址(如何找到它,见上文)。
Minecraft会记住下一个会话的IP地址,并自动向你建议。
点击 "加入服务器"。它将连接,并短暂地显示一个加载屏幕。
ip -4 addr show
最后,你会看到游戏菜单。
点击 "回到游戏",开始在你的新Minecraft服务器上玩耍!
你可以在玩的时候按F3,以显示信息的覆盖,在那里你可以看到你确实连接到一个Spigot服务器,并检查Minecraft版本。
在你的Raspberry Pi Minecraft服务器上输出
一旦你连接了,在你的Minecraft服务器上会有一些额外的输出。
[15:53:32] [User Authenticator #1/INFO]。玩家buyzero的UID是e76a3199-3ed0-4064-8086-d9f565235f71
[15:53:33] [服务器线程/INFO]: buyzero[/192.168.1.202:51388] 以实体ID 435登录在([world]25.5, 64.0, 137.5)。
该命令 列表 现在显示你有一个用户已经登录。
[15:57:05] [Server thread/INFO]:最多20名玩家中有1人在线:buyzero
此外,还将显示与你的球员有关的事件。
[16:04:24] [服务器线程/INFO]: buyzero被僵尸杀死了
使用命令 购零操作 你可以让用户buyzero成为服务器操作员(根据情况替换你的用户名)。
购零操作 [08:09:18] [服务器主题/INFO]。让buyzero成为服务器操作员
停止喷水器的威廉斯服务器
如果你在你的Minecraft服务器的提示下,输入 停止 然后是回车。这将停止服务器,保存世界,并返回到命令行提示。
停止
[08:36:57] [服务器线程/INFO]。停止服务器
[08:36:57] [服务器线程/INFO]。停止服务器
[08:36:57] [服务器线程/INFO]。拯救球员
[08:36:57] [服务器线程/INFO]: buyzero失去连接。服务器关闭
[08:36:57] [服务器线程/INFO]: buyzero离开了游戏
[08:36:57] [服务器线程/INFO]。保存世界
[08:36:57] [Server thread/INFO]:保存关卡'ServerLevel[world]'/minecraft:overworld的块。
[08:37:02] [服务器线程/INFO]。ThreadedAnvilChunkStorage(世界)。所有块状物都被保存
[08:37:02] [Server thread/INFO]:保存关卡'ServerLevel[world_nether]'/minecraft:the_nether的数据块
[08:37:05] [服务器线程/INFO]。ThreadedAnvilChunkStorage(DIM-1)。所有的块都被保存了
[08:37:05] [Server thread/INFO]:保存关卡'ServerLevel[world_the_end]'/minecraft:the_end的数据块
[08:37:10] [服务器线程/INFO]。ThreadedAnvilChunkStorage(DIM1)。所有块都被保存
[08:37:10] [服务器线程/INFO]。ThreadedAnvilChunkStorage(世界)。所有块状物都被保存
[08:37:10] [服务器线程/INFO]。ThreadedAnvilChunkStorage(DIM-1)。所有的块都被保存了
[08:37:10] [服务器线程/INFO]。ThreadedAnvilChunkStorage(DIM1)。所有块都被保存
你的用户将看到以下屏幕。
创建一个systemd服务
https://github.com/sindastra/systemd-minecraft
错误处理
内存不足
上面的截图显示了连接到你的服务器的玩家会看到的错误信息,而在服务器端,你会看到以下日志输出。
没有足够的内存让Java Runtime Environment继续运行。
本地内存分配(malloc)未能为Chunk::new分配1438248个字节
带有更多信息的错误报告文件被保存为。
/opt/spigot/hs_err_pid1531.log
编译器重放数据被保存为。
/opt/spigot/replay_pid1531.log
在这种情况下,你需要调整你的内存设置。按照 这篇文章的建议,它应该比你的Raspberry Pi上可用的系统内存低大约1000 MB到1500 MB。考虑到,对于一个32位的操作系统,该进程只能解决一个有点低于4GB的内存,所以即使有一个32位的树莓派,你给你的Minecraft服务器的总数应该低于2500 MB - 2000 MB,以安全为前提(2GB)。
总结
按照这个指南,你将能够运行你自己的树莓派Minecraft服务器,并与你的朋友一起玩。
参考文献/进一步阅读
- Minecraft服务器的小历史 (主要是Bukkit / Spigot / Bedrock) (sindastra.de)
- Bitloco.org (Minecraft Java版服务器社区)
- 加气枪安装指南 (Spigotmc.org)
[...] 您可以将 Raspberry Pi 用作网络服务器、文件服务器、打印服务器、媒体服务器、Minecraft 服务器和物联网 [...] 。