Сервер Minecraft на Raspberry Pi

Minecraft - одна из самых популярных игр, когда-либо созданных. Вы можете играть в нее со своими друзьями в многопользовательском режиме. Знаете ли вы, что Raspberry Pi 4 достаточно мощный, чтобы запустить сервер Minecraft? В этой статье вы узнаете основы, какие существуют различные вариации, немного истории Minecraft, а также как настроить и запустить собственный сервер Minecraft на Raspberry Pi.

История сервера Minecraft

Чтобы говорить о серверах Minecraft, мы должны кратко обсудить два "больших" форка Minecraft.

Mojang, создатели Minecraft, первоначально создали Minecraft в Java.

Забавное примечание: Несмотря на то, что Java должна быть действительно переносимой ("напиши один раз и запускай где угодно"), игра зависит от нативных библиотек, которые являются x86. Это означает, что Java-версия Minecraft не будет работать на других платформах, например, на Raspberry Pi. Raspberry Pi работает на базе ARM (ARMv6 / ARMv7 / ARMv8, в зависимости от того, на какой Raspberry Pi вы смотрите).

Объяснения Raspi Berry's Java

Эта версия Minecraft на Java работает на машинах PC, Mac и Linux (x86).

Соответственно, существует серверное программное обеспечение, совместимое с редакцией Java (см. ниже для полного обсуждения различных доступных вариантов).

Вторая версия Minecraft, написанная с нуля, называлась MCPE (Minecraft Pocket Edition). Первоначально она появилась на Android и была написана на языке C++. Это издание было портировано на Windows 10, iOS, PlayStation 4, XBox и Nintendo Switch. Теперь она известна как Minecraft Bedrock edition. (Bedrock относится к движку, написанному на C++). Сейчас это основная версия, включающая кроссплатформенную игру.

К сожалению, издание Bedrock не совместимо с изданием Java. Это означает, что игроки Mac и Linux не могут присоединиться к кроссплатформенной игре с ним.

Более того, для этого требуется собственное серверное программное обеспечение, о котором мы вкратце расскажем ниже.

[TBD: инфографика].

[TBD: обзор серверов Minecraft для различных изданий].

Установка Spigot на Raspberry Pi OS 32 bit

Здесь вы пройдете через установку Spigot. Я использую для этого Raspberry Pi 4 с 8 ГБ памяти, под 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, и в нее будут внесены изменения.

Затем загрузите последнюю версию BuildTools.jar с веб-сайта SpigotMC. Вы можете использовать wget для этого:

wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar

Это быстрая загрузка размером около 4 МБ.

Постройте патрубок

Теперь начните сборку:

java -jar BuildTools.jar

Я начал сборку в 13:00используя мой Raspberry Pi 4 8GB, и он закончил примерно в 13:15 - так что это заняло около 1 часа 15 минут. Вот скриншот начального вывода, который вы увидите:

начало построения терминального выхода Spigot

Процесс сборки использует несколько ядер на вашем Raspberry Pi:

вывод htop процесса сборки Spigot

И вот последний экран, который вы увидите:

Сборка Spigot завершена, файл spigot-1.16.4.jar готов

После завершения сборки вы увидите, куда был сохранен готовый .jar-файл сервера Spigot. В моем случае (поскольку был собран spigot-1.16.4.jar), это:

/home/pi/spigot-build/./spigot-1.16.4.jar

Остальные файлы больше не нужны, нам нужен только последний файл spigot-*.jar

Установите новый сервер minecraft

Я предлагаю установить сервер 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, выделив для него 2 ГБ оперативной памяти:

java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui

Выделение более 2700M для spigot на 32-разрядной ОС Raspberry Pi привело к тому, что сервер не запускается:

