Betreiberentscheidung 31.10.2026 (GNAI-002 Abschnitt 6): Der KI-Host wird kohärent IPv4-only betrieben. host_baseline verwaltet /etc/sysctl.d/99-ghostnet-disable-ipv6.conf (all+default), wendet es bei Änderung an und verifiziert den Laufzeitwert. Anlass: hängender get_url- Download durch AAAA-Antworten ohne nutzbare IPv6-Route (Messungen im Dokument; Pi-hole filtert AAAA nicht, der Host nutzt Pi-hole nicht). model_store nach Live-Befunden: Swift-Repin auf Repository-Revision 98a6100 (alte Revision entfernt, Datei laut Herausgeber-SHA256SUMS unverändert; GNAI-010 v0.5) und Download über wget -4 mit expliziter SHA-256-Verifikation vor dem atomaren Move. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
204 lines
11 KiB
Markdown
204 lines
11 KiB
Markdown
# Ghostnet.AI-Host – Basisinstallation
|
||
|
||
**Dokumenten-ID:** GNAI-002-INFRA
|
||
**Titel:** Initialisierung und OS-Installation des KI-Hosts `10.0.0.90`
|
||
**Status:** Installationsanleitung mit lesendem Teilabgleich; vollständige Abnahme offen
|
||
**Referenzen:** -
|
||
|
||
---
|
||
|
||
## Änderungsverlauf
|
||
|
||
| Datum | Version | Autor | Beschreibung der Änderung |
|
||
| --- | --- | --- | --- |
|
||
| 2026-08-24 | 1.0 | spektr | Erstellung des Initial-Dokuments (Hardware & OS) |
|
||
| 2026-08-24 | 1.1 | spektr | Detaillierung der BIOS-ReBAR-Settings, Netinst-CLI-Schritte, Post-Installation & Abnahmekriterien hinzugefügt. |
|
||
| 2026-09-16 | 1.2 | spektr | Benutzer- und Netzwerkaufgaben nach GNAI-003 verlagert; ungesicherte Downloadpfade und Domainvorgabe entfernt. |
|
||
| 2026-09-18 | 1.3 | spektr | GPU-Abnahme auf nachweisbare Geräteerkennung begrenzt; Firmwarepaket präzisiert. |
|
||
| 2026-09-19 | 1.4 | spektr | Getrennte SSH-Zugänge für `ghost` und `ghost-agent` als erfolgreich getestet übernommen. |
|
||
| 2026-09-22 | 1.5 | Codex | In die hostbezogene Struktur `platform/ghostnet-ai/` verschoben und Geltungsbereich präzisiert. |
|
||
| 2026-10-31 | 1.6 | spektr / Mistral Vibe | Betreiberentscheidung IPv4-only: IPv6 wird auf dem Host über die `host_baseline`-Rolle systematisch deaktiviert (Abschnitt 6); Anlass war der hängende Modell-Download am 31.10.2026 durch den Halbdual-Stack-Zustand. |
|
||
|
||
---
|
||
|
||
## 1. Zweck und Geltungsbereich
|
||
|
||
Dieses Dokument beschreibt Hardware, BIOS und Debian-Installation des KI-Servers. Benutzer, statische Netzkonfiguration und SSH-Härtung werden in [GNAI-003](GNAI-003-INFRA_Users.md) eingerichtet. Die Schritte sind eine Anleitung, kein Nachweis ihrer Ausführung auf dem bestehenden Host.
|
||
|
||
---
|
||
|
||
## 2. Spezifikationen (Hardware-Konfiguration)
|
||
|
||
| Komponente | Spezifikation | Bemerkung |
|
||
| --- | --- | --- |
|
||
| **Gehäuse** | Silverstone SST-RM42-502 | Rackmount / Server-Chassis |
|
||
| **Mainboard** | ASRock Z790 PG Lightning | Socket LGA1700 |
|
||
| **CPU** | Intel Core i5-13600K | 14 Kerne (6P + 8E) |
|
||
| **CPU-Kühler** | Thermalright Peerless Assassin 120 Mini | - |
|
||
| **RAM** | Crucial Pro DDR5 RAM 64GB Kit (2x32GB) | Dimm Slot A2 & B2 |
|
||
| **PSU** | Corsair RM1200e | 1200W ATX 3.0 |
|
||
| **SSD** | 2 TB Samsung 970 EVO Plus | Primäre NVMe (Slot M2_1) |
|
||
| **GPU 1** | Sapphire Nitro+ AMD Radeon RX 6900 XT OC 16GB | PCIe Slot 1 (x16) |
|
||
| **GPU 2** | Sapphire Nitro+ AMD Radeon RX 6900 XT OC 16GB | PCIe Slot 2 (x8/x4 via PCH) |
|
||
|
||
### 2.1 BIOS-Konfiguration
|
||
|
||
Vor der Betriebssystem-Installation sind folgende Schritte im BIOS (Aufrufen via `DEL` oder `F2` beim Booten) durchzuführen:
|
||
|
||
1. **Firmware-Update (Instant Flash):**
|
||
* BIOS-Datei auf einen FAT32-formatierten USB-Stick entpacken.
|
||
* Im BIOS navigieren zu: `Tool` -> `Instant Flash`.
|
||
* BIOS-Version auf **`19.02`** (oder neuer) aktualisieren.
|
||
|
||
2. **RAM-Performance:**
|
||
* Navigieren zu: `OC Tweaker` -> `DRAM Configuration`.
|
||
* **Load XMP Setting:** auf **XMP Profile 1** stellen.
|
||
|
||
3. **Virtualisierung & PCI-Einstellungen (Wichtig für GPU/ROCm):**
|
||
* Navigieren zu: `Advanced` -> `CPU Configuration` -> **Intel Virtualization Technology** -> `Enabled`.
|
||
* Navigieren zu: `Advanced` -> `PCI Configuration`:
|
||
* **Above 4G Decoding:** `Enabled`
|
||
* **Re-Size BAR Support:** `Enabled`; tatsächliche GPU-Zuordnung nach der Installation prüfen. Aus der BIOS-Option allein folgt noch kein nachgewiesener ROCm-Leistungsgewinn.
|
||
|
||
---
|
||
|
||
## 3. Installation des Betriebssystems
|
||
|
||
### 3.1 Vorbereitung des Installationsmediums (am Admin-PC)
|
||
|
||
1. **Debian ISO herunterladen:** Die gewünschte Debian-Version und die passende `amd64`-Netinst-ISO auf [Debian CD Images](https://cdimage.debian.org/debian-cd/) auswählen. ISO und `SHA512SUMS` aus demselben Release-Verzeichnis herunterladen; Dateinamen nicht aus dieser Anleitung ableiten.
|
||
|
||
2. **Checksum verifizieren:**
|
||
```bash
|
||
sha512sum --ignore-missing -c SHA512SUMS
|
||
```
|
||
Erwartet wird eine `OK`-Zeile für die tatsächlich heruntergeladene ISO. Bei einem Fehler Download und Prüfsummenquelle kontrollieren.
|
||
|
||
3. **Bootfähigen USB-Stick erstellen:**
|
||
* [Ventoy](https://www.ventoy.net) auf dem USB-Stick installieren.
|
||
* Die heruntergeladene ISO-Datei direkt per Dateimanager auf die Ventoy-Partition kopieren.
|
||
|
||
---
|
||
|
||
### 3.2 Schritt-für-Schritt Installationsanleitung (Debian Netinst)
|
||
|
||
1. **Booten:**
|
||
* USB-Stick einstecken, System starten und per `F11` das Boot-Menü öffnen.
|
||
* USB-Stick auswählen -> Im Ventoy-Menü `debian-netinst.iso` wählen -> **Graphical Install** auswählen.
|
||
|
||
2. **Lokalisierung:**
|
||
* **Language:** `German - Deutsch`
|
||
* **Land/Territorium:** `Deutschland`
|
||
* **Tastaturlayout:** `Deutsch`
|
||
|
||
3. **Netzwerk & Hostname:**
|
||
* **Hostname:** `ghostnet-ki` (auf dem bestehenden KI-Server am 18.09.2026 per `hostnamectl` bestätigt).
|
||
* **Domain-Name:** Nur eine tatsächlich konfigurierte lokale Domain eintragen; andernfalls leer lassen. `ghostnet.ki` ist in dieser Dokumentation lediglich ein optionaler SSH-Alias.
|
||
* **Netzwerk:** Per DHCP konfigurieren lassen. *(Feste IP wird nach der Installation vergeben).*
|
||
|
||
4. **Benutzerverwaltung:**
|
||
* **Root-Passwort:** Starkes Passwort aus dem Passwort-Manager eintragen.
|
||
* **Neuer Benutzer:**
|
||
* Vollständiger Name: `Admin`
|
||
* Benutzername: vor der Installation festlegen. Der bestehende KI-Server verwendet `ghost` als initiales Administrationskonto; `admin` ist dort nicht vorhanden.
|
||
* Passwort: Sicheres Kennwort vergeben.
|
||
|
||
5. **Partitionierung (Manuell / Geführt):**
|
||
* Methode: `Geführt - gesamte Festplatte verwenden`.
|
||
* Disk auswählen: `Samsung SSD 970 EVO Plus 2TB`.
|
||
* Schema: `Alle Dateien auf eine Partition (für Anfänger empfohlen)`.
|
||
* **Wichtig:** Änderungen auf die Festplatte schreiben -> `Ja`.
|
||
|
||
6. **Paketmanager-Konfiguration:**
|
||
* Spiegelserver-Land: `Deutschland`
|
||
* `deb.debian.org` wählen.
|
||
* HTTP-Proxy: Leer lassen.
|
||
|
||
7. **Software-Auswahl (Software selection):**
|
||
* [_] Debian desktop environment *(ABWÄHLEN)*
|
||
* [_] GNOME / KDE / etc. *(ABWÄHLEN)*
|
||
* [x] **SSH server** *(AUSWÄHLEN)*
|
||
* [x] **standard system utilities** *(AUSWÄHLEN)*
|
||
|
||
8. **Bootloader (GRUB):**
|
||
* GRUB-Bootloader in den primären Laufwerksbereich installieren: `Ja`
|
||
* Gerät wählen: `/dev/nvme0n1` (Samsung SSD).
|
||
|
||
9. **Abschluss:**
|
||
* USB-Stick entfernen und auf `Weiter` klicken, um das System neu zu starten.
|
||
|
||
---
|
||
|
||
### 3.3 Grundlegende Werkzeuge und Firmware
|
||
|
||
Für die AMD-GPUs ist in Debian 13 das Paket [`firmware-amd-graphics`](https://packages.debian.org/trixie/firmware-amd-graphics) aus `non-free-firmware` vorgesehen. Das breitere Metapaket `firmware-linux-nonfree` zieht dieses Paket bereits als Abhängigkeit nach sich und wird für diesen Schritt nicht zusätzlich benötigt. Die folgende Anweisung gehört zu einer Neuinstallation oder zum späteren Ansible-Sprint, nicht zu diesem Dokumentationsabgleich:
|
||
|
||
```bash
|
||
# Vorher prüfen, ob die Debian-Paketquellen die Komponente non-free-firmware enthalten.
|
||
apt update
|
||
apt install -y curl wget git htop tmux pciutils firmware-amd-graphics
|
||
```
|
||
|
||
Für Sudo, Netzwerk und SSH mit [GNAI-003](GNAI-003-INFRA_Users.md) fortfahren. Vor Änderungen auf einem laufenden Host die dort dokumentierte Netzverwaltung prüfen.
|
||
|
||
---
|
||
|
||
## 4. Abnahmekriterien
|
||
|
||
Vor der Übergabe an das KI-Team (Phase 2) muss das System folgende Punkte bestehen:
|
||
|
||
* **RAM-Check:** `free -h` zeigt mindestens ~62 GB RAM an.
|
||
* **GPU-Erkennung:** `lspci -nn | grep -Ei 'vga|display|3d'` listet **zwei** AMD-Grafikgeräte auf. Das genaue Kartenmodell anhand des Hardwareinventars oder der Geräte selbst prüfen; die PCI-Familienkennung allein genügt dafür nicht.
|
||
* **Netzwerk:** Der Server ist nach GNAI-003 unter `10.0.0.90` erreichbar. Die getrennten SSH-Zugänge für `ghost` und `ghost-agent` wurden am 19.09.2026 erfolgreich getestet.
|
||
* **Storage:** `lsblk -f` zeigt die vorgesehene Partitionierung der 2-TB-SSD; `df -h /` zeigt die nutzbare Dateisystemgröße (in binären Einheiten kleiner als 2 TB).
|
||
* **Re-Size BAR:** BIOS-Einstellung und zugewiesene PCIe-BAR-Größen getrennt prüfen; ein bloßer `dmesg | grep -i BAR`-Treffer gilt nicht als Funktions- oder Leistungsnachweis.
|
||
|
||
---
|
||
|
||
## 5. Lesender Teilabgleich des bestehenden Hosts am 18.09.2026
|
||
|
||
Per SSH wurden Debian 13.6, Hostname `ghostnet-ki`, Intel Core i5-13600K, 62 GiB nutzbarer RAM und zwei AMD Navi-21-GPUs mit PCI-ID `1002:73bf` beobachtet. `lsblk` zeigt eine 1,8-TiB-NVMe mit EFI-, ext4-Root- und Swap-Partition; `df -h /` zeigte 1,8 TiB Dateisystemgröße. `lspci` bestätigt die Gerätefamilie, aber weder das genaue Kartenmodell noch ROCm-Funktion und ReBAR-Leistung. BIOS-Version, XMP, Firmwarestand und Restore wurden nicht geprüft.
|
||
|
||
---
|
||
|
||
## 6. Betreiberentscheidung: IPv6 auf dem Host deaktiviert (31.10.2026)
|
||
|
||
**Entscheidung (Betreiber, 31.10.2026):** Der KI-Host wird bewusst IPv4-only
|
||
betrieben. IPv6 wird über die `host_baseline`-Rolle systematisch deaktiviert
|
||
(`/etc/sysctl.d/99-ghostnet-disable-ipv6.conf` mit
|
||
`net.ipv6.conf.all.disable_ipv6 = 1` und
|
||
`net.ipv6.conf.default.disable_ipv6 = 1`).
|
||
|
||
**Anlass:** Während der ersten Modell-Downloads am 31.10.2026 hing der
|
||
Ansible-`get_url`-Download auf dem Host minutenlang ohne TCP-Verbindung und
|
||
ohne Datenträgeraktivität, obwohl dieselbe URL vom Host aus mit `wget -4` in
|
||
Sekunden erreichbar war. Messungen dazu:
|
||
|
||
| Prüfung | Ergebnis |
|
||
| --- | --- |
|
||
| Host-Netzwerk | nur link-lokales IPv6 auf `enp8s0`; keine globale Adresse, keine IPv6-Default-Route |
|
||
| Resolver des Hosts | Fritzbox `10.0.0.1` und `1.1.1.1` (der Host nutzt Pi-hole zu diesem Zeitpunkt nicht) |
|
||
| AAAA-Antworten | Fritzbox, 1.1.1.1 und Pi-hole `10.0.0.14` liefern alle AAAA-Records; AAAA wird nirgends gefiltert |
|
||
|
||
Programme mit IPv6-Präferenz (wie Pythons `urllib`) laufen bei dieser
|
||
Inkonsistenz aus AAAA-Antworten ohne nutzbare IPv6-Route in Timeouts oder
|
||
Hänger; die 302-Weiterleitung der Hugging-Face-Downloads zum
|
||
CloudFront-CDN traf genau darauf. Die Download-Rolle `model_store` erzwingt
|
||
daher zusätzlich IPv4 (`wget -4`) und verifiziert die SHA-256 explizit.
|
||
|
||
**Einordnung:** Die Entscheidung beendet diesen Halbdual-Stack-Zustand
|
||
zugunsten eines kohärenten IPv4-only-Betriebs. Sie erhält die dokumentierte
|
||
Sicherheitseigenschaft „keine IPv6-Exposition" (GNAI-007 Offenpunkt O7,
|
||
teilbestätigt am 31.10.2026) und entspricht dem bestehenden
|
||
LAN-Betriebsmodell. Eine echte Dual-Stack-Einführung (Fritzbox-Präfix,
|
||
Router Advertisements, Firewall-Regeln, neue Perimeter-Abnahme) bleibt ein
|
||
eigener Netzwerk-Sprint und ist für den KI-Stack nicht erforderlich. Ein
|
||
optionales Folgeziel ist die Umstellung des Host-Resolvers auf Pi-hole, um
|
||
Split-DNS konsistent auch auf dem Host zu nutzen; das ist ein separater
|
||
kleiner Schritt und kein Bestandteil dieser Entscheidung.
|
||
|
||
**Umsetzung:** `llm-server/host/ansible/roles/host_baseline` verwaltet die
|
||
Drop-in-Datei, wendet sie bei Änderung über `sysctl --system` an und
|
||
verifiziert den Laufzeitwert `net.ipv6.conf.all.disable_ipv6 = 1`. Ein
|
||
zweiter Lauf muss `changed=0` melden.
|