Как настроить сервер 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 не могут присоединиться к кроссплатформенной игре с ним.
Более того, для этого требуется собственное серверное программное обеспечение, о котором мы вкратце расскажем ниже.
Установка 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 минут. Вот скриншот начального вывода, который вы увидите:

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

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

После завершения сборки вы увидите, куда был сохранен готовый .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 будет запущен и инициализирован.

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

Во время запуска будет показана некоторая полезная информация (выдержка здесь):
[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. По завершении появится подсказка:

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

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

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

Не успевает! Сервер перегружен? Бег за предупреждением
Скорее всего, вы увидите следующие результаты
[08:06:11] [Server thread/WARN]: Не успеваю! Сервер перегружен? Задержка 8444 мс или 168 тиков.
Найдите IP-адрес вашего сервера Raspberry Pi Minecraft
Если вы не уверены, какой IP-адрес у вашего Raspberry Pi, вы можете просто найти его, набрав:
ip -4 addr show
В результате появится вывод, аналогичный следующему:

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

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

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

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

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

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

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

Нажмите на Разрешить доступ здесь ("Zugriff zulassen" на немецком языке).
Теперь вы увидите следующий экран:

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

Minecraft запомнит IP-адрес для следующей сессии и предложит его вам автоматически
Нажмите кнопку Присоединиться к серверу. Произойдет подключение, и на короткое время появится экран загрузки:
ip -4 addr show
Наконец, вы увидите меню игры:

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

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


Выход на ваш сервер 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
https://github.com/sindastra/systemd-minecraft
Обработка ошибок
недостаточная память

На скриншоте выше показано сообщение об ошибке, которое увидят игроки, подключающиеся к вашему серверу, а на стороне сервера вы увидите следующий вывод журнала:
Для продолжения работы 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 (в основном Bukkit / Spigot / Bedrock) (sindastra.de)
- Bitloco.org (сообщество серверов Minecraft Java Edition)
- Руководство по установке патрубков (Spigotmc.org)
[...] вы можете использовать Raspberry Pi в качестве веб-сервера, файлового сервера, сервера печати, медиасервера, сервера Minecraft и IoT [...].