Jak skonfigurować serwer Minecraft na Raspberry Pi

Tytułowy serwer Minecraft na Raspberry Pi

Minecraft jest jedną z najbardziej popularnych gier, jakie kiedykolwiek powstały. Możesz w nią grać z przyjaciółmi w trybie gry wieloosobowej. Czy wiesz, że Raspberry Pi 4 jest wystarczająco potężne, aby uruchomić serwer Minecraft? W tym artykule dowiesz się, jakie są podstawy różnych odmian, trochę historii Minecrafta i jak skonfigurować i obsługiwać własny serwer Minecrafta na twoim Raspberry Pi.

Historia serwerów Minecraft

Aby mówić o serwerach Minecrafta, musimy krótko omówić dwa "duże" forki Minecrafta.

Mojang, twórcy Minecrafta, pierwotnie stworzyli Minecrafta w Java.

Zabawna uwaga: Chociaż Java ma być naprawdę przenośna ("napisz raz i uruchom gdziekolwiek"), gra zależy od natywnych bibliotek, które są x86. Oznacza to, że Minecraft w wersji Java nie będzie działał na innych platformach, takich jak Raspberry Pi. Raspberry Pi jest oparte na ARM (ARMv6 / ARMv7 / ARMv8, w zależności od tego, na które Raspberry Pi patrzysz).

Objaśnienia do Javy Raspi Berry

Ta wersja Java Minecrafta działa na komputerach PC, Mac i Linux (x86).

W związku z tym istnieje oprogramowanie serwerowe kompatybilne z edycją Java (pełne omówienie różnych dostępnych opcji znajduje się poniżej).

Druga wersja Minecrafta, napisana od podstaw, nosiła nazwę MCPE (Minecraft Pocket Edition). Pierwotnie pojawiła się ona na Androida, i została napisana w C++. Edycja ta została przeportowana na Windows 10, iOS, PlayStation 4, XBox i Nintendo Switch. Obecnie znana jest pod nazwą Minecraft Bedrock edition. (Bedrock odnosi się do silnika napisanego w C++). Jest to obecnie główna wersja, zawierająca grę międzyplatformową.

Niestety edycja Bedrock nie jest kompatybilna z edycją Java. Oznacza to, że gracze Mac i Linux nie mogą dołączyć do międzyplatformowej rozgrywki z jej użyciem.

Co ważniejsze, wymaga on własnego oprogramowania serwerowego, które omówimy poniżej, w skrócie.

Xbox ma wideo wyjaśniające Bedrock vs Java.

Instalacja Spigota na Raspberry Pi OS 32 bit

To poprowadzi Cię przez instalację Spigota. Używam do tego Raspberry Pi 4 o pojemności 8 GB, pod domyślnym 32-bitowym systemem operacyjnym na początek.

Przygotować instalację

Otwórz terminal i wykonaj następujące polecenia:

sudo apt-get update
sudo apt-get install git openjdk-8-jre-headless
mkdir /home/pi/spigot-build
cd /home/pi/spigot-build

Spowoduje to uaktualnienie listy pakietów i zainstalowanie git oraz OpenJDK 8 (Java Runtime Environment, JRE). Ponadto, utworzy nowy katalog do budowania Spigota, i zmieni się w nim.

Następnie należy pobrać najbardziej aktualną wersję BuildTools.jar z witryny SpigotMC. Można użyć wget na to:

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

Jest to szybki plik do pobrania o rozmiarze około 4 MB.

Budowa króćca

Teraz rozpocznij budowę:

java -jar BuildTools.jar

Rozpocząłem budowę pod adresem 13:00używając mojego Raspberry Pi 4 8GB, i skończyło się na ok. 13:15 - więc zajęło to około 1 godziny i 15 minut. Oto zrzut ekranu początkowego wyjścia, które zobaczysz:

Rozpoczęcie tworzenia wyjścia terminala Spigot

Proces kompilacji wykorzystuje wiele rdzeni w Twoim Raspberry Pi:

wyjście htop z procesu budowania Spigot

