Jak skonfigurować 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.
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:
Proces kompilacji wykorzystuje wiele rdzeni w Twoim Raspberry Pi:
A oto ostatni ekran, który zobaczysz:
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 worldsJak 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.
W tym czasie obciążenie procesora będzie wynosić około 100 % na wszystkich rdzeniach:
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:
Interakcja z serwerem Spigot
Typ
help
przy tym znaku zachęty (bez /), aby uzyskać listę możliwych poleceń:
Na przykład, za pomocą polecenia wykazMożesz zobaczyć, ilu graczy jest 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.
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:
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 :
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.
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:
Po uruchomieniu Minecrafta, zostaniesz przedstawiony z ekranem logowania:
Po zalogowaniu się, zobaczysz ekran przeglądowy z przyciskiem odtwarzania.
Po zakończeniu pobierania, pojawi się główny ekran gry:
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).
Teraz pojawi się monit o zabezpieczenie systemu Windows (jeśli grasz w systemie Windows):
Kliknij na Zezwól na dostęp tutaj ("Zugriff zulassen" w języku niemieckim).
Wyświetli się następujący ekran:
Aby szybko rozpocząć, kliknij na Direct Connection, a następnie wprowadź adres IP swojego serwera (patrz wyżej, jak dowiedzieć się, co to jest):
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:
Kliknij "Powrót do gry", aby rozpocząć grę na nowym serwerze Minecraft!
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:
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:
Tworzenie usługi systemd
https://github.com/sindastra/systemd-minecraft
Obsługa błędów
niewystarczająca pamięć
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
- Trochę historii serwerów Minecraft (głównie Bukkit / Spigot / Bedrock) (sindastra.de)
- Bitloco.org (społeczność serwerów Minecraft Java Edition)
- Instrukcja montażu króćca (Spigotmc.org)
[...] można używać Raspberry Pi jako serwera WWW, serwera plików, serwera druku, serwera multimediów, serwera Minecraft i IoT [...].