[47.195s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 320k, guardsize: 0k, detached.
[07:57:48] [Server thread/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] [Server thread/ERROR]: Этот отчет о сбое был сохранен в: /opt/spigot/./crash-reports/crash-2020-11-23_07.57.48-server.txt
[07:57:48] [Server thread/INFO]: Остановка сервера
[07:57:48] [Server thread/INFO]: Сохранение игроков
[07:57:49] [Server thread/INFO]: Сохранение миров

Как указано ниже (обработка ошибок / недостаточный объем памяти), даже если сервер запускается нормально, он может упасть с ошибкой нехватки памятиесли вы дадите ему слишком много памяти - вот почему мы придерживаемся безопасной системы. максимум 2 ГБ здесь. В 64-битной ОС этот показатель может быть выше, поэтому вы сможете использовать больше оперативной памяти Raspberry Pi 4 / 8 GB.

Ограничения памяти Spigot на 32-битной ОС Raspberry Pi

Теперь Spigot будет генерировать два новых файла (eula.txt & server.properties) и каталог (журналы). При первом запуске вы увидите ошибку, поскольку 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, то увидите следующее:

#Устанавливая нижеуказанный параметр на 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 (и нажмите Enter), а выйти с помощью Ctrl + X

Запуск Spigot из командной строки

Теперь попробуйте выполнить команду для повторного запуска сервера:

java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui

Теперь сервер Spigot Minecraft будет запущен и инициализирован.

Успешный запуск Spigot после принятия вами EULA

В это время загрузка вашего процессора будет близка к 100 % на всех ядрах:

htop показывает загрузку системы во время инициализации Spigot

Во время запуска будет показана некоторая полезная информация (выдержка здесь):

[15:09:05] [Server thread/INFO]: Запуск сервера minecraft версии 1.16.4
[15:09:06] [Server thread/INFO]: Тип игры по умолчанию: SURVIVAL
[15:09:09] [Server thread/INFO]: Запуск сервера Minecraft на *:25565

Последняя приведенная выше строка показывает, что ваш сервер Minecraft связывается со всеми IP-адресами на Raspberry Pi, а также с порт 25565 на этих IP-адресах.

Стартап взял 190.812 s (или около трех минут) на моем стоковом Raspbery Pi 4 / 8GB. По завершении появится подсказка:

подсказка, которую вы можете использовать для взаимодействия с сервером

Взаимодействие с сервером патрубков

Тип

помощь

по этой подсказке (без /), чтобы получить список возможных команд:

показан список возможных команд для взаимодействия с сервером

Например, с помощью команды списокВы можете увидеть, сколько игроков находится в сети:

список показывает, что нет ни одного игрока из максимум 20 игроков онлайн

Использование команды версиявы можете увидеть текущую версию вашего сервера, а также узнать, доступен ли более новый сервер. Обратите внимание, что для обновления сервера вам придется пересобрать файл spigot.jar.

вывод версии. На этом сервере запущен CraftBukkit версии git-Spigot-a19903d-167ff59 (MC: 1.16.4) (Реализация API версии 1.16.4-R0.1-SNAPSHOT). Вы используете последнюю версию

Не успеваем! Сервер перегружен? Задержка предупреждения

Скорее всего, вы увидите следующие результаты

[08:06:11] [Server thread/WARN]: Не успеваю! Сервер перегружен? Задержка 8444 мс или 168 тиков.

[TBD].

Найдите IP-адрес вашего сервера Raspberry Pi Minecraft

Если вы не уверены, какой IP-адрес у вашего Raspberry Pi, вы можете просто найти его, набрав:

ip -4 addr show

В результате появится вывод, аналогичный следующему:

ip -4 addr show вывод на Raspberry Pi

Найдите запись eth0 (в моем случае 2), которая является LAN на Raspberry Pi. IP-адрес - это бит после inet и перед косой чертой. В моем случае 192.168.1.235 :

Важные части, в которых можно найти IP-адрес

Подключитесь к своему серверу Minecraft

Вам (конечно же 🙂 понадобится Minecraft, который вы можете получить на сайте официальный сайт Minecraft. Вам нужна Java-версия Minecraft, как обсуждалось ранее.

Нажмите на Minecraft Java Edition

Если у вас еще нет Minecraft, но вы хотите его купить, вам нужно будет создать учетную запись Mojang. Вместе с покупкой вы получите по электронной почте квитанцию, в которой будут ссылки на скачивание для Windows, macOS, Linux, Arch Linux и Debian (обратите внимание, что это должны быть системы x86, как уже говорилось ранее!)

Для Windows, например, вы получите MinecraftInstaller.msi:

Мастер настройки Minecraft Launcher

При запуске Minecraft перед вами откроется экран входа в систему:

Экран входа в Minecraft

После входа в систему вы увидите обзорный экран с кнопкой воспроизведения.

Когда вы нажмете на Play, Minecraft сначала загрузит последнюю версию, в моем случае 1.16.4.

После завершения загрузки появится главный экран игры:

Главный игровой экран предлагает вам выбор между одиночной игрой, многопользовательской игрой и Minecraft Realms

Нажмите на Мультиплеер. Появится предупреждение о сторонней сетевой игре, нажмите на кнопку перейти здесь (по желанию: вы также можете поставить галочку в поле не показывайте больше этот экран).

Осторожно: Онлайн-игра от третьих лиц

Теперь у вас появится запрос безопасности Windows (если вы играете на Windows):

Подсказка безопасности брандмауэра Windows

Нажмите на Разрешить доступ здесь ("Zugriff zulassen" на немецком языке).

Теперь вы увидите следующий экран:

Play Multiplayer, сканирование игр в локальной сети

Чтобы быстро начать работу, нажмите на Direct Connection и введите здесь IP-адрес вашего сервера (как узнать его, см. выше):

Прямое подключение, с возможностью ввода адреса сервера и присоединения к серверу

Minecraft запомнит IP-адрес для следующей сессии и предложит его вам автоматически

Нажмите кнопку Присоединиться к серверу. Произойдет подключение, и на короткое время появится экран загрузки:

Minecraft подключается к вашему серверу Spigot Minecraft

Наконец, вы увидите меню игры:

Меню игры

Нажмите "Back to Game", чтобы начать играть на новом сервере Minecraft!

Minecraft Multiplayer на собственном сервере Raspberry Pi Minecraft!

Вы можете нажать F3 во время игры, чтобы отобразить оверлей с информацией, где вы можете увидеть, что вы действительно подключены к серверу Spigot, и проверить версию Minecraft:

F3 открывает оверлей с некоторой статистикой и отладочной информацией в Minecraft (в то время как F11 сделает его полноэкранным).
Если вы оставите игру без присмотра на некоторое время в режиме выживания, вы, вероятно, умрете. "buyzero был убит зомби", давая вам возможность переродиться или перейти к титульному экрану.

Выход на ваш сервер Raspberry Pi Minecraft

После того как вы подключились, на вашем сервере Minecraft появится дополнительная информация:

[15:53:32] [User Authenticator #1/INFO]: UUID игрока buyzero - e76a3199-3ed0-4064-8086-d9f565235f71
[15:53:33] [Server thread/INFO]: buyzero[/192.168.1.202:51388] вошел в систему под идентификатором entity id 435 на ([world]25.5, 64.0, 137.5)

Команда список теперь показывает, что один пользователь вошел в систему:

[15:57:05] [Server thread/INFO]: В онлайне находится 1 из максимум 20 игроков: buyzero

Также будут отображаться события, касающиеся ваших игроков:

[16:04:24] [Server thread/INFO]: buyzero был убит Зомби

Использование команды оп buyzero вы можете сделать пользователя buyzero оператором сервера (замените свое имя пользователя соответствующим образом):

оп buyzero
[08:09:18] [Server thread/INFO]: Сделал buyzero оператором сервера

Остановка патрубка сервера Minecraft

Если вы находитесь в окне приглашения вашего сервера Minecraft, введите стоп а затем Enter. Это остановит сервер, сохранит мир и вернет вас к приглашению командной строки:

стоп

[08:36:57] [Server thread/INFO]: Остановка сервера
[08:36:57] [Server thread/INFO]: Остановка сервера
[08:36:57] [Server thread/INFO]: Сохранение игроков
[08:36:57] [Server thread/INFO]: buyzero потерял соединение: Сервер закрыт
[08:36:57] [Server thread/INFO]: buyzero покинул игру
[08:36:57] [Server thread/INFO]: Сохранение миров
[08:36:57] [Server thread/INFO]: Сохранение чанков для уровня 'ServerLevel[world]'/minecraft:overworld
[08:37:02] [Server thread/INFO]: ThreadedAnvilChunkStorage (world): Все чанки сохранены
[08:37:02] [Server thread/INFO]: Сохранение чанков для уровня 'ServerLevel[world_nether]'/minecraft:the_nether
[08:37:05] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): Все чанки сохранены
[08:37:05] [Server thread/INFO]: Сохранение чанков для уровня 'ServerLevel[world_the_end]'/minecraft:the_end
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): Все чанки сохранены
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (world): Все чанки сохранены
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM-1): Все чанки сохранены
[08:37:10] [Server thread/INFO]: ThreadedAnvilChunkStorage (DIM1): Все чанки сохранены

