Minecraft servidor em Raspberry Pi
Minecraft é um dos jogos mais populares já criados. Você pode jogá-lo com seus amigos no modo multiplayer. Você sabia que um Raspberry Pi 4 é poderoso o suficiente para rodar um servidor Minecraft? Neste artigo, você aprenderá o básico de quais variações diferentes existem, um pouco da história do Minecraft, e como configurar e operar seu próprio servidor Minecraft no seu Raspberry Pi.
Histórico do servidor do Minecraft
Para falar sobre os servidores da Minecraft, temos que discutir brevemente os dois garfos "grandes" da Minecraft.
Mojang, os criadores da Minecraft, criaram originalmente a Minecraft em Java.
Nota lateral divertida: Embora o Java seja suposto ser realmente portátil ("escreva uma vez e corra em qualquer lugar"), o jogo depende de bibliotecas nativas que são x86. Isto significa que a versão Java do Minecraft não irá rodar em outras plataformas, como o Raspberry Pi. O Raspberry Pi é baseado no ARM (ARMv6 / ARMv7 / ARMv8, dependendo de qual Raspberry Pi você olha).
As explicações de Raspi Berry sobre Java
Esta versão do Minecraft Java roda em máquinas PC, Mac e Linux (x86).
Assim, existe software de servidor compatível com a edição Java (veja abaixo para uma discussão completa das diferentes opções disponíveis).
Uma segunda versão do Minecraft, escrita do zero, foi chamada MCPE (Minecraft Pocket Edition). Apareceu originalmente no Android, e foi escrito em C++. Esta edição foi portada para o Windows 10, iOS, PlayStation 4, XBox e Nintendo Switch. É agora conhecida como Edição Minecraft Bedrock. (Bedrock refere-se ao motor escrito em C++). Esta é agora a versão principal, incluindo o jogo em plataforma cruzada.
Infelizmente a edição Bedrock não é compatível com a edição Java. Isto significa que os jogadores Mac e Linux não podem participar no jogo de plataforma cruzada com ele.
Mais importante ainda, requer o seu próprio software de servidor, que iremos abordar, abaixo, brevemente.
[TBD: infográfico]
[TBD: visão geral dos servidores Minecraft para diferentes edições].
Instalação do Spigot no Raspberry Pi OS 32 bit
Isto irá guiá-lo através da instalação do Spigot. Eu uso um Raspberry Pi 4 de 8 GB para isso, sob o sistema operacional padrão de 32 bits para começar.
Preparar a instalação
Abra um terminal, e execute os seguintes comandos:
sudo apt-get update sudo apt-get install git openjdk-8-jre-headless mkdir /home/pi/spigot-build cd /home/pi/spigot-build
Isto irá actualizar a lista de pacotes, e instalar o git e o OpenJDK 8 (Java Runtime Environment, JRE). Além disso, ele irá criar um novo diretório para a construção do Spigot, e irá mudar para ele.
Depois, baixe o mais atual BuildTools.jar do site SpigotMC. Você pode usar wget para isto:
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
Este é um download rápido com cerca de 4 MB.
Construir espigão
Agora começa a construção:
java -jar BuildTools.jar
Eu comecei a construção em 13:00com o meu Raspberry Pi 4 8GB, e terminou em cerca de 13:15 - por isso demorou cerca de uma hora e 15 minutos. Aqui está uma captura de tela da saída inicial que você vai ver:

O processo de construção usa vários núcleos no seu Raspberry Pi:

E aqui está a tela final que você vai ver:

