Inhoud

โš™๏ธ systemd

systemd is het centrale service- en initialisatiesysteem van Rocky Linux 10.

Binnen Tulpencraft wordt systemd gebruikt om onder andere de Minecraft-servers automatisch te starten, stoppen en beheren. Hierdoor zijn de servers niet afhankelijk van een handmatige java-start na een reboot.

Rocky Linux gebruikt systemd als standaard systeem- en servicebeheerder. Services worden beschreven met zogenaamde units, waaronder .service-units voor systeemdiensten.


๐ŸŽฏ Doel binnen Tulpencraft

Binnen Tulpencraft heeft systemd een aantal belangrijke functies:

Hierdoor wordt een Minecraft-server een normale Linux-service in plaats van een proces dat handmatig vanuit een shell moet worden gestart.


๐Ÿ—๏ธ Opbouw

Een systemd-service bestaat uit een unit file.

Voorbeeld:

/etc/systemd/system/minecraft-lobby.service

Een service bevat doorgaans drie belangrijke secties:

[Unit]
[Service]
[Install]

`[Unit]`

Beschrijft de service en eventuele afhankelijkheden.

`[Service]`

Beschrijft hoe het programma wordt uitgevoerd.

`[Install]`

Beschrijft wanneer en hoe de service automatisch wordt geactiveerd.


๐ŸŽฎ Minecraft-services

Tulpencraft gebruikt systemd voor de Minecraft-services.

Voorbeelden zijn:

minecraft-lobby.service
minecraft-survival.service
minecraft-events.service

De exacte services kunnen veranderen naarmate het netwerk wordt uitgebreid.

De Velocity Proxy en de Minecraft-backends worden als afzonderlijke services beheerd wanneer zij op afzonderlijke processen of VM's draaien.


๐Ÿš€ Service starten

Een service kan handmatig worden gestart met:

sudo systemctl start minecraft-lobby

De status controleren:

sudo systemctl status minecraft-lobby

Een succesvolle service ziet er conceptueel uit als:

โ— minecraft-lobby.service
   Loaded: loaded
   Active: active (running)

๐Ÿ›‘ Service stoppen

Een Minecraft-service gecontroleerd stoppen:

sudo systemctl stop minecraft-lobby

Dit verdient de voorkeur boven het hard beรซindigen van het Java-proces.


๐Ÿ”„ Service herstarten

Na een configuratiewijziging kan een service worden herstart:

sudo systemctl restart minecraft-lobby

De status daarna controleren:

sudo systemctl status minecraft-lobby

๐Ÿ” Automatisch starten

Een Minecraft-service wordt ingeschakeld met:

sudo systemctl enable minecraft-lobby

Hierdoor wordt de service automatisch gestart tijdens het opstarten van het systeem.

Controleren:

sudo systemctl is-enabled minecraft-lobby

Verwachte output:

enabled

systemd gebruikt hiervoor onder andere multi-user.target, de gebruikelijke target voor een server zonder grafische omgeving.


๐Ÿš€ Starten รฉn inschakelen

Wanneer een service zowel onmiddellijk moet worden gestart als na een reboot automatisch moet starten:

sudo systemctl enable --now minecraft-lobby

Dit is binnen Tulpencraft meestal de handigste methode bij het voor het eerst activeren van een nieuwe service.


๐Ÿ”ƒ Automatisch opnieuw starten

Minecraft kan om verschillende redenen stoppen:

Daarom kan een Minecraft-service automatisch opnieuw worden gestart.

Een veelgebruikte instelling is:

[Service]
Restart=on-failure
RestartSec=5

Hiermee probeert systemd de service opnieuw te starten wanneer deze onverwacht stopt.

Een permanente crashloop moet uiteraard worden onderzocht in plaats van simpelweg te worden genegeerd.


๐Ÿ‘ค Niet als root draaien

Minecraft-services worden bij voorkeur niet als root uitgevoerd.

Bijvoorbeeld:

[Service]
User=minecraft
Group=minecraft

Hierdoor draait het Java-proces onder een beperkte Linux-gebruiker.

Dit beperkt de impact wanneer de Minecraft-server of een plugin wordt gecompromitteerd.

Een systemd-service kan expliciet met User= en Group= onder een dedicated account worden uitgevoerd.


๐Ÿ“ Werkdirectory

Een Minecraft-service moet expliciet weten waar de serverbestanden staan.

Bijvoorbeeld:

[Service]
WorkingDirectory=/srv/minecraft/lobby

Hierdoor worden relatieve paden vanuit de juiste Minecraft-directory geรฏnterpreteerd.


โ˜• Java starten

Een Minecraft-service start Java rechtstreeks vanuit systemd.

Bijvoorbeeld:

[Service]
ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar paper.jar --nogui

De daadwerkelijke Java-versie en geheugeninstellingen verschillen per server.

Zie ook:


๐Ÿงฉ Voorbeeldservice

Een vereenvoudigd voorbeeld voor een Tulpencraft Minecraft-service:

[Unit]
Description=Tulpencraft Lobby
After=network-online.target
Wants=network-online.target
 