A oto ostatni ekran, który zobaczysz:

Budowa spigota zakończona, spigot-1.16.4.jar jest gotowy

Po zakończeniu kompilacji zobaczysz, gdzie został zapisany plik .jar gotowego serwera Spigot. W moim przypadku (ponieważ zbudował spigot-1.16.4.jar), jest to:

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

Pozostałe pliki nie są już potrzebne, wystarczy nam końcowy spigot-*.jar

Zainstaluj nowy serwer Minecraft

Proponuję zainstalować serwer Minecraft w hierarchii katalogów /opt. Zróbmy to w następnym kroku i zmieńmy nazwę pliku .jar na po prostu 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

Ostatnie polecenie zmienia właściciela tego katalogu na użytkownika pi, co ułatwi Ci rozpoczęcie pracy z odpowiednimi prawami, bez konieczności tworzenia nowego użytkownika. Dla systemu, który jest używany przez wiele osób, i dla dodatkowego bezpieczeństwa / kontroli nad prawami, możesz chcieć stworzyć własnego użytkownika systemowego, pod którym będziesz uruchamiał spigota.

wskazówka dotycząca bezpieczeństwa

Teraz możesz spróbować uruchomić swój nowy serwer Minecraft, przydzielając mu 2 GB RAM:

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

Przydzielenie więcej niż 2700M do spigota na 32bit Raspberry Pi OS spowodowało, że serwer nie wystartował dla mnie:

[47.195s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 320k, guardsize: 0k, detached.
[07:57:48] [Serwer wątek/ERROR]: Encountered an unexpected exception
java.lang.OutOfMemoryError: nie można utworzyć wątku natywnego: prawdopodobnie brak pamięci lub osiągnięto limity procesów/ zasobów
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] [Wątek serwera/ERROR]: Ten crash report został zapisany do: /opt/spigot/./crash-reports/crash-2020-11-23_07.57.48-server.txt
[07:57:48] [Serwer wątek/INFO]: Zatrzymanie serwera
[07:57:48] [Serwer Wątek/INFO]: Zapisywanie graczy
[07:57:49] [Serwer Wątek/INFO]: Saving worlds

Jak opisano poniżej (obsługa błędów / niewystarczająca ilość pamięci), nawet jeśli serwer uruchomi się OK, może się zawiesić z błędami braku pamięcijeśli dasz mu za dużo pamięci - dlatego trzymamy się bezpiecznego maksymalnie 2 GB tutaj. Na 64 bit OS, że może być wyższa, więc można użyć więcej z Raspberry Pi 4 / 8 GB w pamięci RAM.

Limity pamięci Spigot na 32-bitowym Raspberry Pi OS

Spigot wygeneruje teraz dwa nowe pliki (eula.txt & serwer.properties) oraz katalog (dzienniki). Przy pierwszym uruchomieniu pojawi się błąd, ponieważ EULA nie została jeszcze zaakceptowana:

Ładowanie bibliotek, proszę czekać...
[15:01:09] [main/ERROR]: Failed to load properties from file: server.properties
[15:01:09] [main/WARN]: Failed to load eula.txt
[15:01:09] [main/INFO]: Musisz wyrazić zgodę na EULA, aby uruchomić serwer. Przejdź do eula.txt po więcej informacji.

Jeśli zajrzysz do eula.txt, zobaczysz następujące informacje:

#B Zmieniając poniższe ustawienie na TRUE, wyrażasz zgodę na naszą umowę EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Nov 22 15:01:09 CET 2020
eula=false

Proszę udać się na stronę Mojang i przeczytaj EULA (umowa licencyjna użytkownika końcowego), przed jej faktycznym zaakceptowaniem.

Oto jak to zaakceptować. Uruchom .

nano /opt/spigot/eula.txt

I edytuj ostatnią linię, aby otrzymać brzmienie

eula=true

Zapisz za pomocą kombinacji klawiszy Ctrl + O (i naciśnij Enter), a następnie wyjdź za pomocą kombinacji klawiszy Ctrl + X.