Assim que a construção estiver concluída, você verá para onde o arquivo .jar do servidor Spigot terminado foi salvo. No meu caso (como ele construiu o spigot-1.16.4.jar), ele é:
/home/pi/spigot-build/./spigot-1.16.4.jar
Os arquivos restantes não são mais necessários, só precisamos do spigot final-*.jar
Instale o seu novo minecraft server
Sugiro instalar o servidor minecraft na hierarquia do diretório /opt. Vamos fazer isso no próximo passo, e renomear o arquivo .jar para apenas 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
O último comando muda o dono deste diretório para o usuário pi, o que facilitará a você começar com os direitos necessários, sem ter que criar um novo usuário. Para um sistema que está em uso por várias pessoas, e para segurança extra / controle sobre os direitos, você pode querer criar seu próprio usuário de sistema para executar spigot under.
dica de segurança
Agora você pode tentar iniciar o seu novo servidor Minecraft, alocando 2 GB de RAM para ele:
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
A alocação de mais de 2700M para spigot em um Raspberry Pi OS de 32bit resultou no servidor não começar para mim:
[47.195s][aviso][os,thread] Falha em iniciar thread - pthread_create failed (EAGAIN) para atributos: stacksize: 320k, guardardsize: 0k, detached.
[07:57:48] [Rosca do servidor/ERROR]: Encontrou uma excepção inesperada
java.lang.OutOfMemoryError: incapaz de criar fio condutor nativo: possivelmente fora da memória ou dos limites de processo/recurso atingidos
at java.lang.Thread.start0(Native Method) ~[?:?]
at java.lang.Thread.start(Thread.java:803) ~[?:?]
em 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] [Rosca do servidor/ERROR]: Este relatório de crash foi guardado: /opt/spigot/./crash-reports/crash-2020-11-23_07.57.48-server.txt
[07:57:48] [Linha do servidor/INFO]: Parar servidor
[07:57:48] [Linha do servidor/INFO]: Salvar jogadores
[07:57:49] [Linha do servidor/INFO]: Salvando mundosComo descrito abaixo (manipulação de erros / memória insuficiente), mesmo que o servidor comece bem, ele pode travar com erros fora da memóriase lhe dermos demasiada memória - é por isso que estamos a ficar com um cofre. máximo de 2 GB aqui. Em um SO de 64 bits que pode ser mais alto, assim você pode usar mais da RAM do Raspberry Pi 4 / 8 GB.
Limites de memória Spigot em 32 bit Raspberry Pi OS
Spigot irá agora gerar dois novos ficheiros (eula.txt & server.properties) e um diretório (troncos). Você verá um erro na primeira corrida, porque o EULA ainda não foi aceito:
A carregar bibliotecas, por favor, espere...
[15:01:09] [main/ERROR]: Falha ao carregar propriedades do arquivo: server.properties
[15:01:09] [main/WARN]: Falha no carregamento do eula.txt
[15:01:09] [main/INFO]: Você precisa concordar com o EULA para poder executar o servidor. Vá para eula.txt para mais informações.
Se você der uma olhada no eula.txt, você verá o seguinte:
#Ao alterar a configuração abaixo para VERDADEIRO você está indicando a sua concordância com o nosso EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Nov 22 15:01:09 CET 2020
eula=falso
Por favor, dirija-se ao site da Mojang e leia o EULA (contrato de licença de utilizador final), antes de o aceitar de facto.
Aqui está como você aceita. Corre
nano /opt/spigot/eula.txt
E edite a última linha para ler
eula=verdadeiro
Salvar com Ctrl + O (e pressione Enter), e Sair com Ctrl + X
Iniciando Spigot a partir da linha de comando
Agora tente executar o comando para iniciar o servidor novamente:
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
O servidor spigot Minecraft irá agora iniciar, e inicializar.

Durante este tempo, a sua carga de CPU estará próxima de 100 % em todos os núcleos:

Durante o início, algumas informações úteis serão mostradas (extraído aqui):
[15:09:05] [Linha do servidor/INFO]: Iniciar minecraft server versão 1.16.4
[15:09:06] [Linha do servidor/INFO]: Tipo de jogo predefinido: SURVIVAL
[15:09:09] [Linha do servidor/INFO]: Iniciando o servidor do Minecraft em *:25565
A última linha citada acima mostra que o seu servidor Minecraft se liga a todos os endereços IP no Raspberry Pi, e a porta 25565 sobre esses endereços IP.
O arranque demorou 190.812 s (ou cerca de três minutos) no meu stock Raspbery Pi 4 / 8GB. Uma vez terminado, você verá um prompt:

