Mac mini als Minecraft-Server auf FreeBSD 13

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 in FreeBSD Jail

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.