2 create service sh
michael edited this page 2025-09-10 14:12:26 +02:00

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.