Mac mini als Minecraft-Server auf FreeBSD 13
Meine Tochter zockt mit Freunden gern Minecraft. Wir hatten eine Zeit lang einen Raspberry Pi 4 als Minecraft-Server laufen. Ich bin mit FreeBSD aufgewachsen und tu mich mit "diesem Linux" schwer. Also stöber ich auf dem Dachboden und werde fündig. Wir recyceln heute einen alten Mac mini Server (Macmini3,1 Late 2009), installieren FreeBSD 13 auf einer alten SSD und richten den Minecraft-Server Port in einer Jail ein.
Hardware
Apple hat den Mac mini Server damals anstatt mit HD + DVD-Laufwerk mit zwei HDs ausgestattet. Wir schmeißen die beiden alten HDs raus und bauen eine SSD ein.
Bei der Installation von FreeBSD 13 kam es zu häufigen crashes. Das änderte sich, als ich die Kabel der drei WLAN-Antennen vom Board abzog. Seitdem läuft der Mac mini sauber durch
USB-Stick vorbereiten
FreeBSD laden: https://www.freebsd.org/where/
Den Stick FAT formatieren mit GUID-Partitionstabelle
Das FreeBSD-Image auf den Stick kopieren.
# diskutil list
...
/dev/disk7 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *31.5 GB disk7
1: EFI EFI 209.7 MB disk7s1
2: Microsoft Basic Data UNTITLED 31.2 GB disk7s2
# sudo dd if=FreeBSD-13.0-RELEASE-amd64-memstick.img of=/dev/disk7 bs=1024000
...
# diskutil eject /dev/disk7
FreeBSD auf dem Mac mini installieren
Den USB-Stick in den Mac mini stecken und mit gedrückter option booten. Im boot-Menü den Stick auswählen und bsdinstall durchlaufen.
src installieren
Falls /usr/src bei der Installation von FreeBSD nicht mitinstalliert wurde, muss es jetzt nachgeholt werden. Quelle: https://srobb.net/fbsdgit.html
# cd /usr
# mkdir src
# git clone -b releng/13.0 --depth 1 https://git.freebsd.org/src.git src
Jail installieren
auf dem Host ezjail installieren
# pkg install sysutils/ezjail
Die Welt für die Jails bauen. Das dauert 'ne ganze Weile. Auf dem Core 2 Duo mit 2,5GHz lief das über drei Stunden.
# ezjail-admin update -b
ports tree
den Portstree für die Basejail holen oder updaten
# ezjail-admin update -P
die jail erstellen
# ezjail-admin create minecraft 'nfe0|10.0.0.31'
...
12598 blocks
Warning: Some services already seem to be listening on all IP, (including 10.0.0.31)
This may cause some confusion, here they are:
ntpd ntpd 879 20 udp6 *:123 *:*
ntpd ntpd 879 21 udp4 *:123 *:*
root syslogd 716 6 udp6 *:514 *:*
root syslogd 716 7 udp4 *:514 *:*
oder
# ((ezjail-admin create -x minecraft 'lo1|127.0.1.1,nfe0|10.0.0.31'))
Warning: Some services already seem to be listening on all IP, (including 127.0.1.1)
This may cause some confusion, here they are:
root ntpd 1002 20 udp6 *:123 *:*
root ntpd 1002 21 udp4 *:123 *:*
root syslogd 840 6 udp6 *:514 *:*
root syslogd 840 7 udp4 *:514 *:*
Warning: Some services already seem to be listening on all IP, (including 10.0.0.31)
This may cause some confusion, here they are:
root ntpd 1002 20 udp6 *:123 *:*
root ntpd 1002 21 udp4 *:123 *:*
root syslogd 840 6 udp6 *:514 *:*
root syslogd 840 7 udp4 *:514 *:*
Netzwerk
prüfen ob netz an ist
# sysctl -a | grep raw_socket
security.jail.param.allow.raw_sockets: 0
security.jail.allow_raw_sockets: 0
in die conf eingetragen
# ee /usr/local/etc/ezjail/minecraft
die Zeile
export jail_minecraft_parameters=""
ändern in:
export jail_ minecraft_parameters="allow.raw_sockets=1"
nochmal prüfen
# sysctl -a | grep raw_socket
security.jail.param.allow.raw_sockets: 0
security.jail.allow_raw_sockets: 1
Jail
jail starten
# service ezjail start minecraft
liste aller jails
# jls
JID IP Address Hostname Path
1 10.0.0.31 minecraft /usr/jails/minecraft
jail betreten
# jexec 1
zeitzone setzen
# rm -f /etc/localtime; ln -s /usr/share/zoneinfo/MET /etc/localtime
dns setzen
# ee /etc/resolv.conf
nameserver 10.0.0.1
Jail löschen
# ezjail-admin stop minecraft
# ezjail-admin delete minecraft
den ordner löschen...
# cd /usr/jails/minecraft
# chflags -R noschg *
# cd ..
# rm -rf minecraft
minecraft-server
Java installieren
# pkg install java/openjdk16
...
# java -version
openjdk version "16.0.2" 2021-07-20
OpenJDK Runtime Environment (build 16.0.2+7-1)
OpenJDK 64-Bit Server VM (build 16.0.2+7-1, mixed mode, sharing)
# javac -version
javac 16.0.2
Minecraft-Server installierren
# portmaster games/minecraft-server
...
===>>> pkg-message for minecraft-server-1.17.1
On install:
When you first run minecraft-server, it will populate the file
/usr/local/etc/minecraft-server/eula.txt
It is required to read the EULA, and then set eula=true
- Configuration files can be found in /usr/local/etc/minecraft-server/
- Log and debug output files can be found in /var/log/minecraft-server/
- World files can be found in /var/db/minecraft-server/
Without daemon option:
- To run the server, run /usr/local/bin/minecraft-server
- To edit java's parameters, edit /usr/local/etc/minecraft-server/java-args.txt
With daemon option:
- The service has been installed with the name 'minecraft'
- To adjust maximum memory usage (-Xmx), use minecraft_memx= in /etc/rc.conf
- To adjust initial memory usage (-Xms), use minecraft_mems= in /etc/rc.conf
- To add other java parameters, use minecraft_args= in /etc/rc.conf
- To see the interactive console, type service minecraft console
===>>> Done displaying pkg-message files
(END)
ohne daemon starten
# /usr/local/bin/minecraft-server
als daemon starten:
# service minecraft start
Starting minecraft.
# service minecraft console
das ist eine tmux-session, zum verlassen control + B und danach D
Stromverbrauch
Beim Kompilieren/Installieren verbraucht der Mac mini im Durchschnitt 45 W. Mit laufendem Minecraft-Server liegt der Verbrauch bei 25 W. Das entspricht bei einem Strompreis von 0,30 €/KWh (und ohne Balkonkraftwerk) .. ca 5,50 €/Monat.
Als nächstes werden wir einen Raspberry Pi 4 mit SSD bestücken um dort FreeBSD zu installieren. Da sollte der Stromverbrauch deutlich niedriger sein, bei vermutlich besserer Performance.