Uruchamianie Spigota z wiersza poleceń

Teraz spróbuj uruchomić polecenie, aby ponownie uruchomić serwer:

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

Serwer Spigot Minecraft zostanie teraz uruchomiony i zainicjowany.

Pomyślne uruchomienie Spigota po zaakceptowaniu EULA

W tym czasie obciążenie procesora będzie wynosić około 100 % na wszystkich rdzeniach:

htop pokazujący obciążenie systemu podczas inicjalizacji Spigota

Podczas startu zostanie wyświetlonych kilka przydatnych informacji (fragment tutaj):

[15:09:05] [Serwer wątek/INFO]: Uruchomienie serwera minecraft w wersji 1.16.4
[15:09:06] [Wątek serwera/INFO]: Domyślny typ gry: SURVIVAL
[15:09:09] [Serwer wątek/INFO]: Uruchomienie serwera Minecraft na *:25565

Ostatnia cytowana linia pokazuje, że twój serwer Minecraft łączy się z wszystkimi adresami IP na Raspberry Pi, oraz z port 25565 na tych adresach IP.

Startup podjął 190.812 s (lub około trzech minut) na moim stockowym Raspbery Pi 4 / 8GB. Gdy to się skończy, zobaczysz monit:

Monit, którego można użyć do interakcji z serwerem

Interakcja z serwerem Spigot

Typ

help

przy tym znaku zachęty (bez /), aby uzyskać listę możliwych poleceń:

wyświetlana jest lista możliwych komend do interakcji z serwerem

Na przykład, za pomocą polecenia wykazMożesz zobaczyć, ilu graczy jest online:

lista pokazuje, że nie ma graczy z max 20 graczy online

Użycie polecenia wersjamożesz zobaczyć aktualną wersję swojego serwera oraz czy dostępna jest nowsza wersja serwera. Zauważ, że będziesz musiał przebudować spigot.jar, aby zaktualizować serwer.

Wynik wersji. Na tym serwerze działa CraftBukkit w wersji git-Spigot-a19903d-167ff59 (MC: 1.16.4) (implementacja API w wersji 1.16.4-R0.1-SNAPSHOT). Korzystasz z najnowszej wersji

Nie mogę nadążyć! Czy serwer jest przeciążony? Ostrzeżenie "Running behind

Najprawdopodobniej zobaczysz dane wyjściowe takie jak

[08:06:11] [Wątek serwera/WARN]: Nie można nadążyć! Czy serwer jest przeciążony? Działa 8444ms lub 168 ticków do tyłu

Znajdź adres IP serwera Minecraft na Raspberry Pi

Jeśli nie jesteś pewien, jaki jest adres IP Twojego Raspberry Pi, możesz go znaleźć, wpisując:

ip -4 addr show

Spowoduje to wyświetlenie danych wyjściowych podobnych do poniższych:

Adres ip -4 pokazuje dane wyjściowe na Raspberry Pi

Poszukaj wpisu eth0 (2 w moim przypadku), który jest LAN na Raspberry Pi. Adres IP to bit po inet, a przed ukośnikiem. W moim przypadku 192.168.1.235 :

Ważne części, w których można znaleźć adres IP

Połącz się z serwerem Minecraft

