Table of Contents
- create-service.sh
- Getestet unter
- Zweck des Scripts
- Wie das Script funktioniert
- Betriebssystem-Philosophien verstehen
- Template-Architektur verstehen
- Service-Management nach Installation
- Script praktisch nutzen
- Installation validieren
- Troubleshooting
- "deployment/ directory not found"
- "Template not found"
- "Permission denied" bei Service-Erstellung
- Service kann nicht aktiviert werden
- systemd kann Service nicht laden
- Template anpassen
- Script erweitern
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:
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:
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.
# 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.
# 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
# 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
# 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
# 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
./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
# 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:
# 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:
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:
# 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:
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:
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:
systemd-analyze verify /etc/systemd/system/furt.service
Template anpassen
OpenBSD rc.d-Anpassungen
# Bearbeite deployment/openbsd/rc.d-furt
# Dann Script erneut ausführen
sudo ./scripts/create-service.sh
systemd-Unit-Anpassungen
# 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
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
# 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.