# ============================================================================= # fivem.service -- systemd-Unit fuer einen FiveM-FXServer # # Ablegen unter: /etc/systemd/system/fivem.service # Danach: systemctl daemon-reload && systemctl enable --now fivem # # Anzupassen sind User, Group und die beiden Pfade. Alles andere kann so # bleiben, die Begruendungen stehen in den Kommentaren. # # Doku: https://www.musiker15.de/de/docs/fivem/installation # ============================================================================= [Unit] Description=FiveM FXServer mit txAdmin # network.target heisst nur, dass das Netzwerk-Subsystem gestartet WURDE, nicht # dass eine Adresse konfiguriert ist. Ohne network-online.target versucht der # Server beim Booten eine Verbindung zu Cfx, bekommt keine Route und laeuft # ohne Eintrag in der Serverliste weiter. After=network-online.target Wants=network-online.target [Service] Type=simple User=fivem Group=fivem # Arbeitsverzeichnis sind die Server-Daten, nicht das Artefakt. WorkingDirectory=/opt/fivem/server-data # txAdmin-Betrieb: txAdmin laedt die server.cfg selbst, deshalb kein +exec. # txAdminPort muss hier stehen, in der server.cfg wird die Convar ignoriert: # die liest der Spielserver, und den startet txAdmin erst, wenn es seinen Port # laengst gebunden hat. # # ACHTUNG: KEIN txAdminInterface bzw. TXHOST_INTERFACE setzen. Diese # Einstellung bindet nicht nur das Panel, sie zwingt auch den FXServer auf # dasselbe Interface. Auf 127.0.0.1 gesetzt ist der Spielserver danach fuer # niemanden mehr erreichbar. Port 40120 wird stattdessen ueber die Firewall # geschlossen: ufw deny 40120/tcp ExecStart=/opt/fivem/server/run.sh \ +set serverProfile default \ +set txAdminPort 40120 # Direktbetrieb ohne txAdmin: obige Zeile auskommentieren, diese verwenden. #ExecStart=/opt/fivem/server/run.sh +exec /opt/fivem/server-data/server.cfg Restart=always RestartSec=15 TimeoutStartSec=120 TimeoutStopSec=30 # run.sh ist nur ein Wrapper um die proot-Umgebung. Bei KillMode=process # bekommt nur der Wrapper das Signal, die Kindprozesse laufen weiter und # halten den Spielport belegt. Der naechste Start scheitert dann daran. KillMode=mixed # FXServer behandelt SIGINT als geordnetes Herunterfahren. KillSignal=SIGINT StandardOutput=journal StandardError=journal SyslogIdentifier=fivem LimitNOFILE=65535 # --- Hardening --------------------------------------------------------------- # Bewusst zurueckhaltend. Der Linux-Build laeuft in einem proot-Container und # proot arbeitet mit ptrace. Diese drei Optionen sperren genau das aus und # duerfen hier NICHT gesetzt werden: # SystemCallFilter=@system-service # RestrictNamespaces=true # NoNewPrivileges=true # Der Dienst startet sonst nicht, mit einer Fehlermeldung, die nach allem # Moeglichen aussieht, nur nicht nach systemd. # # ProtectHome=true nur setzen, wenn der Server NICHT unter /home liegt. PrivateTmp=true ProtectKernelTunables=true ProtectControlGroups=true [Install] WantedBy=multi-user.target