Będziesz (oczywiście 🙂 potrzebował Minecrafta, którego możesz dostać od oficjalna strona Minecrafta. Potrzebujesz wersji Java Minecrafta, jak omówiono wcześniej.

Kliknij na Minecraft Java Edition

Jeśli nie masz jeszcze Minecrafta, a chcesz go kupić, musisz założyć konto Mojang. Otrzymasz e-Mail z potwierdzeniem zakupu, który zawiera linki do pobrania dla Windows, macOS, Linux, Arch Linux i Debian (uwaga, muszą to być systemy x86, jak omówiono wcześniej!).

Dla Windows, na przykład, otrzymasz MinecraftInstaller.msi:

Kreator konfiguracji Minecraft Launcher

Po uruchomieniu Minecrafta, zostaniesz przedstawiony z ekranem logowania:

Ekran logowania do Minecrafta

Po zalogowaniu się, zobaczysz ekran przeglądowy z przyciskiem odtwarzania.

Kiedy klikniesz na Play, Minecraft najpierw pobierze najnowsze wydanie, w moim przypadku 1.16.4.

Po zakończeniu pobierania, pojawi się główny ekran gry:

Główny ekran gry oferujący wybór pomiędzy trybem dla jednego gracza, trybem wieloosobowym i królestwami Minecrafta

Kliknij tutaj na Multiplayer. Pojawi się ostrzeżenie o grze online osób trzecich, kliknij na przejdź tutaj (opcjonalnie: można również zaznaczyć pole nie pokazuj tego ekranu ponownie).

Ostrzeżenie: Gra online osób trzecich

Teraz pojawi się monit o zabezpieczenie systemu Windows (jeśli grasz w systemie Windows):

Monit zabezpieczeń zapory systemu Windows

Kliknij na Zezwól na dostęp tutaj ("Zugriff zulassen" w języku niemieckim).

Wyświetli się następujący ekran:

Graj w trybie wieloosobowym, skanując w poszukiwaniu gier w sieci lokalnej

Aby szybko rozpocząć, kliknij na Direct Connection, a następnie wprowadź adres IP swojego serwera (patrz wyżej, jak dowiedzieć się, co to jest):

Połączenie bezpośrednie, z możliwością wprowadzenia adresu serwera i dołączenia do serwera

Minecraft zapamięta adres IP dla następnej sesji i zasugeruje Ci go automatycznie.

Kliknij na Dołącz do Serwera. Połączy się on i na krótko pokaże ekran ładowania:

ip -4 addr show

W końcu zobaczysz menu gry:

Menu gry

Kliknij "Powrót do gry", aby rozpocząć grę na nowym serwerze Minecraft!

Minecraft Multiplayer na własnym serwerze Minecraft Raspberry Pi!

Możesz nacisnąć F3 podczas gry, aby wyświetlić nakładkę z informacjami, gdzie możesz zobaczyć, że jesteś rzeczywiście podłączony do serwera Spigot, i sprawdzić wersję Minecraft:

F3 otwiera nakładkę z niektórymi statystykami i informacjami o debugowaniu w Minecraft (podczas gdy F11 sprawi, że będzie ona pełnoekranowa).
Jeśli pozostawisz swoją grę bez opieki na jakiś czas w trybie przetrwania, prawdopodobnie umrzesz. "Buyzero został zabity przez Zombie", dając Ci możliwość Respawnu lub przejścia do ekranu tytułu.

Wyjście na twój serwer Minecraft na Raspberry Pi

Po połączeniu się, jest kilka dodatkowych danych wyjściowych na twoim serwerze Minecraft:

[15:53:32] [User Authenticator #1/INFO]: UUID gracza buyzero to e76a3199-3ed0-4064-8086-d9f565235f71
[15:53:33] [Serwer Wątek/INFO]: buyzero[/192.168.1.202:51388] zalogował się z identyfikatorem podmiotu 435 w ([world]25.5, 64.0, 137.5)

Polecenie wykaz teraz pokazuje, że jeden użytkownik jest zalogowany:

[15:57:05] [Wątek serwera/INFO]: W sieci jest 1 z max 20 graczy: buyzero

Będą również wyświetlane wydarzenia dotyczące Twoich zawodników:

[16:04:24] [Serwer Wątek/INFO]: buyzero został zabity przez Zombie

Użycie polecenia op buyyzero możesz uczynić użytkownika buyzero operatorem serwera (zastąpić swoją nazwę użytkownika odpowiednio):

op buyyzero
[08:09:18] [Wątek serwera/INFO]: Uczynił buyzero operatorem serwera

Zatrzymanie serwera Minecraft spigot

Jeśli jesteś przy monitorze serwera Minecraft, wpisz stop a następnie Enter. Spowoduje to zatrzymanie serwera, zapisanie świata i powrót do wiersza poleceń:

stop

[08:36:57] [Serwer wątek/INFO]: Zatrzymanie serwera
[08:36:57] [Serwer wątek/INFO]: Zatrzymanie serwera
[08:36:57] [Serwer Wątek/INFO]: Zapisywanie graczy
[08:36:57] [Serwer Wątek/INFO]: buyzero stracił połączenie: Serwer zamknięty
[08:36:57] [Serwer Wątek/INFO]: buyzero opuścił grę
[08:36:57] [Serwer Wątek/INFO]: Zapisywanie światów
[08:36:57] [Serwer wątek/INFO]: Zapisywanie chunksów dla poziomu 'ServerLevel[world]'/minecraft:overworld
[08:37:02] [Serwer wątek/INFO]: ThreadedAnvilChunkStorage (world): Wszystkie chunks są zapisane
[08:37:02] [Serwer wątek/INFO]: Zapisywanie chunksów dla poziomu 'ServerLevel[world_nether]'/minecraft:the_nether
[08:37:05] [Serwer wątek/INFO]: ThreadedAnvilChunkStorage (DIM-1): Wszystkie kawałki są zapisane
[08:37:05] [Serwer wątek/INFO]: Zapisywanie chunksów dla poziomu 'ServerLevel[world_the_end]'/minecraft:the_end
[08:37:10] [Serwer wątek/INFO]: ThreadedAnvilChunkStorage (DIM1): Wszystkie chunks są zapisane
[08:37:10] [Serwer wątek/INFO]: ThreadedAnvilChunkStorage (world): Wszystkie chunks są zapisane
[08:37:10] [Serwer wątek/INFO]: ThreadedAnvilChunkStorage (DIM-1): Wszystkie kawałki są zapisane
[08:37:10] [Serwer wątek/INFO]: ThreadedAnvilChunkStorage (DIM1): Wszystkie chunks są zapisane

Twoi użytkownicy zobaczą następujący ekran:

Połączenie utracone / Serwer zamknięty / Powrót do listy serwerów

Tworzenie usługi systemd

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

Obsługa błędów

niewystarczająca pamięć

Connection Lost, Internal Exception: java.io.IOException: Eine vorhandene Verbindung wurde vom Remotehost geschlossen (zdalny host zamknął istniejące połączenie)

Powyższy zrzut ekranu pokazuje komunikat o błędzie, który zobaczą gracze łączący się z Twoim serwerem, podczas gdy po stronie serwera zobaczysz następujące wyjście logu:

Nie ma wystarczającej ilości pamięci, aby kontynuować pracę środowiska Java Runtime Environment.
Natywna alokacja pamięci (malloc) nie zdołała przydzielić 1438248 bajtów dla Chunk::new
Plik raportu o błędach zawierający więcej informacji jest zapisany jako:
/opt/spigot/hs_err_pid1531.log

Dane powtórek kompilatora są zapisywane jako:
/opt/spigot/replay_pid1531.log

W takim przypadku musisz zmienić ustawienia pamięci. Zgodnie z zalecenie zawarte w tym artykulePowinien on być około 1000 MB do 1500 MB mniejszy niż pamięć systemowa dostępna na Twoim Raspberry Pi. Weź pod uwagę, że dla 32bit OS proces może zaadresować tylko trochę mniej niż 4 GB pamięci RAM w sumie, więc nawet z 32bit Raspberry Pi, suma, którą dajesz do serwera Minecraft powinna być mniejsza niż 2500 MB - 2000 MB, aby być po bezpiecznej stronie (2GB).

Wniosek

Podążając za tym przewodnikiem, będziesz w stanie uruchomić własne serwery Minecraft Raspberry Pi i grać razem z przyjaciółmi.

Referencje / Dalsza lektura

"Minecraft" jest znakiem towarowym firmy Mojang Synergies AB.
Ta strona nie jest powiązana z grą Minecraft.

Komentarzy: 1

  1. [...] można używać Raspberry Pi jako serwera WWW, serwera plików, serwera druku, serwera multimediów, serwera Minecraft i IoT [...].

Pozostaw komentarz