# A4W Auftrag4Works – Linux-Update

Dieses Paket enthält den aktualisierten Linux-Updatepfad.

## Ablauf

1. In A4W unter Linux `linux-update.json` als Update-Manifest hinterlegen.
2. Update suchen und herunterladen.
3. Auf „Linux-Update vorbereiten“ klicken.
4. Den angezeigten SSH-Befehl als root/sudo auf dem Server ausführen.

Beispiel:

```bash
sudo /bin/bash '/var/www/vhosts/auftrag4works.de/demo.auftrag4works.de/update-a4w-linux.sh' --yes \
'/var/www/vhosts/auftrag4works.de/demo.auftrag4works.de/a4w-data/Updates/A4W-Auftrag4Works-Linux-Server-0.1.1.30.zip'
```

## Diagnose

```bash
sudo /bin/bash '/var/www/vhosts/auftrag4works.de/demo.auftrag4works.de/update-a4w-linux.sh' --status \
'/var/www/vhosts/auftrag4works.de/demo.auftrag4works.de'

journalctl -u a4w -n 100 --no-pager
```

## Was das Skript macht

- erkennt Dienstbenutzer und Gruppe aus `a4w.service`, sonst aus Dateirechten
- entpackt ZIP mit normalisierten Pfaden, auch wenn Windows-Backslashes im ZIP sind
- sucht automatisch die Payload-Wurzel mit der startbaren DLL
- sichert aktuelle Programmdateien nach `/var/backups/a4w`
- schützt `a4w-data`, `a4w-logs`, `App_Data`, `data`, `wwwroot/uploads` und `appsettings*.json`
- kopiert Programmdateien per `rsync`
- prüft, ob die Ziel-DLL der Paket-DLL entspricht
- erkennt unveränderte Pakete vor dem Dienststopp und lässt den Dienst dann laufen
- koppelt Web-gestartete Updates über `systemd-run` als eigenen Job aus, damit der Updateprozess beim Stoppen von `a4w` nicht mit beendet wird
- startet `systemd`-Dienst `a4w` neu
- schreibt ein Update-Log nach `/var/backups/a4w/update-*.log`

## Wichtig

Für Linux sollte das Manifest auf `A4W-Auftrag4Works-Linux-Server-<version>.zip` zeigen, nicht auf das Windows-Updatepaket.

## Automatische Updates aus der Web-App

Wenn automatische Updates aus der Web-Oberfläche gewünscht sind, sollte der Installer den root-eigenen Helper `/usr/local/sbin/a4w-update` einrichten. Dann reicht ein enger sudoers-Eintrag:

```sudoers
www-data ALL=(root) NOPASSWD: /usr/local/sbin/a4w-update --yes *
```

Ein sudoers-Eintrag direkt auf ein Skript im Web-Verzeichnis ist weniger sicher, weil dieses Verzeichnis dem Dienstbenutzer gehören kann.
