Cómo configurar un servidor Minecraft en una Raspberry Pi
Minecraft es uno de los juegos más populares jamás creados. Puedes jugarlo con tus amigos en modo de juego multijugador. ¿Sabías que una Raspberry Pi 4 es lo suficientemente potente como para ejecutar un servidor de Minecraft? En este artículo, aprenderás los fundamentos de las diferentes variaciones que existen, un poco de la historia de Minecraft, y cómo configurar y operar tu propio servidor de Minecraft en tu Raspberry Pi.
Historia de los servidores de Minecraft
Para hablar de los servidores de Minecraft, tenemos que hablar brevemente de las dos "grandes" bifurcaciones de Minecraft.
Mojang, los creadores de Minecraft, crearon originalmente Minecraft en Java.
Nota divertida: Aunque se supone que Java es realmente portátil ("escribe una vez y ejecuta en cualquier lugar"), el juego depende de bibliotecas nativas que son x86. Esto significa que la versión Java de Minecraft no se ejecutará en otras plataformas, como la Raspberry Pi. La Raspberry Pi está basada en ARM (ARMv6 / ARMv7 / ARMv8, dependiendo de la Raspberry Pi que mires).
Explicaciones de Raspi Berry sobre Java
Esta versión de Java Minecraft funciona en máquinas PC, Mac y Linux (x86).
En consecuencia, hay software de servidor compatible con la edición Java (véase más adelante un análisis completo de las diferentes opciones disponibles).
Una segunda versión de Minecraft, escrita desde cero, se llamó MCPE (Minecraft Pocket Edition). Apareció originalmente en Android, y fue escrita en C++. Esta edición fue portada a Windows 10, iOS, PlayStation 4, XBox y Nintendo Switch. Ahora se conoce como Edición de Minecraft Bedrock. (Bedrock se refiere al motor escrito en C++). Esta es ahora la versión principal, que incluye el juego multiplataforma.
Por desgracia, la edición de Bedrock no es compatible con la edición de Java. Esto significa que los jugadores de Mac y Linux no pueden unirse al juego multiplataforma con él.
Y lo que es más importante, requiere su propio software de servidor, del que hablaremos brevemente a continuación.
Instalación de Spigot en Raspberry Pi OS 32 bit
Esto le guiará a través de la instalación de Spigot. Yo uso una Raspberry Pi 4 de 8 GB para esto, bajo el sistema operativo de 32 bits por defecto para empezar.
Preparar la instalación
Abra un terminal y ejecute los siguientes comandos:
sudo apt-get update
sudo apt-get install git openjdk-8-jre-headless
mkdir /home/pi/spigot-build
cd /home/pi/spigot-build
Esto actualizará la lista de paquetes, e instalará git y OpenJDK 8 (Java Runtime Environment, JRE). Además, creará un nuevo directorio para construir Spigot, y cambiará en él.
A continuación, descargue la versión más actualizada BuildTools.jar del sitio web de SpigotMC. Puede utilizar wget por esto:
wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
Se trata de una descarga rápida de unos 4 MB.
Construir espiga
Ahora empieza la construcción:
java -jar BuildTools.jar
He comenzado la construcción en 13:00usando mi Raspberry Pi 4 de 8GB, y terminó en aproximadamente 13:15 - por lo que tardó aproximadamente una hora y 15 minutos. Aquí hay una captura de pantalla de la salida inicial que verá:
El proceso de construcción utiliza múltiples núcleos en su Raspberry Pi:
Y aquí está la pantalla final que verás:
Una vez terminada la construcción, verás dónde se ha guardado el archivo .jar del servidor Spigot terminado. En mi caso (ya que ha construido spigot-1.16.4.jar), es:
/home/pi/spigot-build/./spigot-1.16.4.jar
El resto de los archivos ya no son necesarios, sólo necesitamos el spigot-*.jar final
Instala tu nuevo servidor Minecraft
Sugiero instalar el servidor Minecraft en la jerarquía de directorios /opt. Vamos a hacer eso en el siguiente paso, y cambiar el nombre del archivo .jar a sólo espiga.jar:
sudo mkdir /opt/spigot
sudo mv /home/pi/spigot-build/spigot-*.jar /opt/spigot/spigot.jar
sudo chown -R pi:pi /opt/spigot
El último comando cambia el propietario de este directorio al usuario pi, lo que le facilitará comenzar con los derechos necesarios, sin tener que crear un nuevo usuario. Para un sistema que está en uso por varias personas, y para mayor seguridad / control sobre los derechos, es posible que desee crear su propio usuario del sistema para ejecutar spigot.
consejo de seguridad
Ahora puedes intentar iniciar tu nuevo servidor de Minecraft, asignándole 2 GB de RAM:
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
Asignar más de 2700M a spigot en un SO Raspberry Pi de 32 bits ha hecho que el servidor no se inicie para mí:
[47.195s][warning][os,thread] Failed to start thread - pthread_create failed (EAGAIN) for attributes: stacksize: 320k, guardsize: 0k, detached.
[07:57:48] [Hilo del servidor/ERROR]: Se ha encontrado una excepción inesperada
java.lang.OutOfMemoryError: no se puede crear un hilo nativo: posiblemente se ha agotado la memoria o se han alcanzado los límites de proceso/recursos
at java.lang.Thread.start0(Método Nativo) ~[?:?]
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] [Hilo del servidor/ERROR]: Este informe de accidente se ha guardado en: /opt/spigot/./crash-reports/crash-2020-11-23_07.57.48-server.txt
[07:57:48] [Hilo del servidor/INFO]: Parando el servidor
[07:57:48] [Hilo del servidor/INFO]: Guardando jugadores
[07:57:49] [Hilo del servidor/INFO]: Guardando mundosComo se indica a continuación (gestión de errores / memoria insuficiente), aunque el servidor se inicie correctamente, puede bloquearse con errores de falta de memoriasi le das demasiada memoria - por eso nos quedamos con un seguro máximo de 2 GB aquí. En un sistema operativo de 64 bits que puede ser mayor, por lo que puede utilizar más de la memoria RAM de la Raspberry Pi 4 / 8 GB.
Límites de memoria en el sistema operativo Raspberry Pi de 32 bits
Spigot generará ahora dos nuevos archivos (eula.txt & servidor.propiedades) y un directorio (Registros). Verá un error en la primera ejecución, porque el EULA no ha sido aceptado todavía:
Cargando bibliotecas, por favor espere...
[15:01:09] [main/ERROR]: Fallo al cargar las propiedades del archivo: server.properties
[15:01:09] [main/WARN]: Fallo al cargar eula.txt
[15:01:09] [main/INFO]: Necesitas estar de acuerdo con el EULA para poder ejecutar el servidor. Vaya a eula.txt para más información.
Si echas un vistazo a eula.txt, verás lo siguiente:
#Cambiando la configuración de abajo a TRUE está indicando su acuerdo con nuestro EULA (https://account.mojang.com/documents/minecraft_eula).
#Sun Nov 22 15:01:09 CET 2020
eula=false
Dirígete al sitio web de Mojang y leer el EULA (acuerdo de licencia de usuario final), antes de aceptarlo realmente.
Así es como se acepta. Ejecutar
nano /opt/spigot/eula.txt
Y edita la última línea para que diga
eula=true
Guardar con Ctrl + O (y pulsar Enter), y salir con Ctrl + X
Iniciar Spigot desde la línea de comandos
Ahora intente ejecutar el comando para iniciar el servidor de nuevo:
java -Xms2G -Xmx2G -XX:+UseG1GC -jar spigot.jar nogui
El servidor Spigot Minecraft se iniciará e inicializará.
Durante este tiempo, la carga de su CPU estará cerca de 100 % en todos los núcleos:
Durante el inicio, se mostrarán algunas informaciones útiles (extraídas aquí):
[15:09:05] [Hilo del servidor/INFO]: Iniciando el servidor minecraft versión 1.16.4
[15:09:06] [Hilo del servidor/INFO]: Tipo de juego por defecto: SURVIVAL
[15:09:09] [Hilo del servidor/INFO]: Iniciando servidor Minecraft en *:25565
La última línea citada anteriormente muestra que su servidor de Minecraft se vincula a todas las direcciones IP de la Raspberry Pi, y a puerto 25565 en esas direcciones IP.
La empresa tomó 190.812 s (o unos tres minutos) en mi Raspbery Pi 4 / 8GB de serie. Una vez que haya terminado, verá un aviso:
Interacción con el servidor Spigot
Tipo
help
en esta indicación (sin la /), para obtener una lista de posibles comandos:
Por ejemplo, con el comando listaPuedes ver cuántos jugadores están conectados:
Utilizando el comando versiónpuede ver la versión actual de su servidor, y si hay un servidor más nuevo disponible. Tenga en cuenta que tendrá que reconstruir el spigot.jar para actualizar el servidor.
No doy abasto ¿Está sobrecargado el servidor? La advertencia de correr detrás
Lo más probable es que vea resultados como
[08:06:11] [Hilo del servidor/WARN]: ¡No puedo seguir el ritmo! ¿Está el servidor sobrecargado? Se está ejecutando con 8444ms o 168 ticks de retraso
Encuentra la dirección IP de tu servidor Raspberry Pi Minecraft
Si no estás seguro de cuál es la dirección IP de tu Raspberry Pi, puedes encontrarla simplemente escribiendo:
ip -4 addr show
Esto mostrará una salida similar a la siguiente:
Busca la entrada eth0 (2 en mi caso), que es la LAN de la Raspberry Pi. La dirección IP es el bit después de inet, y antes de la barra. En mi caso 192.168.1.235 :
Conéctate a tu servidor de Minecraft
Necesitarás (por supuesto 🙂 Minecraft, que puedes conseguir en el sitio web oficial de Minecraft. Necesitas la versión Java de Minecraft, como ya se ha comentado.
Si todavía no tienes Minecraft y necesitas comprarlo, tendrás que crear una cuenta de Mojang. Recibirás un correo electrónico de recibo con tu compra, que incluye los enlaces de descarga para Windows, macOS, Linux, Arch Linux y Debian (¡ten en cuenta que tienen que ser sistemas x86 como se ha comentado antes!)
Para Windows, por ejemplo, obtendrás MinecraftInstaller.msi:
Al iniciar Minecraft, aparecerá una pantalla de inicio de sesión:
Después de iniciar la sesión, verás una pantalla de resumen, con un botón de reproducción.
Una vez terminada la descarga, aparecerá la pantalla principal del juego:
Haz clic en Multiplayer aquí. Aparecerá una advertencia sobre el juego en línea de terceros, haga clic en Proceder aquí (opcional: también puede marcar la casilla no volver a mostrar esta pantalla).
Ahora obtendrás un aviso de seguridad de Windows (si estás jugando en Windows):
Haga clic en Permitir acceso aquí ("Zugriff zulassen" en alemán).
Ahora verá la siguiente pantalla:
Para empezar rápidamente, haga clic en Conexión Directa, e introduzca aquí la dirección IP de su servidor (vea más arriba cómo averiguar cuál es):
Minecraft recordará la dirección IP para la siguiente sesión, y te la sugerirá automáticamente
Haz clic en "Join Server". Se conectará y mostrará brevemente una pantalla de carga:
ip -4 addr show
Por último, verás el Menú del Juego:
Haz clic en "Volver al juego" para empezar a jugar en tu nuevo servidor de Minecraft.
Puedes pulsar F3 mientras juegas, para que aparezca una superposición con información, donde puedes ver que efectivamente estás conectado a un servidor Spigot, y comprobar la versión de Minecraft:
Salida en su servidor Raspberry Pi Minecraft
Una vez que te hayas conectado, hay algunos resultados adicionales en tu servidor de Minecraft:
[15:53:32] [Autentificador de usuario #1/INFO]: UUID del jugador buyzero es e76a3199-3ed0-4064-8086-d9f565235f71
[15:53:33] [Hilo del servidor/INFO]: buyzero[/192.168.1.202:51388] ha iniciado sesión con el id de entidad 435 en ([mundo]25.5, 64.0, 137.5)
El comando lista ahora muestra que un usuario está conectado:
[15:57:05] [Hilo del servidor/INFO]: Hay 1 de un máximo de 20 jugadores en línea: buyzero
Además, se mostrarán los eventos relacionados con tus jugadores:
[16:04:24] [Hilo del servidor/INFO]: buyzero fue asesinado por Zombie
Utilizando el comando op buyzero puede hacer que el usuario buyzero sea un operador del servidor (sustituya su nombre de usuario según corresponda):
op buyzero [08:09:18] [Hilo del servidor/INFO]: Hizo buyzero un operador del servidor
Detener el servidor de Minecraft de la espita
Si estás en el prompt de tu servidor de Minecraft, escribe Detener seguido de Enter. Esto detendrá el servidor, guardará el mundo y le devolverá a la línea de comandos:
Detener
[08:36:57] [Hilo del servidor/INFO]: Parando el servidor
[08:36:57] [Hilo del servidor/INFO]: Parando el servidor
[08:36:57] [Hilo del servidor/INFO]: Guardando jugadores
[08:36:57] [Hilo del servidor/INFO]: buyzero perdió la conexión: Servidor cerrado
[08:36:57] [Hilo del servidor/INFO]: buyzero abandonó el juego
[08:36:57] [Hilo del servidor/INFO]: Guardando mundos
[08:36:57] [Hilo del servidor/INFO]: Guardando trozos para el nivel 'ServerLevel[world]'/minecraft:overworld
[08:37:02] [Hilo del servidor/INFO]: ThreadedAnvilChunkStorage (mundo): Todos los chunks están guardados
[08:37:02] [Hilo del servidor/INFO]: Guardando trozos para el nivel 'ServerLevel[world_nether]'/minecraft:the_nether
[08:37:05] [Hilo del servidor/INFO]: ThreadedAnvilChunkStorage (DIM-1): Todos los chunks están guardados
[08:37:05] [Hilo del servidor/INFO]: Guardando chunks para el nivel 'ServerLevel[world_the_end]'/minecraft:the_end
[08:37:10] [Hilo del servidor/INFO]: ThreadedAnvilChunkStorage (DIM1): Todos los chunks están guardados
[08:37:10] [Hilo del servidor/INFO]: ThreadedAnvilChunkStorage (mundo): Todos los chunks están guardados
[08:37:10] [Hilo del servidor/INFO]: ThreadedAnvilChunkStorage (DIM-1): Todos los chunks están guardados
[08:37:10] [Hilo del servidor/INFO]: ThreadedAnvilChunkStorage (DIM1): Todos los chunks están guardados
Sus usuarios verán la siguiente pantalla:
Creación de un servicio systemd
https://github.com/sindastra/systemd-minecraft
Tratamiento de errores
memoria insuficiente
La captura de pantalla anterior muestra el mensaje de error que verán los jugadores que se conecten a tu servidor, mientras que en el lado del servidor, verás la siguiente salida de registro:
No hay suficiente memoria para que el entorno de ejecución de Java continúe.
La asignación de memoria nativa (malloc) falló al asignar 1438248 bytes para Chunk::new
Un archivo de informe de errores con más información se guarda como:
/opt/spigot/hs_err_pid1531.log
Los datos de repetición del compilador se guardan como:
/opt/spigot/replay_pid1531.log
En este caso, tienes que ajustar la configuración de la memoria. Según la recomendación de este artículo, debe ser alrededor de 1000 MB a 1500 MB menos que la memoria del sistema disponible en su Raspberry Pi. Tenga en cuenta, que para un sistema operativo de 32 bits el proceso sólo puede abordar un poco menos de 4 GB de RAM en total, por lo que incluso con una Raspberry Pi de 32 bits, el total que le da a su servidor de Minecraft debe ser menos de 2500 MB - 2000 MB para estar en el lado seguro (2GB).
Conclusión:
Siguiendo esta guía, podrás ejecutar tus propios servidores de Raspberry Pi Minecraft y jugar con tus amigos.
Referencias / Lecturas complementarias
- Un poco de historia de los servidores de Minecraft (principalmente Bukkit / Spigot / Bedrock) (sindastra.de)
- Bitloco.org (comunidad de servidores de Minecraft Java Edition)
- Guía de instalación de la espiga (Spigotmc.org)
[...] puedes utilizar una Raspberry Pi como servidor web, servidor de archivos, servidor de impresión, servidor multimedia, servidor de Minecraft y servidor IoT [...].