# โš™๏ธ 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: * ๐Ÿš€ Minecraft-servers automatisch starten; * ๐Ÿ”„ services automatisch opnieuw starten wanneer dat nodig is; * ๐Ÿ›‘ services gecontroleerd stoppen; * ๐Ÿ“‹ logging via de systemd journal; * ๐Ÿ”— afhankelijkheden tussen services beheren; * ๐Ÿ” services onder een specifieke Linux-gebruiker uitvoeren; * ๐Ÿงฑ services verder hardenen; * ๐Ÿ”„ services automatisch laten starten na een reboot. 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: ```text /etc/systemd/system/minecraft-lobby.service ``` Een service bevat doorgaans drie belangrijke secties: ```ini [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: ```text 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: ```bash sudo systemctl start minecraft-lobby ``` De status controleren: ```bash sudo systemctl status minecraft-lobby ``` Een succesvolle service ziet er conceptueel uit als: ```text โ— minecraft-lobby.service Loaded: loaded Active: active (running) ``` --- ## ๐Ÿ›‘ Service stoppen Een Minecraft-service gecontroleerd stoppen: ```bash 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: ```bash sudo systemctl restart minecraft-lobby ``` De status daarna controleren: ```bash sudo systemctl status minecraft-lobby ``` --- ## ๐Ÿ” Automatisch starten Een Minecraft-service wordt ingeschakeld met: ```bash sudo systemctl enable minecraft-lobby ``` Hierdoor wordt de service automatisch gestart tijdens het opstarten van het systeem. Controleren: ```bash sudo systemctl is-enabled minecraft-lobby ``` Verwachte output: ```text 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: ```bash 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: * Java-crash; * pluginprobleem; * onverwachte fout; * Out Of Memory; * handmatige beรซindiging; * tijdelijke fout in een afhankelijk proces. Daarom kan een Minecraft-service automatisch opnieuw worden gestart. Een veelgebruikte instelling is: ```ini [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: ```ini [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: ```ini [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: ```ini [Service] ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar paper.jar --nogui ``` De daadwerkelijke Java-versie en geheugeninstellingen verschillen per server. Zie ook: * [[technische-infrastructuur:java|Java]] * [[serverinfrastructuur:lobby|Lobby]] * [[serverinfrastructuur:survival|Survival]] --- ## ๐Ÿงฉ Voorbeeldservice Een vereenvoudigd voorbeeld voor een Tulpencraft Minecraft-service: ```ini [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: ```ini 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: ```text 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: ```bash sudo journalctl -u minecraft-lobby ``` Alleen recente meldingen: ```bash sudo journalctl -u minecraft-lobby --since "1 hour ago" ``` Live meekijken: ```bash sudo journalctl -u minecraft-lobby -f ``` Dit is bijzonder handig bij het opstarten van Minecraft. Bijvoorbeeld: ```bash sudo journalctl -u minecraft-lobby --since "5 minutes ago" --no-pager ``` --- ## ๐Ÿ”Ž Fouten zoeken Een snelle controle: ```bash sudo systemctl status minecraft-lobby ``` Daarna: ```bash sudo journalctl -u minecraft-lobby -b --no-pager ``` De optie `-b` beperkt de resultaten tot de huidige boot. Voor alleen fouten: ```bash sudo journalctl -u minecraft-lobby -b -p err ``` --- ## ๐Ÿงน Journal en Minecraft logs systemd-journald en de Minecraft logging zijn twee verschillende zaken. ```text systemd โ”‚ โ””โ”€โ”€ journald โ”‚ โ””โ”€โ”€ service output Minecraft โ”‚ โ””โ”€โ”€ logs/ โ”œโ”€โ”€ latest.log โ””โ”€โ”€ ... ``` Beide kunnen daarom nuttige informatie bevatten. Bij een probleem wordt eerst gekeken naar: ```bash sudo systemctl status minecraft-lobby ``` en: ```bash 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: ```bash sudo systemctl daemon-reload ``` Daarna kan de service worden herstart: ```bash 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: ```bash 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: ```bash sudo systemctl edit minecraft-lobby ``` systemd maakt hiervoor bijvoorbeeld: ```text /etc/systemd/system/minecraft-lobby.service.d/override.conf ``` Na een wijziging: ```bash 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: ```ini 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: ```bash 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: ```ini 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: ```bash 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 ```bash sudo systemctl status minecraft-lobby ``` ### 2. Controleer de laatste logs ```bash sudo journalctl -u minecraft-lobby -n 100 --no-pager ``` ### 3. Controleer of Java draait ```bash pgrep -af java ``` ### 4. Controleer de luisterende poorten ```bash sudo ss -lntp ``` ### 5. Controleer Minecraft zelf ```text /srv/minecraft/lobby/logs/latest.log ``` ### 6. Herstart alleen wanneer nodig ```bash 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: ```text ๐Ÿ–ฅ๏ธ 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 | Commando | Functie | | ------------------------------------ | -------------------------------- | | `systemctl status ` | Status bekijken | | `systemctl start ` | Service starten | | `systemctl stop ` | Service stoppen | | `systemctl restart ` | Service herstarten | | `systemctl reload ` | Configuratie opnieuw laden | | `systemctl enable ` | Automatisch starten inschakelen | | `systemctl disable ` | Automatisch starten uitschakelen | | `systemctl enable --now ` | Inschakelen en direct starten | | `systemctl is-enabled ` | Autostart controleren | | `systemctl cat ` | Unit bekijken | | `systemctl edit ` | Override aanpassen | | `systemctl daemon-reload` | Units opnieuw inladen | | `journalctl -u ` | Service-log bekijken | | `systemd-analyze security ` | 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 * [[technische-infrastructuur:overzicht|Technische infrastructuur]] * [[technische-infrastructuur:rocky-linux-10|Rocky Linux 10]] * [[technische-infrastructuur:os-installatie|OS-installatie]] * [[technische-infrastructuur:server-hardening|Server hardening]] * [[technische-infrastructuur:firewall|Firewall]] * [[technische-infrastructuur:selinux|SELinux]] * [[technische-infrastructuur:java|Java]] * [[technische-infrastructuur:monitoring|Monitoring & logging]] * [[beheer:server-starten|Server starten]] * [[beheer:server-stoppen|Server stoppen]] --- ## ๐Ÿ“– Bronnen De technische basis van deze pagina is gebaseerd op de Rocky Linux-documentatie over systemd, system services en system targets.