[Service]
User=minecraft
Group=minecraft
WorkingDirectory=/srv/minecraft/lobby
 
ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar paper.jar --nogui
 
Restart=on-failure
RestartSec=5
 
[Install]
WantedBy=multi-user.target

Dit is een voorbeeld. De daadwerkelijke productieconfiguratie kan aanvullende beveiligings- en runtime-instellingen bevatten.


๐ŸŒ Netwerkafhankelijkheden

Minecraft-services hebben een werkende netwerkstack nodig.

Daarom kan een service bijvoorbeeld afhankelijk worden gemaakt van:

After=network-online.target
Wants=network-online.target

Dit voorkomt dat de Minecraft-service onnodig vroeg tijdens de boot wordt gestart.

Bij de Tulpencraft Proxy is dit extra relevant omdat de proxy het centrale toegangspunt tot het netwerk vormt.


๐Ÿ”— Afhankelijkheden

systemd kan afhankelijkheden tussen services beheren.

Bijvoorbeeld:

network-online.target
        โ”‚
        โ–ผ
Velocity Proxy
        โ”‚
        โ–ผ
Lobby
        โ”‚
        โ”œโ”€โ”€โ–บ Survival
        โ””โ”€โ”€โ–บ Events

In de praktijk worden Minecraft-backends niet noodzakelijk als harde systemd-afhankelijkheid van de proxy gemaakt.

De Minecraft-netwerkarchitectuur wordt namelijk door Velocity beheerd.

Een backend die tijdelijk niet beschikbaar is, moet niet automatisch voorkomen dat de Proxy zelf start.


๐Ÿ“‹ Logs

De output van systemd-services wordt standaard beschikbaar gemaakt via journald.

De logs van de lobby bekijken:

sudo journalctl -u minecraft-lobby

Alleen recente meldingen:

sudo journalctl -u minecraft-lobby --since "1 hour ago"

Live meekijken:

sudo journalctl -u minecraft-lobby -f

Dit is bijzonder handig bij het opstarten van Minecraft.

Bijvoorbeeld:

sudo journalctl -u minecraft-lobby --since "5 minutes ago" --no-pager

๐Ÿ”Ž Fouten zoeken

Een snelle controle:

sudo systemctl status minecraft-lobby

Daarna:

sudo journalctl -u minecraft-lobby -b --no-pager

De optie -b beperkt de resultaten tot de huidige boot.

Voor alleen fouten:

sudo journalctl -u minecraft-lobby -b -p err

๐Ÿงน Journal en Minecraft logs

systemd-journald en de Minecraft logging zijn twee verschillende zaken.

systemd
   โ”‚
   โ””โ”€โ”€ journald
          โ”‚
          โ””โ”€โ”€ service output
 
Minecraft
   โ”‚
   โ””โ”€โ”€ logs/
          โ”œโ”€โ”€ latest.log
          โ””โ”€โ”€ ...

Beide kunnen daarom nuttige informatie bevatten.

Bij een probleem wordt eerst gekeken naar:

sudo systemctl status minecraft-lobby

en:

sudo journalctl -u minecraft-lobby -b

Daarna kunnen de Minecraft-logs worden onderzocht.


๐Ÿ”„ Configuratie wijzigen

Na het aanpassen van een systemd-unit moet systemd zijn configuratie opnieuw inlezen:

sudo systemctl daemon-reload

Daarna kan de service worden herstart:

sudo systemctl restart minecraft-lobby

Zonder daemon-reload kan systemd een oude versie van de unit blijven gebruiken.


๐Ÿ“ Unit bekijken

De daadwerkelijk gebruikte unit kan worden bekeken met:

sudo systemctl cat minecraft-lobby

Dit is vaak beter dan alleen het bestand bekijken, omdat hiermee ook relevante drop-ins zichtbaar kunnen zijn. Rocky Linux documenteert systemctl cat en systemctl edit als standaardmethoden voor het bekijken en aanpassen van units.


๐Ÿ› ๏ธ Overrides

Bestaande systemd-services worden bij voorkeur niet rechtstreeks aangepast wanneer een override mogelijk is.

Een override openen:

sudo systemctl edit minecraft-lobby

systemd maakt hiervoor bijvoorbeeld:

/etc/systemd/system/minecraft-lobby.service.d/override.conf

Na een wijziging:

sudo systemctl daemon-reload
sudo systemctl restart minecraft-lobby

Dit houdt de basisunit gescheiden van lokale aanpassingen.


๐Ÿ” systemd hardening

Naast SELinux, firewalld en Linux-permissions kan systemd zelf worden gebruikt om services verder te beperken.

Mogelijke instellingen zijn bijvoorbeeld:

NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
RestrictSUIDSGID=true
LockPersonality=true

Niet iedere instelling is zonder meer geschikt voor Minecraft.

Java en Minecraft/plugins kunnen namelijk specifieke toegang nodig hebben. Vooral instellingen zoals MemoryDenyWriteExecute= kunnen applicaties met JIT-compilers breken; Rocky Linux waarschuwt hier expliciet voor.