Interagindo com o servidor spigot
Tipo
ajuda
a esta hora (sem a /), para obter uma lista de comandos possíveis:

Por exemplo, com o comando listavocê pode ver quantos jogadores estão online:

Usando o comando versãoVocê pode ver a versão atual do seu servidor, e se um servidor mais novo está disponível. Note que você terá que reconstruir o spigot.jar para atualizar o servidor.

Não consigo acompanhar! O servidor está sobrecarregado? A correr atrás de um aviso
É muito provável que você veja resultados tais como
[08:06:11] [Linha do servidor/WARN]: Não consigo acompanhar! O servidor está sobrecarregado? Correndo 8444ms ou 168 ticks atrás
[TBD]
Encontre o endereço IP do seu servidor Raspberry Pi Minecraft
Se você não tem certeza de qual é o endereço IP do seu Raspberry Pi, você pode simplesmente encontrá-lo digitando:
ip -4 addr show
Isto mostrará resultados semelhantes aos seguintes:

Procure a entrada eth0 (2 no meu caso), que é a LAN no Raspberry Pi. O endereço IP é o bit depois do inet, e antes da barra. No meu caso, o 192.168.1.235 :

Conecte-se ao seu servidor Minecraft
Você vai (claro que 🙂 precisa de Minecraft, que você pode obter em o site oficial da Minecraft. Você precisa da versão Java do Minecraft, como discutido anteriormente.
Se você ainda não tem Minecraft, e precisa comprá-lo, você precisará criar uma conta Mojang. Você receberá um e-Mail com a sua compra, que inclui os links para download para Windows, macOS, Linux, Arch Linux e Debian (note que estes têm que ser sistemas x86 como discutido anteriormente!)
Para Windows, por exemplo, você terá o MinecraftInstaller.msi:

Ao lançar o Minecraft, você será presenteado com uma tela de login:

Após o login, você verá uma tela de síntese, com um botão play.

Depois de terminado o download, a tela principal do jogo irá aparecer:

Clique em Multiplayer aqui. Você receberá um aviso sobre o jogo online de terceiros, clique em prosseguir aqui (opcional: você também pode marcar a caixa não mostrar esta tela novamente).

Agora você terá um prompt de segurança do Windows (se você estiver jogando no Windows):

Clique em Permitir o acesso aqui ("Zugriff zulassen" em alemão).
Você verá agora o seguinte ecrã:

Para começar rapidamente, clique em Direct Connection, e digite aqui o endereço IP do seu servidor (veja acima como descobrir o que é):

Minecraft lembrará o endereço IP para a próxima sessão, e sugeri-lo-á automaticamente
Clique em Join Server. Ele se conectará, e mostrará brevemente uma tela de carregamento:

Finalmente, você verá o Menu do Jogo:

Clique em "Voltar ao Jogo" para começar a jogar no seu novo servidor Minecraft!

Você pode pressionar F3 enquanto joga, para mostrar uma sobreposição com informações, onde você pode ver que você está realmente conectado a um servidor Spigot, e verifique a versão Minecraft:


Saída no seu servidor Raspberry Pi Minecraft
Uma vez conectado, há alguma saída adicional no seu servidor Minecraft:
[15:53:32] [Autenticador do Utilizador #1/INFO]: UUID do player buyzero é e76a3199-3ed0-4064-8086-d9f565235f71
[15:53:33] [File do servidor/INFO]: buyzero[/192.168.1.202:51388] logado com a entidade id 435 em ([mundo]25.5, 64.0, 137.5)
O comando lista agora mostra-lhe que um utilizador está ligado:
[15:57:05] [Linha do servidor/INFO]: Há 1 de um máximo de 20 jogadores online: buyzero
Além disso, serão mostrados eventos relativos aos seus jogadores:
[16:04:24] [Fio do servidor/INFO]: buyzero foi assassinado por Zumbi
Usando o comando op buyzero você pode fazer o usuário comprarzero um operador de servidor (substitua seu nome de usuário conforme apropriado):
op buyzero [08:09:18] [Linha do servidor/INFO]: Fez do buyzero um operador de servidor
Parar o servidor do Spigot Minecraft
Se você estiver no prompt do seu servidor Minecraft, digite parar seguido por Enter. Isto irá parar o servidor, salvar o mundo e retorná-lo ao prompt de linha de comando:
parar
[08:36:57] [Linha do servidor/INFO]: Parar o servidor
[08:36:57] [Linha do servidor/INFO]: Parar servidor
[08:36:57] [Linha do servidor/INFO]: Salvar jogadores
[08:36:57] [Rosca do servidor/INFO]: buyzero perdeu a conexão: Servidor fechado
[08:36:57] [Tópico do servidor/INFO]: buyzero deixou o jogo
[08:36:57] [Linha do servidor/INFO]: Salvando mundos
[08:36:57] [Linha do servidor/INFO]: Salvando pedaços para nível 'ServerLevel[world]'/minecraft:overworld
[08:37:02] [Linha do servidor/INFO]: ThreadedAnvilChunkStorage (mundo): Todos os bocados são salvos
[08:37:02] [Linha do servidor/INFO]: Salvando pedaços para o nível 'ServerLevel[world_nether]'/minecraft:the_nether
[08:37:05] [Linha do servidor/INFO]: ThreadedAnvilChunkStorage (DIM-1): Todos os bocados são guardados
[08:37:05] [Linha do servidor/INFO]: Salvando pedaços para o nível 'ServerLevel[world_the_end]'/minecraft:the_end
[08:37:10] [Linha do servidor/INFO]: ThreadedAnvilChunkStorage (DIM1): Todos os bocados são guardados
[08:37:10] [Linha do servidor/INFO]: ThreadedAnvilChunkStorage (mundo): Todos os bocados são salvos
[08:37:10] [Linha do servidor/INFO]: ThreadedAnvilChunkStorage (DIM-1): Todos os bocados são guardados
[08:37:10] [Linha do servidor/INFO]: ThreadedAnvilChunkStorage (DIM1): Todos os bocados são guardados
Seus usuários verão a seguinte tela:

Criação de um serviço de sistema
TBD https://github.com/sindastra/systemd-minecraft
Tratamento de erros
memória insuficiente

A captura de tela acima mostra a mensagem de erro que os jogadores conectados ao seu servidor verão, enquanto no lado do servidor, você verá a seguinte saída de log:
Não há memória suficiente para que o Java Runtime Environment continue.
A alocação de memória nativa (malloc) não alocou 1438248 bytes para Chunk::new
Um arquivo de relatório de erro com mais informações é salvo como:
/opt/spigot/hs_err_pid1531.log
Os dados de reprodução do compilador são guardados como:
/opt/spigot/replay_pid1531.log
Neste caso, você precisa ajustar suas configurações de memória. Como por recomendação deste artigoO Raspberry Pi deve ser cerca de 1000 MB a 1500 MB mais baixo do que a memória do sistema disponível no seu Raspberry Pi. Considere, que para um SO de 32bit o processo só pode endereçar um pouco menos de 4 GB de RAM no total, então mesmo com um Raspberry Pi de 32 bits, o total que você dá ao seu servidor Minecraft deve ser inferior a 2500 MB - 2000 MB para estar no lado seguro (2GB).
Conclusão
Seguindo este guia, você poderá rodar seus próprios servidores Raspberry Pi Minecraft e jogar junto com seus amigos.
Referências / Leitura adicional
- Um pouco de história dos Servidores Minecraft (principalmente Bukkit / Spigot / Bedrock) (sindastra.de)
- Bitloco.org (comunidade de servidores Minecraft Java Edition)
- Guia de instalação do Spigot (Spigotmc.org)