From e11253716488902059111579b3fae1fd387ae5aa Mon Sep 17 00:00:00 2001 From: michael Date: Wed, 10 Sep 2025 10:31:34 +0200 Subject: [PATCH] =?UTF-8?q?create=20service=20sh=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- create-service-sh.md | 257 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 create-service-sh.md diff --git a/create-service-sh.md b/create-service-sh.md new file mode 100644 index 0000000..68b3db5 --- /dev/null +++ b/create-service-sh.md @@ -0,0 +1,257 @@ +# create-service.sh + +**System-Service für furt automatisch erstellen** + +## Getestet unter +- OpenBSD 7.7 +- Debian 12 +- Arch Linux + +## Zweck des Scripts + +Das `create-service.sh` Script erstellt System-Services für furt mit betriebssystem-spezifischen Templates aus dem Repository. OpenBSD verwendet rc.d-Scripts, Linux nutzt systemd-Units. + +Das Script eliminiert manuelles Kopieren von Service-Definitionen und stellt sicher dass furt als System-Service korrekt konfiguriert und aktiviert wird. + +## Wie das Script funktioniert + +Das Script ist Template-basiert und nutzt vorgefertigte Service-Definitionen aus dem `deployment/` Verzeichnis. Es prüft zunächst ob es sich im furt-Quellverzeichnis befindet: + +```bash +if [ ! -d "deployment" ]; then + echo "Error: deployment/ directory not found - not in furt source directory?" + exit 1 +fi +``` + +Dann kopiert es die passende Service-Definition basierend auf dem Betriebssystem: + +```bash +if [ "$(uname)" = "OpenBSD" ]; then + cp deployment/openbsd/rc.d-furt /etc/rc.d/furt + chmod +x /etc/rc.d/furt + echo "furt_flags=" >> /etc/rc.conf.local + rcctl enable furt +``` + +Das Template-System stellt sicher dass Service-Definitionen mit der furt-Codebase versioniert werden und bei Updates automatisch die neuesten Konfigurationen erhalten. + +## Betriebssystem-Philosophien verstehen + +Die verschiedenen Service-Systeme spiegeln unterschiedliche System-Design-Philosophien wider: + +### BSD-Ansatz (OpenBSD) +OpenBSD nutzt das traditionelle rc.d-System mit einfachen Shell-Scripts. Diese Scripts sind menschenlesbar, editierbar und folgen einer klaren, vorhersagbaren Struktur. + +```bash +# OpenBSD rc.d-Service +cp deployment/openbsd/rc.d-furt /etc/rc.d/furt +chmod +x /etc/rc.d/furt +echo "furt_flags=" >> /etc/rc.conf.local +rcctl enable furt +``` + +Das rc.d-System ist minimalistisch aber mächtig - Services werden über `rcctl` verwaltet und Konfiguration erfolgt über `/etc/rc.conf.local`. Diese Einfachheit macht Debugging und Anpassungen straightforward. + +### Linux-Ansatz (systemd) +Linux-Distributionen nutzen meist systemd als Service-Manager. systemd bietet erweiterte Features wie Dependency-Management, Socket-Activation und Resource-Limiting. + +```bash +# systemd Service-Unit +cp deployment/linux/furt.service /etc/systemd/system/ +systemctl daemon-reload +systemctl enable furt +``` + +Der `daemon-reload` ist notwendig damit systemd neue Service-Units erkennt. Das `enable` sorgt für automatischen Start beim Boot - unabhängig vom aktuellen Service-Status. + +## Template-Architektur verstehen + +Das Script nutzt Repository-Templates statt Inline-Generierung: + +**Template-Vorteile:** Service-Definitionen sind versioniert, testbar und reviewbar. Änderungen werden über Git getrackt und können einfach rückgängig gemacht werden. + +**Consistency:** Alle furt-Installationen nutzen identische Service-Konfigurationen. Templates stellen sicher dass bewährte Praktiken automatisch angewendet werden. + +**Maintainability:** Updates an Service-Definitionen werden zentral im Repository verwaltet. Bei Fresh-Installations werden automatisch die neuesten Templates verwendet. + +## Service-Management nach Installation + +Nach erfolgreicher Script-Ausführung ist furt als System-Service konfiguriert: + +### OpenBSD Service-Management +```bash +# Service starten +rcctl start furt + +# Service stoppen +rcctl stop furt + +# Service-Status prüfen +rcctl check furt + +# Service-Logs anzeigen +tail -f /var/log/daemon +``` + +### Linux Service-Management +```bash +# Service starten +systemctl start furt + +# Service stoppen +systemctl stop furt + +# Service-Status prüfen +systemctl status furt + +# Service-Logs anzeigen +journalctl -u furt -f +``` + +## Script praktisch nutzen + +### Standard-Installation +```bash +# Nach setup-user.sh und setup-directories.sh ausführen +sudo ./scripts/create-service.sh +``` + +Ausgabe bestätigt die Service-Erstellung: +``` +OpenBSD service created and enabled using repository template +``` + +### Als Teil der orchestrierten Installation +```bash +./install.sh +# [INFO] Phase 4: Creating system service... OK +``` + +Das Orchestrator-Script ruft `create-service.sh` nach der Binary-Installation auf damit der Service auf die korrekte furt-Binary verweist. + +### Upgrade-Installation +```bash +# Service-Update explizit anfordern +./install.sh --create-service +``` + +Im Upgrade-Modus wird Service-Erstellung übersprungen außer explizit angefordert. Das verhindert Überschreibung von manuell angepassten Service-Konfigurationen. + +## Installation validieren + +Nach der Script-Ausführung kannst du die Service-Installation prüfen: + +```bash +# OpenBSD +ls -la /etc/rc.d/furt +grep furt_flags /etc/rc.conf.local +rcctl ls enabled | grep furt + +# Linux +ls -la /etc/systemd/system/furt.service +systemctl list-unit-files | grep furt +``` + +Korrekte Installation zeigt: +``` +# OpenBSD +-rwxr-xr-x 1 root wheel 1234 Nov 15 10:30 /etc/rc.d/furt +furt_flags= +furt + +# Linux +-rw-r--r-- 1 root root 567 Nov 15 10:30 /etc/systemd/system/furt.service +furt.service enabled +``` + +## Troubleshooting + +### "deployment/ directory not found" +``` +Error: deployment/ directory not found - not in furt source directory? +``` +Das Script muss aus dem furt-Quellverzeichnis ausgeführt werden: +```bash +cd /path/to/furt-source +sudo ./scripts/create-service.sh +``` + +### "Template not found" +``` +Error: deployment/openbsd/rc.d-furt template not found +``` +Das Repository ist unvollständig oder beschädigt: +```bash +# Prüfe Template-Verzeichnis +ls -la deployment/ +git status # Prüfe auf fehlende Dateien +``` + +### "Permission denied" bei Service-Erstellung +``` +cp: /etc/rc.d/furt: Permission denied +``` +Das Script benötigt Root-Rechte für System-Service-Installation: +```bash +sudo ./scripts/create-service.sh # Linux +doas ./scripts/create-service.sh # OpenBSD +``` + +### Service kann nicht aktiviert werden +``` +rcctl: furt: failed +``` +Prüfe ob die furt-Binary existiert und ausführbar ist: +```bash +ls -la /usr/local/bin/furt +# Binary muss vor Service-Erstellung installiert sein +``` + +### systemd kann Service nicht laden +``` +systemctl: Failed to enable unit: Invalid argument +``` +Prüfe Template-Syntax: +```bash +systemd-analyze verify /etc/systemd/system/furt.service +``` + +## Template anpassen + +### OpenBSD rc.d-Anpassungen +```bash +# Bearbeite deployment/openbsd/rc.d-furt +# Dann Script erneut ausführen +sudo ./scripts/create-service.sh +``` + +### systemd-Unit-Anpassungen +```bash +# Bearbeite deployment/linux/furt.service +# Dann Script erneut ausführen +sudo ./scripts/create-service.sh +systemctl daemon-reload # Nach manuellen Änderungen +``` + +## Script erweitern + +### Zusätzliche Service-Manager +```bash +elif [ "$(uname)" = "NetBSD" ]; then + # NetBSD nutzt ebenfalls rc.d + cp deployment/netbsd/rc.d-furt /etc/rc.d/furt + chmod +x /etc/rc.d/furt + echo "furt=YES" >> /etc/rc.conf + echo "NetBSD service created and enabled" +``` + +### Custom Installation-Pfade +```bash +# Support für alternative Prefixes +PREFIX="${PREFIX:-/usr/local}" +cp deployment/openbsd/rc.d-furt /etc/rc.d/furt +sed -i "s|/usr/local|$PREFIX|g" /etc/rc.d/furt +``` + +Das `create-service.sh` Script abstrahiert die Komplexität verschiedener Service-Management-Systeme und macht furt zu einem echten System-Service der automatisch startet, überwacht wird und in die Betriebssystem-Verwaltung integriert ist. \ No newline at end of file