create service sh hinzugefügt

michael 2025-09-10 10:31:34 +02:00
parent 4a51ae5c83
commit e112537164

257
create-service-sh.md Normal file

@ -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.