Ваши пользователи увидят следующий экран:

Соединение потеряно / Сервер закрыт / Вернуться к списку серверов

Создание службы systemd

TBD https://github.com/sindastra/systemd-minecraft

Обработка ошибок

недостаточная память

Соединение потеряно, внутреннее исключение: java.io.IOException: Eine vorhandene Verbindung wurde vom Remotehost geschlossen (удаленный хост закрыл существующее соединение)

На скриншоте выше показано сообщение об ошибке, которое увидят игроки, подключающиеся к вашему серверу, а на стороне сервера вы увидите следующий вывод журнала:

Для продолжения работы Java Runtime Environment недостаточно памяти.
Выделение нативной памяти (malloc) не смогло выделить 1438248 байт для Chunk::new
Файл отчета об ошибке с дополнительной информацией сохраняется как:
/opt/spigot/hs_err_pid1531.log

Данные воспроизведения компилятора сохраняются как:
/opt/spigot/replay_pid1531.log

В этом случае необходимо изменить настройки памяти. В соответствии с рекомендация этой статьино это должно быть примерно на 1000-1500 МБ меньше, чем системная память, доступная на вашем Raspberry Pi. Учтите, что для 32-разрядной ОС процесс может использовать только чуть менее 4 ГБ оперативной памяти в целом, поэтому даже с 32-разрядной Raspberry Pi, общее количество, которое вы отдадите вашему серверу Minecraft, должно быть менее 2500 МБ - 2000 МБ, чтобы быть на безопасной стороне (2 ГБ).

Заключение

Следуя этому руководству, вы сможете запускать собственные серверы Raspberry Pi Minecraft и играть вместе с друзьями.

Ссылки / Дополнительная литература

"Minecraft" является торговой маркой компании Mojang Synergies AB
Этот сайт не связан с Minecraft

Комментировать