Jede Maschine fuehrt automatisch folgende Prozesse aus:
| Prozess | Zeitpunkt | Was passiert |
|---|---|---|
| Auto-Update | Taeglich 03:00 | Pulled neueste Config + Pakete von GitHub, rebuild, reboot bei Bedarf |
| Nix Garbage Collection | Woechentlich | Loescht unbenutzte Pakete aelter als 7 Tage |
| Docker Auto-Prune | Woechentlich | Entfernt unbenutzte Docker Images aelter als 7 Tage |
| Restic Backup | Taeglich (wenn aktiviert) | Sichert /opt, /var/lib, /home auf Backup-Server |
| Chrony NTP | Permanent | Zeitsynchronisation mit time.bauer-group.com |
| Fail2ban | Permanent | Blockiert SSH Brute-Force (5 Versuche → 1h Ban) |
| Prozess | Zeitpunkt | Was passiert |
|---|---|---|
| 🧹 CI | Bei Push/PR auf main | Linting (deadnix) |
| 🎨 Format | Manuell | Formatiert alle .nix Dateien |
| 🔄 Flake Update | Sonntag 02:00 UTC | Erstellt PR mit aktualisierten Paketversionen |
| 🚀 Release | Bei Push auf main | Semantic Versioning + Changelog |
| 📢 Teams | Bei Events | Benachrichtigungen an Microsoft Teams |
03:00 Maschine pulled github:bauer-group/IAC-NixOS (main branch)
│
├─ Keine Aenderungen? → Nichts passiert
│
└─ Aenderungen gefunden?
│
├─ nixos-rebuild switch --flake ... --impure
│
├─ Kernel/systemd geaendert?
│ └─ JA → Reboot im Fenster 03:00-03:30
│
└─ Nur Pakete/Config?
└─ Kein Reboot noetig, sofort aktiv
Auto-Update ist standardmaessig aktiviert fuer alle Maschinen. In /etc/nixos/params.nix:
bauergroup.params.autoUpdate = {
enable = true; # Default: true
flake = "github:bauer-group/IAC-NixOS"; # Quelle
schedule = "03:00"; # Taeglich um 03:00
allowReboot = true; # Auto-Reboot erlaubt
rebootWindowStart = "03:00"; # Fruehester Reboot
rebootWindowEnd = "03:30"; # Spaetester Reboot
};bauergroup.params.autoUpdate.enable = false;- NixOS Pakete — Sicherheitsupdates, Bugfixes aus dem nixos-25.11 Channel
- Repo-Aenderungen — Neue Module, geaenderte Templates, Konfigurationsaenderungen
- Flake Inputs — Wenn jemand
nix flake updatecommittet (nixpkgs, home-manager, etc.)
# Das passiert automatisch — kein manueller Eingriff noetig:
# 1. systemd Timer triggert um 03:00
# 2. nixos-rebuild switch --flake github:bauer-group/IAC-NixOS --impure
# 3. /etc/nixos/params.nix wird gelesen (maschinenspezifische Werte)
# 4. System wird neu gebaut und aktiviert
# 5. Reboot nur wenn Kernel/systemd sich geaendert haben# Status des Auto-Update Timers
systemctl status nixos-upgrade.timer
# Letzte Update-Logs
journalctl -u nixos-upgrade.service -n 50
# Naechster geplanter Run
systemctl list-timers | grep nixos-upgrade# Sofort updaten (nicht auf Timer warten)
sudo systemctl start nixos-upgrade.service
# Oder manuell mit vollem Output
sudo nixos-rebuild switch --flake github:bauer-group/IAC-NixOS --impureAlte Pakete und NixOS-Generationen werden automatisch bereinigt.
# Konfiguriert in modules/baseline/nix.nix:
# nix.gc.automatic = true
# nix.gc.dates = "weekly"
# nix.gc.options = "--delete-older-than 7d"
# Manuell ausfuehren
sudo nix-collect-garbage -d
# Speicherverbrauch pruefen
du -sh /nix/storeUnbenutzte Docker Images und Container werden woechentlich bereinigt.
# Konfiguriert in modules/services/docker.nix:
# autoPrune.enable = true
# autoPrune.dates = "weekly"
# autoPrune.flags = ["--all" "--filter" "until=168h"]
# Status pruefen
systemctl list-timers | grep docker-prune
# Manuell ausfuehren
sudo docker system prune -a --filter "until=168h"Nur aktiv wenn in params.nix konfiguriert:
bauergroup.params.server.backup = {
enable = true;
repository = "sftp:backup@storage:/backups/hostname";
passwordFile = /run/agenix/restic-password;
};# Status pruefen
systemctl status restic-backups-system.timer
# Letzte Backup-Logs
journalctl -u restic-backups-system.service -n 50
# Snapshots anzeigen
sudo restic -r sftp:backup@storage:/backups/hostname snapshots
# Manuelles Backup
sudo systemctl start restic-backups-system.serviceAlle Maschinen synchronisieren ueber time.bauer-group.com mit de.pool.ntp.org als Fallback.
# Status pruefen
chronyc tracking
# Quellen anzeigen
chronyc sources -v
# Zeitdifferenz
chronyc makestep # Erzwingt sofortige KorrekturAuf Servern und Kiosks laeuft standardmaessig der Prometheus Node Exporter (Port 9100).
# Status pruefen
systemctl status prometheus-node-exporter
# Metriken abrufen
curl -s http://localhost:9100/metrics | head -20SSH Brute-Force-Schutz auf Servern und Kiosks.
# Status und gebannte IPs
sudo fail2ban-client status sshd
# IP manuell entsperren
sudo fail2ban-client set sshd unbanip 1.2.3.4
# Logs
journalctl -u fail2ban.service -n 50Config-Aenderungen werden sofort deployed (naechster 03:00 Zyklus). Aber Paketversionen (nixpkgs, home-manager, etc.) sind im flake.lock gepinnt und aendern sich erst nach nix flake update.
Der 🔄 Flake Update Workflow automatisiert das:
Sonntag 02:00 UTC
│
├─ nix flake update (aktualisiert flake.lock)
│
├─ Keine Aenderungen? → Nichts passiert
│
└─ Neue Versionen?
│
└─ Erstellt Pull Request "🔄 Weekly Flake Update"
mit Changelog der aktualisierten Inputs
- Review moeglich — bei Breaking Changes kann man den PR ablehnen
- CI laeuft — Linting wird geprueft bevor gemergt wird
- Rollback einfach — PR revert statt flake.lock manuell zuruecksetzen
GitHub Actions → 🔄 Flake Update → Run workflow
| Input | Channel | Was aendert sich |
|---|---|---|
| nixpkgs | nixos-25.11 | Sicherheitspatches, Bugfixes, Paketversionen |
| nixpkgs-unstable | nixos-unstable | Bleeding-edge Pakete (nur via pkgs.unstable.*) |
| home-manager | release-25.11 | User-Config Module |
| agenix | latest | Secrets Management |
| disko | latest | Disk Partitioning |
| colmena | latest | Fleet Deployment |
| treefmt-nix | latest | Code Formatter |
| git-hooks-nix | latest | Pre-Commit Hooks |
Sonntag 02:00 🔄 Flake Update erstellt PR mit neuen Paketversionen
Montag Entwickler reviewt + merged PR (oder auto-merge)
Dienstag 03:00 Alle Maschinen rebuilden mit neuen Paketen
Config-Aenderungen sind schneller:
Jederzeit Entwickler pusht Config-Aenderung auf main
Naechste 03:00 Alle Maschinen rebuilden automatisch
Fuer dringende Aenderungen — nicht auf Timer warten:
# Einzelne Maschine sofort updaten
ssh root@MACHINE "systemctl start nixos-upgrade.service"
# Oder direkt
nixos-rebuild switch --flake github:bauer-group/IAC-NixOS \
--target-host root@MACHINE --impure