Daarom worden hardening-opties per service getest.


๐Ÿงช systemd-analyze security

De beveiliging van een systemd-service kan worden onderzocht met:

sudo systemd-analyze security minecraft-lobby

Hiermee kan worden bekeken welke systemd-sandboxingmaatregelen actief zijn en waar verdere beperking mogelijk is.

Het doel is niet om blind de hoogst mogelijke score te behalen.

Het doel is:

De service zo ver mogelijk beperken zonder Minecraft of benodigde plugins te breken.


๐Ÿ“Š Resourcebeperking

systemd kan ook resources van een service beperken.

Denk bijvoorbeeld aan:

MemoryMax=
CPUQuota=
TasksMax=

Dit kan in bepaalde situaties voorkomen dat รฉรฉn service alle resources van een VM gebruikt.

Voor Minecraft moet hiermee voorzichtig worden omgegaan.

Minecraft kan tijdens wereldgeneratie, chunkloading of piekbelasting tijdelijk aanzienlijk meer CPU en RAM gebruiken.

Resource limits worden daarom alleen toegepast wanneer ze daadwerkelijk nodig en getest zijn.


๐Ÿ”’ Servicebeheer

Alleen bevoegde beheerders mogen Tulpencraft-services beheren.

Voorbeelden:

sudo systemctl start minecraft-lobby
sudo systemctl stop minecraft-lobby
sudo systemctl restart minecraft-lobby

Toegang tot systemctl wordt daarmee onderdeel van de algemene Linux-beheerrechten.


๐Ÿšจ Bij een serverprobleem

Bij een Minecraft-server die niet meer bereikbaar is:

1. Controleer systemd

sudo systemctl status minecraft-lobby

2. Controleer de laatste logs

sudo journalctl -u minecraft-lobby -n 100 --no-pager

3. Controleer of Java draait

pgrep -af java

4. Controleer de luisterende poorten

sudo ss -lntp

5. Controleer Minecraft zelf

/srv/minecraft/lobby/logs/latest.log

6. Herstart alleen wanneer nodig

sudo systemctl restart minecraft-lobby

Een restart is dus niet automatisch de eerste oplossing. Eerst wordt de oorzaak onderzocht.


๐Ÿ”„ Na een reboot

Na een reboot moet een Tulpencraft-node zelfstandig kunnen herstellen.

De gewenste volgorde is:

๐Ÿ–ฅ๏ธ Rocky Linux boot
        โ”‚
        โ–ผ
โš™๏ธ systemd
        โ”‚
        โ”œโ”€โ”€ ๐Ÿ”ฅ firewalld
        โ”œโ”€โ”€ ๐Ÿ›ก๏ธ overige systeemservices
        โ”‚
        โ–ผ
โ˜• Java/Minecraft services
        โ”‚
        โ–ผ
๐Ÿš€ Tulpencraft netwerk beschikbaar

De Minecraft-services worden via systemd automatisch gestart wanneer ze met enable zijn geactiveerd.


๐Ÿงฐ Belangrijke commando's

CommandoFunctie
systemctl status <service>Status bekijken
systemctl start <service>Service starten
systemctl stop <service>Service stoppen
systemctl restart <service>Service herstarten
systemctl reload <service>Configuratie opnieuw laden
systemctl enable <service>Automatisch starten inschakelen
systemctl disable <service>Automatisch starten uitschakelen
systemctl enable --now <service>Inschakelen en direct starten
systemctl is-enabled <service>Autostart controleren
systemctl cat <service>Unit bekijken
systemctl edit <service>Override aanpassen
systemctl daemon-reloadUnits opnieuw inladen
journalctl -u <service>Service-log bekijken
systemd-analyze security <service>Service-hardening analyseren

๐ŸŒท Tulpencraft uitgangspunten

Binnen Tulpencraft gelden voor systemd de volgende uitgangspunten:

  1. โš™๏ธ Alle permanente Minecraft-services worden via systemd beheerd.
  2. ๐Ÿš€ Services starten automatisch na een reboot.
  3. ๐Ÿ‘ค Minecraft draait niet als root.
  4. ๐Ÿ”„ Onverwachte crashes kunnen automatisch worden herstart.
  5. ๐Ÿ“‹ Service-output is via journald beschikbaar.
  6. ๐Ÿ” systemd-hardening wordt toegepast waar dit compatibel is met Minecraft.
  7. ๐Ÿ›ก๏ธ systemd vormt een aanvullende beveiligingslaag naast SELinux en firewalld.
  8. ๐Ÿงช Wijzigingen worden eerst getest voordat ze productie worden.
  9. ๐Ÿ“ Lokale systemd-aanpassingen worden waar mogelijk via overrides beheerd.
  10. ๐Ÿ”Ž Bij problemen wordt eerst de oorzaak onderzocht voordat services blind worden herstart.

๐Ÿ“š Gerelateerde documentatie


๐Ÿ“– Bronnen

De technische basis van deze pagina is gebaseerd op de Rocky Linux-documentatie over systemd, system services en system targets.