GNAI-007: Ansible Rolle zum Installieren von Podman hinzugefügt.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
Dokumentation für die Infrastruktur eines privaten Homelabs mit öffentlich erreichbaren Webdiensten, einem WireGuard-Zugang und einem dedizierten KI-Server. Dieses Repository hält Architekturentscheidungen, den belegten Betriebsstand und Verfahren für Einrichtung, Betrieb und Sicherheitsabnahme fest.
|
||||
|
||||
> **Projektstand: 19.09.2026.** Die Dokumentationsrevisionen sind zusammengeführt. Mehrere Sicherheitsmaßnahmen und technische Abnahmen stehen noch aus. Der KI-Server ist derzeit ein frisch eingerichtetes Basissystem; sein LLM-Anwendungsstack soll in einem späteren Sprint mit Ansible installiert werden.
|
||||
> **Projektstand: 20.09.2026.** Die Dokumentationsrevisionen sind zusammengeführt. Mehrere Sicherheitsmaßnahmen und technische Endabnahmen stehen noch aus. Auf dem KI-Server sind die gemeinsame Host-Baseline und Podman eingerichtet; der LLM-Anwendungsstack ist noch nicht installiert.
|
||||
|
||||
## Überblick
|
||||
|
||||
@@ -26,7 +26,7 @@ Die drei vorgesehenen VPN-Netzwerkrollen sind **Familie** (gesamtes Heimnetz), *
|
||||
|
||||
| Bereich | Belegter Stand | Nächster Nachweis oder Schritt |
|
||||
| --- | --- | --- |
|
||||
| KI-Server | Debian-Basissystem, lesender Preflight, verifizierter `ansible-deploy`-Account und idempotent angewendete minimale Host-Baseline | Podman-Runtime als nächste getrennte Rolle planen und kontrolliert abnehmen |
|
||||
| KI-Server | Debian-Basissystem, verifizierter Deployment-Zugang, minimale Host-Baseline und Podman 5.4.2 mit geprüftem Quadlet-Generator | Ausführungsmodell und Service-Accounts für Production und Testing festlegen; danach GPU-Laufzeit prüfen |
|
||||
| VPN | wg-easy v15.4.0 auf CT 105 aktiv; ein externer Laptop-Teiltest liegt vor | Rollenrechte serverseitig umsetzen und mit erlaubten sowie gesperrten Zielen testen |
|
||||
| Reverse Proxy | NPM auf CT 103 dokumentiert; Fail2Ban laut Betreiber fest gepinnt und wieder in Betrieb | Effektive Jails, Sperren und Wiederanlauf prüfen |
|
||||
| Identität | Keycloak/OIDC laut Betreiber produktiv für Vaultwarden | Öffentlich erreichbare Keycloak-Administration sperren und den OIDC-Login erneut prüfen |
|
||||
@@ -47,11 +47,11 @@ Der [Dokumentationsindex](docs/GNAI-000-DOC_Index.md) enthält die datierten Que
|
||||
| [Windows 11](docs/GNAI-006-SEC_VPN_Clients_Windows11.md) und [Linux](docs/GNAI-006-SEC_VPN_Clients_Linux.md) | Einrichtung und Nutzung auf Endgeräten |
|
||||
| [WireGuard-Implementation-Log](docs/GNAI-006-SEC_VPN_Implementation-Log.md) | Historie, Tests und Korrekturen früherer Befunde |
|
||||
| [Ansible-Deployment-Planung](docs/GNAI-007-PLAN_Ansible-Deployment.md) | nicht finaler Arbeitsentwurf zur reproduzierbaren Bereitstellung, Gitea-Integration und geplanten Folgedokumentation |
|
||||
| [Ansible-Control-Projekt](ansible/README.md) | lokale Einrichtung, lesender Server-Preflight, Deployment-Account und gemeinsame Host-Baseline |
|
||||
| [Ansible-Control-Projekt](ansible/README.md) | lokale Einrichtung, Preflight, Deployment-Account, Host-Baseline und Podman-Runtime |
|
||||
|
||||
## Arbeiten mit dem Repository
|
||||
|
||||
Dieses Repository enthält Dokumentation und ein Ansible-Control-Projekt. Es prüft Inventar, SSH-Zugang, Hostidentität, Betriebssystem und die dokumentierten GPUs. Eine erste gemeinsame Rolle verwaltet ausschließlich die Konfigurations- und Datenwurzeln für Production und Testing; der KI-Anwendungsstack ist noch nicht bereitgestellt. Vor einer Infrastrukturänderung den Ist-Stand am betroffenen Host prüfen, die passende Fachanleitung lesen und die dort genannten Abnahmeschritte dokumentieren.
|
||||
Dieses Repository enthält Dokumentation und ein Ansible-Control-Projekt. Es prüft Inventar, SSH-Zugang, Hostidentität, Betriebssystem und die dokumentierten GPUs. Gemeinsame Rollen verwalten die Konfigurations- und Datenwurzeln sowie Podman und Quadlet. Images, Container und der KI-Anwendungsstack sind noch nicht bereitgestellt. Vor einer Infrastrukturänderung den Ist-Stand am betroffenen Host prüfen, die passende Fachanleitung lesen und die dort genannten Abnahmeschritte dokumentieren.
|
||||
|
||||
WireGuard-Profile enthalten private Schlüssel. Sie gehören nicht in Git, Ausgaben oder freigegebene Dokumente. Das lokale Verzeichnis `docs/GNAI-006-profiles/` schließt Profil-Dateien über eine eigene `.gitignore` aus; es ist kein Verteiler- oder Backup-Ort für Zugangsdaten.
|
||||
|
||||
|
||||
@@ -138,3 +138,16 @@ inventory and supply the private deployment key outside the repository:
|
||||
|
||||
Run the final command a second time. The second recap must report `changed=0`
|
||||
and `failed=0`; otherwise the role has not demonstrated convergence.
|
||||
|
||||
## Podman runtime
|
||||
|
||||
The shared host play also installs the Podman runtime from Debian 13. The role
|
||||
requires systemd and cgroup v2, prepares `/etc/containers/systemd`, verifies the
|
||||
overlay storage driver and exercises the installed Quadlet generator without
|
||||
creating a workload.
|
||||
|
||||
The role explicitly keeps the Podman API socket and automatic image-update
|
||||
timer disabled. It pulls no image and does not yet choose rootful or rootless
|
||||
execution for the two environments. Apply and check it through the same
|
||||
`playbooks/host.yml` commands shown above. The first run may install packages;
|
||||
an immediate second run must report `changed=0`.
|
||||
|
||||
@@ -10,3 +10,4 @@
|
||||
|
||||
roles:
|
||||
- role: host_baseline
|
||||
- role: podman_runtime
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# Podman runtime
|
||||
|
||||
The `podman_runtime` role installs and verifies the shared container runtime on
|
||||
`ghostnet-ki`.
|
||||
|
||||
The initial scope is intentionally limited:
|
||||
|
||||
- install Podman from Debian 13 together with DNS and rootless-network helpers;
|
||||
- require systemd and cgroup v2;
|
||||
- create `/etc/containers/systemd` for future system Quadlets;
|
||||
- keep the Podman API socket and automatic image-update timer disabled;
|
||||
- verify Podman version, cgroup mode, the overlay storage driver and the
|
||||
executable Quadlet generator; and
|
||||
- run the Quadlet generator in dry-run mode without defining a workload.
|
||||
|
||||
The role does not pull images or create Production and Testing containers. It
|
||||
also does not yet
|
||||
choose between rootful system Quadlets and separate rootless service accounts.
|
||||
That decision belongs to the environment design because it affects GPU access,
|
||||
filesystem ownership and deployment privileges.
|
||||
@@ -0,0 +1,15 @@
|
||||
---
|
||||
podman_runtime_packages:
|
||||
- podman
|
||||
- aardvark-dns
|
||||
- passt
|
||||
- slirp4netns
|
||||
- uidmap
|
||||
|
||||
podman_runtime_minimum_major_version: 5
|
||||
podman_runtime_quadlet_directory: /etc/containers/systemd
|
||||
podman_runtime_generator_path: /usr/lib/systemd/system-generators/podman-system-generator
|
||||
|
||||
podman_runtime_disabled_units:
|
||||
- podman.socket
|
||||
- podman-auto-update.timer
|
||||
@@ -0,0 +1,126 @@
|
||||
---
|
||||
- name: Verify the supported operating system and init system
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- ansible_facts["distribution"] == "Debian"
|
||||
- ansible_facts["distribution_major_version"] == "13"
|
||||
- ansible_facts["service_mgr"] == "systemd"
|
||||
fail_msg: >-
|
||||
The Podman runtime role currently supports only Debian 13 with systemd.
|
||||
|
||||
- name: Read the host cgroup filesystem type
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- /usr/bin/stat
|
||||
- -fc
|
||||
- "%T"
|
||||
- /sys/fs/cgroup
|
||||
check_mode: false
|
||||
changed_when: false
|
||||
register: podman_runtime_cgroup_filesystem
|
||||
|
||||
- name: Require cgroup v2 before installing Podman
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- podman_runtime_cgroup_filesystem.stdout == "cgroup2fs"
|
||||
fail_msg: >-
|
||||
Podman Quadlet requires cgroup v2, but /sys/fs/cgroup is not cgroup2fs.
|
||||
|
||||
- name: Install the Podman runtime and rootless networking prerequisites
|
||||
ansible.builtin.apt:
|
||||
name: "{{ podman_runtime_packages }}"
|
||||
state: present
|
||||
update_cache: true
|
||||
cache_valid_time: 3600
|
||||
install_recommends: false
|
||||
|
||||
- name: Create the system Quadlet directory
|
||||
ansible.builtin.file:
|
||||
path: "{{ podman_runtime_quadlet_directory }}"
|
||||
state: directory
|
||||
owner: root
|
||||
group: root
|
||||
mode: "0755"
|
||||
|
||||
- name: Keep the Podman API and automatic image updates disabled
|
||||
ansible.builtin.systemd_service:
|
||||
name: "{{ item }}"
|
||||
enabled: false
|
||||
state: stopped
|
||||
loop: "{{ podman_runtime_disabled_units }}"
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Inspect the installed Quadlet generator
|
||||
ansible.builtin.stat:
|
||||
path: "{{ podman_runtime_generator_path }}"
|
||||
follow: true
|
||||
register: podman_runtime_generator
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Verify the installed Quadlet generator
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- podman_runtime_generator.stat.exists
|
||||
- podman_runtime_generator.stat.isreg
|
||||
- podman_runtime_generator.stat.executable
|
||||
fail_msg: The Podman system generator is missing or not executable.
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Read Podman runtime information
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- /usr/bin/podman
|
||||
- info
|
||||
- --format=json
|
||||
changed_when: false
|
||||
register: podman_runtime_info_command
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Read the installed Podman version
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- /usr/bin/podman
|
||||
- version
|
||||
- --format=json
|
||||
changed_when: false
|
||||
register: podman_runtime_version_command
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Parse Podman runtime information
|
||||
ansible.builtin.set_fact:
|
||||
podman_runtime_info: "{{ podman_runtime_info_command.stdout | from_json }}"
|
||||
podman_runtime_version: "{{ podman_runtime_version_command.stdout | from_json }}"
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Verify the Podman runtime
|
||||
ansible.builtin.assert:
|
||||
that:
|
||||
- >-
|
||||
podman_runtime_version["Client"]["Version"].split(".")[0] | int >=
|
||||
podman_runtime_minimum_major_version | int
|
||||
- podman_runtime_info["host"]["cgroupVersion"] == "v2"
|
||||
- podman_runtime_info["store"]["graphDriverName"] == "overlay"
|
||||
fail_msg: >-
|
||||
Podman is installed, but its version, cgroup mode or storage driver does
|
||||
not match the declared runtime baseline.
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Exercise the Quadlet generator without defining a workload
|
||||
ansible.builtin.command:
|
||||
argv:
|
||||
- "{{ podman_runtime_generator_path }}"
|
||||
- --dryrun
|
||||
environment:
|
||||
QUADLET_UNIT_DIRS: "{{ podman_runtime_quadlet_directory }}"
|
||||
changed_when: false
|
||||
when: not ansible_check_mode
|
||||
|
||||
- name: Report the verified Podman runtime
|
||||
ansible.builtin.debug:
|
||||
msg:
|
||||
version: "{{ podman_runtime_version['Client']['Version'] }}"
|
||||
cgroup_version: "{{ podman_runtime_info['host']['cgroupVersion'] }}"
|
||||
storage_driver: "{{ podman_runtime_info['store']['graphDriverName'] }}"
|
||||
quadlet_generator: "{{ podman_runtime_generator_path }}"
|
||||
disabled_units: "{{ podman_runtime_disabled_units }}"
|
||||
when: not ansible_check_mode
|
||||
@@ -1,6 +1,6 @@
|
||||
# Ghostnet.AI – Dokumentationsindex und Projektstand
|
||||
|
||||
**Stand:** 2026-09-19
|
||||
**Stand:** 2026-09-20
|
||||
**Status:** Revisionen zusammengeführt; Sicherheitsumsetzung und technische Endabnahme offen
|
||||
|
||||
## 1. Dokumente und Zielgruppen
|
||||
@@ -18,7 +18,7 @@
|
||||
| [GNAI-006-SEC_VPN_Clients_Linux.md](GNAI-006-SEC_VPN_Clients_Linux.md) | Debian, Arch/CachyOS, Fedora/Kinoite; Junior IT |
|
||||
| [GNAI-006-SEC_VPN_Implementation-Log.md](GNAI-006-SEC_VPN_Implementation-Log.md) | historische v14/v15-Umsetzung und Evidenzkorrekturen; Intermediate IT |
|
||||
| [GNAI-007-PLAN_Ansible-Deployment.md](GNAI-007-PLAN_Ansible-Deployment.md) | nicht finaler Arbeitsentwurf zum Ansible-/Gitea-Deployment und zur geplanten Folgedokumentation; Infrastrukturadministratoren und Mitwirkende |
|
||||
| [Ansible-Control-Projekt](../ansible/README.md) | Control-Node, Preflight, Deployment-Account und gemeinsame Host-Baseline; Intermediate IT |
|
||||
| [Ansible-Control-Projekt](../ansible/README.md) | Control-Node, Preflight, Deployment-Account, Host-Baseline und Podman-Runtime; Intermediate IT |
|
||||
|
||||
## 2. Verbindliche, bestätigte Entscheidungen
|
||||
|
||||
@@ -32,9 +32,9 @@ Der KI-Server heißt laut lesendem SSH-Abgleich vom 18.09.2026 `ghostnet-ki`; di
|
||||
|
||||
Die getrennten Schlüsselzugänge für `ghost` und `ghost-agent` wurden am 19.09.2026 erfolgreich getestet. Der persönliche Login wurde vom Betreiber interaktiv bestätigt; der Agentenlogin wurde technisch gegen Benutzername und Hostname geprüft.
|
||||
|
||||
Der KI-Server ist laut Betreiber frisch eingerichtet. Die LLM-Anwendungen sollen erst in einem späteren Sprint mit Ansible installiert werden. Bis dahin beschreiben GNAI-003 und GNAI-004 für diesen Host ein Zielbild; der lesende SSH-Abgleich betraf nur Basisbetrieb und Zugänge.
|
||||
Der KI-Server wurde als frisches Debian-Basissystem begonnen. Inzwischen sind die dokumentierten Ansible-Zugänge, die minimale Host-Baseline und Podman eingerichtet. Die LLM-Anwendungen sind weiterhin nicht installiert; GNAI-003 und GNAI-004 beschreiben für sie ein Zielbild.
|
||||
|
||||
Der [Ansible-Deployment-Entwurf](GNAI-007-PLAN_Ansible-Deployment.md) persistiert den Planungsstand vom 19.09.2026. Er ist ausdrücklich keine verbindliche Spezifikation und kein Nachweis einer eingerichteten Deploymentkette. Die dort genannten Runner-, Account-, Freigabe- und Secret-Verfahren sind bis zu ihrer Prüfung und formalen Übernahme vorläufig.
|
||||
Der [Ansible-Deployment-Entwurf](GNAI-007-PLAN_Ansible-Deployment.md) persistiert den seit dem 19.09.2026 fortgeschriebenen Planungs- und Implementierungsstand. Er ist ausdrücklich keine verbindliche Spezifikation und kein Nachweis einer vollständig eingerichteten Deploymentkette. Die dort genannten Runner-, Freigabe- und Secret-Verfahren sind bis zu ihrer Prüfung und formalen Übernahme vorläufig.
|
||||
|
||||
Das erste Ansible-Control-Projekt mit Testing-Inventar und lesendem Preflight wurde am 19.09.2026 angelegt. Der Live-Lauf über `ghost-agent` bestätigte Hostidentität, Debian 13.6, IPv4-Adresse, Python, CPU, RAM und zwei Navi-21-Geräte mit `changed=0`, `unreachable=0` und `failed=0`. Dieser Nachweis umfasst weder privilegierten Zugriff noch eine eingerichtete Production-/Testing-Laufzeitumgebung.
|
||||
|
||||
@@ -42,6 +42,8 @@ Der separate Ed25519-Schlüssel mit Fingerprint `SHA256:IKEInbIo8VVI1USg5+a3ypGK
|
||||
|
||||
Die erste schreibende Rolle `host_baseline` wurde am 19.09.2026 nach erfolgreichem Syntax- und Check-Modus-Lauf angewendet. Sie prüft Hostname, Debian-Hauptversion, Standard-IPv4 sowie mindestens 100 GiB freien Speicher und verwaltet ausschließlich `/etc/ghostnet-ai/{production,testing}` und `/var/lib/ghostnet-ai/{production,testing,shared}` mit Root-Eigentum. Der erste reale Lauf meldete `ok=6 changed=1 unreachable=0 failed=0`; der unmittelbar folgende identische Lauf belegte Idempotenz mit `ok=6 changed=0 unreachable=0 failed=0`. Pakete, Dienste und Anwendungen wurden dabei nicht verändert.
|
||||
|
||||
Die Rolle `podman_runtime` wurde am 20.09.2026 angewendet. Sie installierte Podman 5.4.2 aus Debian 13 einschließlich expliziter DNS- und rootless Netzwerkvoraussetzungen, prüfte systemd, cgroup v2, Overlay-Storage und den Quadlet-Generator und legte `/etc/containers/systemd` an. `podman.socket` und `podman-auto-update.timer` werden deaktiviert und gestoppt gehalten. Der abschließende Gesamtlauf meldete `ok=20 changed=0 unreachable=0 failed=0`; eine getrennte Prüfung bestätigte leere Image- und Containerlisten sowie beide Units als `disabled` und `inactive`.
|
||||
|
||||
## 3. Sicherheitsbefunde mit Priorität
|
||||
|
||||
| Befund | dokumentiertes Verfahren / Status |
|
||||
@@ -75,4 +77,6 @@ Beim anschließenden Bootstrap wurden Benutzer, Home-/SSH-Verzeichnisse, `author
|
||||
|
||||
Für die gemeinsame Host-Baseline bestätigte ein vorgelagerter Check-Modus genau sieben neu anzulegende Verzeichnisse und rund 1.677,7 GiB freien Platz auf `/`. Der anschließende reale Lauf legte die Verzeichniswurzeln an. Eine sofortige Wiederholung ergab `changed=0`; die Rolle konvergiert damit für ihren derzeitigen Umfang. Dieser Nachweis umfasst keine Paket-, Runtime-, GPU- oder Anwendungsinstallation.
|
||||
|
||||
Am 20.09.2026 sagte der Podman-Check-Modus 38 neue Debian-Pakete und das Quadlet-Verzeichnis voraus. Der reale Lauf installierte diese Pakete; seine erste Nachprüfung bewertete den Debian-Symlink des Quadlet-Generators irrtümlich nicht als reguläre Datei. Nach Korrektur der Ansible-`stat`-Prüfung auf das aufgelöste Ziel bestanden Podman 5.4.2, cgroup v2, Overlay-Storage und der Generator-Dry-Run. Der finale Gesamtlauf war mit `changed=0` idempotent. Es wurden weder Images geladen noch Container oder Anwendungsdienste angelegt.
|
||||
|
||||
Die WireGuard-Evidenz bleibt der Teiltest vom 12.09.2026: CachyOS-Laptop von WAN, Handshake, Ping auf Gateway/Proxmox und direkter IPv4-Internetpfad bestanden; KI-Server war ausgeschaltet. Neue Rollen, weitere Clientvarianten, Gateway-GUI-Zugriff, WAN-/IPv6-Isolation, Neustart und Restore sind noch nicht abgenommen. GNAI-006 ist erst nach Klärung der offenen Werte, Umsetzung und dokumentierter Abnahme technisch abgeschlossen.
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
|
||||
**Dokumenten-ID:** GNAI-007-PLAN
|
||||
**Titel:** Ansible-Deployment für den KI-Server – Planungsstand
|
||||
**Stand:** 2026-09-19
|
||||
**Stand:** 2026-09-20
|
||||
**Status:** Nicht finaler Arbeitsentwurf zur Persistierung des aktuellen Planungsstands
|
||||
**Referenzen:** [Projektstand](GNAI-000-DOC_Index.md), [Zielarchitektur](GNAI-003-INFRA_Architecture.md), [Zugriffskonzept](GNAI-004-SEC_Access-Control.md)
|
||||
|
||||
> **Abgrenzung:** Dieses Dokument hält die Ergebnisse der Planungssession vom
|
||||
> 19.09.2026 fest. Es ist weder eine freigegebene technische Spezifikation noch
|
||||
> **Abgrenzung:** Dieses Dokument hält die Ergebnisse der am 19.09.2026
|
||||
> begonnenen und am 20.09.2026 fortgeschriebenen Planungssession fest. Es ist
|
||||
> weder eine freigegebene technische Spezifikation noch
|
||||
> eine Installationsanleitung oder ein Nachweis über bereits umgesetzte
|
||||
> Komponenten. Entscheidungen, die noch geprüft oder bestätigt werden müssen,
|
||||
> sind ausdrücklich als vorläufig oder offen gekennzeichnet.
|
||||
@@ -25,6 +26,7 @@
|
||||
| 2026-09-19 | 0.5 | spektr / Codex | technischen Schlüssel sowie Bootstrap- und Prüfplaybook für `ansible-deploy` vorbereitet; Ausführung bleibt interaktiv offen |
|
||||
| 2026-09-19 | 0.6 | spektr / Codex | `ansible-deploy` auf dem KI-Server eingerichtet und SSH-/sudo-Zugriff unabhängig erfolgreich verifiziert |
|
||||
| 2026-09-19 | 0.7 | spektr / Codex | minimale gemeinsame Host-Baseline mit Schutzprüfungen und getrennten Verzeichniswurzeln implementiert, angewendet und auf Idempotenz geprüft |
|
||||
| 2026-09-20 | 0.8 | spektr / Codex | gemeinsame Podman-/Quadlet-Runtime implementiert, installiert und ohne Images oder Container verifiziert |
|
||||
|
||||
---
|
||||
|
||||
@@ -65,11 +67,11 @@ aktuellen Plan nicht zum privilegierten Deployment-Account erweitert werden.
|
||||
Das Repository enthält inzwischen ein minimales Ansible-Control-Projekt mit
|
||||
Testing-Inventar, einem ausschließlich lesenden Preflight sowie Bootstrap- und
|
||||
Prüfplaybooks für `ansible-deploy`. Der privilegierte Deployment-Account ist
|
||||
eingerichtet und verifiziert. Eine erste schreibende Rolle verwaltet die
|
||||
gemeinsamen Konfigurations- und Datenwurzeln des Hosts; Anwendungsrollen und ein
|
||||
Production-Inventar existieren noch nicht. Der Preflight selbst nahm keine
|
||||
Änderungen vor; Bootstrap und Host-Baseline blieben auf die nachfolgend
|
||||
dokumentierten Zugangs- und Verzeichniszustände begrenzt.
|
||||
eingerichtet und verifiziert. Schreibende Rollen verwalten die gemeinsamen
|
||||
Konfigurations- und Datenwurzeln sowie Podman und Quadlet. Anwendungsrollen und
|
||||
ein Production-Inventar existieren noch nicht. Der Preflight selbst nahm keine
|
||||
Änderungen vor; die bislang angewendeten Rollen bleiben auf die nachfolgend
|
||||
dokumentierten Zugangs-, Verzeichnis- und Runtime-Zustände begrenzt.
|
||||
|
||||
---
|
||||
|
||||
@@ -112,7 +114,7 @@ Planungsrichtung und noch nicht bestätigten Implementierungsdetails.
|
||||
|
||||
| Thema | Aktueller Planungsstand | Verbindlichkeit / Nachweis |
|
||||
| --- | --- | --- |
|
||||
| Konfigurationsmanagement | Ansible beschreibt Basissystem, Laufzeitumgebung, Dienste und Konfiguration | minimales Control-Projekt, lesender Preflight und angewendete erste `host_baseline` vorhanden; Runtime- und Anwendungsrollen fehlen noch |
|
||||
| Konfigurationsmanagement | Ansible beschreibt Basissystem, Laufzeitumgebung, Dienste und Konfiguration | Control-Projekt, Preflight, `host_baseline` und `podman_runtime` vorhanden und angewendet; GPU- und Anwendungsrollen fehlen noch |
|
||||
| Quell- und Freigabeverfahren | Änderungen über Gitea-Branches und Pull Requests; kein regulärer Direkt-Push auf `main` | vorgesehen; Branch-Schutz noch nicht geprüft oder eingerichtet |
|
||||
| CI | Pull Requests erhalten Lint-, YAML- und Ansible-Syntaxprüfungen ohne produktive Zugangsdaten | vorgesehen; Workflow noch nicht vorhanden |
|
||||
| Produktionsausführung | Gitea Actions startet Ansible über eine dedizierte Production-Berechtigungsstufe | bevorzugte Lösung; Gitea-Version, Runner-Trennung und Actions-Funktion noch zu prüfen |
|
||||
@@ -532,7 +534,8 @@ nicht als Nachweis einer erfolgreichen Einrichtung.
|
||||
|
||||
### Phase D – KI-Laufzeit
|
||||
|
||||
- Podman und systemd-Integration;
|
||||
- Podman- und Quadlet-Grundruntime eingerichtet und geprüft; konkretes
|
||||
rootful/rootless Ausführungsmodell noch festzulegen;
|
||||
- AMD-GPU-/ROCm- oder alternative Laufzeit nach technischer Prüfung;
|
||||
- `llama.cpp` und lokaler Funktionstest;
|
||||
- Wiederanlauf nach geplantem Reboot prüfen.
|
||||
@@ -611,6 +614,8 @@ Herstellerdokumentationen herangezogen:
|
||||
- [Ansible Playbooks](https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_intro.html)
|
||||
- [Ansible Check- und Diff-Modus](https://docs.ansible.com/projects/ansible/latest/playbook_guide/playbooks_checkmode.html)
|
||||
- [Ansible Vault](https://docs.ansible.com/projects/ansible/latest/vault_guide/vault.html)
|
||||
- [Debian 13 – Paket `podman`](https://packages.debian.org/trixie/podman)
|
||||
- [Podman – Quadlet und systemd](https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html)
|
||||
|
||||
Vor der Implementierung sind versionsspezifische Aussagen gegen die dann
|
||||
tatsächlich eingesetzten Gitea-, Runner- und Ansible-Versionen zu prüfen.
|
||||
@@ -689,21 +694,42 @@ Lauf endete mit `ok=6 changed=0 unreachable=0 failed=0` und belegt die
|
||||
Idempotenz des aktuellen Rollenumfangs. Es wurden keine Pakete installiert und
|
||||
keine Dienste, Container oder GPU-Komponenten verändert.
|
||||
|
||||
Am 20.09.2026 wurde `podman_runtime` in das gemeinsame Host-Playbook
|
||||
aufgenommen. Die Rolle installiert `podman`, `aardvark-dns`, `passt`,
|
||||
`slirp4netns` und `uidmap` ohne empfohlene Build- und Checkpoint-Pakete. Sie
|
||||
verlangt Debian 13, systemd und cgroup v2, verwaltet
|
||||
`/etc/containers/systemd`, prüft mindestens Podman-Hauptversion 5 sowie den
|
||||
Overlay-Storage und führt den Quadlet-Generator ohne Workload im Dry-Run aus.
|
||||
Der API-Socket und der automatische Image-Update-Timer bleiben explizit
|
||||
deaktiviert und gestoppt.
|
||||
|
||||
Der Check-Modus sagte 38 neue Pakete und das Quadlet-Verzeichnis voraus. Im
|
||||
ersten realen Lauf wurden die Pakete installiert; die anschließende
|
||||
Generatorprüfung schlug fehl, weil der Generator in Debian als Symlink
|
||||
bereitgestellt wird und die `stat`-Prüfung das Ziel zunächst nicht auflöste.
|
||||
Nach der Korrektur auf `follow: true` bestanden sämtliche Laufzeitprüfungen.
|
||||
Der finale Gesamtlauf endete mit
|
||||
`ok=20 changed=0 unreachable=0 failed=0`. Verifiziert wurden Podman 5.4.2,
|
||||
cgroup v2, der Storage-Treiber `overlay` und der ausführbare Quadlet-Generator.
|
||||
Eine getrennte Prüfung bestätigte außerdem leere Image- und Containerlisten
|
||||
sowie `podman.socket` und `podman-auto-update.timer` jeweils als `disabled` und
|
||||
`inactive`.
|
||||
|
||||
---
|
||||
|
||||
## 15. Abschlussgrenze dieses Entwurfs
|
||||
|
||||
Mit Version 0.7 sind der aktuelle Planungsstand, der ausdrücklich begrenzte
|
||||
Mit Version 0.8 sind der aktuelle Planungsstand, der ausdrücklich begrenzte
|
||||
Ansible-Preflight, der verifizierte Deployment-Account und die angewendete
|
||||
minimale Host-Baseline persistiert.
|
||||
minimale Host-Baseline sowie die Podman-/Quadlet-Grundruntime persistiert.
|
||||
Insbesondere wurden noch nicht:
|
||||
|
||||
- ein Gitea Runner angelegt,
|
||||
- Gitea Actions oder Schutzregeln konfiguriert,
|
||||
- Runtime- oder Anwendungsrollen, ein Production-Inventar oder ein Vault erstellt,
|
||||
- GPU- oder Anwendungsrollen, ein Production-Inventar oder ein Vault erstellt,
|
||||
- eine Production- oder Testing-Umgebung eingerichtet oder voneinander
|
||||
abgenommen,
|
||||
- Pakete oder Anwendungen auf dem KI-Server installiert,
|
||||
- GPU-Komponenten oder Anwendungen auf dem KI-Server installiert,
|
||||
- Backups oder Rollbacks praktisch getestet oder
|
||||
- die geplante Deploymentkette technisch abgenommen.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user