Commit 7aa3e9

2026-05-28 15:40:46 Claude Code: 2026-05-28: Wiki-Aktualisierung - neue CTs, Versionen, Dienste
container-und-vms.md ..
@@ 3,7 3,7 @@
> [!TIP]
> Diese Seite ist als schnelle Betriebsuebersicht gedacht. Mit der Datentabelle kannst du nach Status, Rolle oder Namen suchen.
- ## Aktiver Stand laut Proxmox
+ ## Aktiver Stand laut Proxmox (2026-05-28)
| Typ | ID | Name | Status | IP / Zugriff |
|---|---:|---|---|---|
@@ 30,7 30,11 @@
| CT | 124 | homarr | laeuft | `192.168.178.94` / `ls-cloud.biz` |
| CT | 125 | norish | laeuft | `192.168.178.96` / `norish.ls-cloud.biz` |
| CT | 126 | tdarr | laeuft | `192.168.178.73` / `transcode.ls-cloud.biz` / [[ct-126-tdarr]] |
+ | CT | 127 | security-monitoring | laeuft | intern / Grafana 13.0.1 + Loki + Promtail / [[ct-127-monitoring]] |
| CT | 128 | bot | laeuft | `192.168.178.97` / `bot.ls-cloud.biz` / [[ct-128-bot]] |
+ | CT | 129 | burningnotes | laeuft | `192.168.178.98` / `note.ls-cloud.biz` |
+ | CT | 130 | lstools | laeuft | `192.168.178.99` / `sh0rt.biz` + `priv.sh0rt.biz` |
+ | VM | 200 | Windows11Pro | laeuft | `192.168.178.71` / RDP in Termix |
{{DataTable}}
@@ 40,6 44,7 @@
- **CT 120 `dashboard`** abgeloest durch **CT 124 `homarr`** hinter `ls-cloud.biz`.
- **CT 119 `azeroth`** ist gestoppt; Caddy-Eintrag `panel.ls-cloud.biz` existiert noch.
- **CT 114 `games`** und **CT 107 `monitoring`** sind bewusst gestoppt.
+ - **CT 110** war frueher Pi-hole/DNS, jetzt Termix. DNS laeuft auf **CT 117**.
> [!WARNING]
- > Bewusst gestoppt heisst hier **nicht** automatisch defekt. In deinem Setup ist das haeufig schlicht Ressourcenhygiene. Relevant ist nur, ob eine oeffentliche Domain trotz absichtlich gestopptem Backend weiter aktiv bleiben soll.
+ > Bewusst gestoppt heisst hier **nicht** automatisch defekt. Relevant ist nur, ob eine oeffentliche Domain trotz absichtlich gestopptem Backend weiter aktiv bleiben soll.
ct-100-guacamole.md .. /dev/null
@@ 1,23 0,0 @@
- # CT 100 – Guacamole
-
- > [!NOTE]
- > CT 100 ist der Guacamole-/Remote-Access-Kontext hinter `live.ls-cloud.biz`.
-
- ## Basisdaten
-
- - **CT-ID:** `100`
- - **Name:** `guacamole`
- - **Öffentliche URL:** `https://live.ls-cloud.biz`
-
- ## Einordnung
-
- - aktuell oft nur situativ relevant
- - wenn CT 100 gestoppt ist, erklärt das öffentliche Fehlerbilder meist direkt
-
- ## Prüfung
-
- ```bash
- pct status 100
- curl -I http://192.168.178.54:8080
- curl -k -I https://live.ls-cloud.biz
- ```
ct-105-downloads.md ..
@@ 1,33 1,94 @@
# CT 105 – Downloads
> [!NOTE]
- > CT 105 bündelt Download-Dienste wie qBittorrent, SABnzbd und Prowlarr.
+ > CT 105 bündelt den gesamten Download-Stack: Indexer, Download-Clients und Medien-Manager.
## Basisdaten
- **CT-ID:** `105`
- **Name:** `downloads`
- **IP:** `192.168.178.63`
+ - **Modus:** Privileged CT (UID-Mapping 1:1)
## Öffentliche Domains
- - `https://qbit.ls-cloud.biz`
- - `https://usenet.ls-cloud.biz`
- - `https://dl.ls-cloud.biz`
+ | Domain | Dienst |
+ |---|---|
+ | `https://requests.ls-cloud.biz` | Jellyseerr (Anfragen-Portal) |
+ | `https://qbit.ls-cloud.biz` | qBittorrent |
+ | `https://usenet.ls-cloud.biz` | SABnzbd |
+ | `https://dl.ls-cloud.biz` | Prowlarr |
- ## Relevante Ports
+ ## Dienste & Ports
+
+ | Port | Dienst | Typ | Beschreibung |
+ |---|---|---|---|
+ | `9696` | Prowlarr | systemd | Indexer-Manager (Torrent + NZB) |
+ | `8989` | Sonarr v4 | systemd | Serien-Manager |
+ | `7878` | Radarr v6 | systemd | Film-Manager |
+ | `5055` | Jellyseerr 2.7.3 | Docker bridge | Anfragen-Portal |
+ | `8081` | qBittorrent | Docker | Torrent-Client |
+ | `8082` | SABnzbd | Docker | Usenet-Client |
+
+ **Docker Compose:** `/opt/downloads-stack/docker-compose.yml`
+
+ ## API-Keys
+
+ ```
+ Sonarr: 081d0986ed1546dabb77740529ed5c3c
+ Radarr: 08b59f420f21404c9891e63cc31ee894
+ ```
+
+ ## Verzeichnisse
```text
- 8081 qBittorrent
- 8082 SABnzbd
- 9696 Prowlarr
+ /srv/storage/downloads/torrents qBittorrent Downloads
+ /srv/storage/downloads/usenet SABnzbd Downloads
+ /srv/storage/media/movies/demovies Radarr – Deutsche Filme (default)
+ /srv/storage/media/movies/rumovies Radarr – Russische Filme
+ /srv/storage/media/series/deseries Sonarr – Deutsche Serien (default)
+ /srv/storage/media/series/ruseries Sonarr – Russische Serien
+ ```
+
+ ## Sprachfilter
+
+ Custom Format „German or Russian" (DE=4, RU=11), minFormatScore=100, Qualitätsprofil Language=Any.
+ Jellyseerr leitet je nach Sprache an die richtigen Root Folders weiter:
+
+ | Jellyseerr Instanz | Root Folder |
+ |---|---|
+ | Radarr (DE) – default | `/srv/storage/media/movies/demovies` |
+ | Radarr (RU) | `/srv/storage/media/movies/rumovies` |
+ | Sonarr (DE) – default | `/srv/storage/media/series/deseries` |
+ | Sonarr (RU) | `/srv/storage/media/series/ruseries` |
+
+ ## Indexer (Prowlarr)
+
+ - Russische Indexer (konfiguriert)
+ - **scenenzbs.com** – Deutsche NZB-Inhalte, API-Key: `1bf8298481c242efad08d54c3b854014`
+
+ ## Jellyseerr-Admin
+
+ ```
+ URL: https://requests.ls-cloud.biz
+ Login: admin@ls-cloud.biz / Admin123!
+ ```
+
+ ## Remote Path Mapping (Sonarr/Radarr)
+
+ Sonarr und Radarr greifen auf qBittorrent über den Docker-Bridge-Gateway zu:
+
+ ```
+ Host: 172.17.0.1 (Docker gateway aus dem Bridge-Netz)
+ Downloads: /downloads/ → /srv/storage/downloads/torrents/
```
## Prüfung
```bash
pct status 105
- curl -I http://192.168.178.63:8081
- curl -I http://192.168.178.63:8082
curl -I http://192.168.178.63:9696
+ curl -I http://192.168.178.63:8989
+ curl -I http://192.168.178.63:7878
+ curl -I http://192.168.178.63:5055
```
/dev/null .. ct-110-termix.md
@@ 0,0 1,77 @@
+ # CT 110 – Termix
+
+ > [!NOTE]
+ > CT 110 ist der aktuelle Web-Zugang fuer Remote-Arbeit im lscloud-Setup. Der Zugriff erfolgt ueber `https://termix.ls-cloud.biz` und ist via **Authelia** vorgeschaltet.
+
+ ## Kurzfassung
+
+ Termix ist hier nicht nur ein Web-Terminal fuer SSH, sondern der aktuelle zentrale Einstieg fuer:
+ - **SSH / Shell-Zugaenge**
+ - **RDP-Verbindungen** (Windows 11 VM 200)
+ - **VNC-Verbindungen**
+ - browserbasierte Remote-Arbeit ueber eine einzige Weboberflaeche
+
+ ## Basisdaten
+
+ | Eigenschaft | Wert |
+ |---|---|
+ | **CT-ID** | `110` |
+ | **Name** | `termix` |
+ | **IP** | `192.168.178.95` |
+ | **Oeffentliche URL** | `https://termix.ls-cloud.biz` |
+ | **Lokaler Web-Port** | `8080/tcp` |
+ | **Zugriffsschutz** | Authelia `two_factor` |
+ | **Docker-Compose** | `/opt/termix/docker-compose.yml` |
+
+ ## Technischer Aufbau
+
+ - Container: `termix` (ghcr.io/lukegus/termix:release-2.2.1)
+ - Container: `guacd` (guacamole/guacd) — RDP/VNC Backend, Port 4822
+ - `network_mode: host` — notwendig fuer Wake-on-LAN-Broadcast ins LAN
+ - `extra_hosts: guacd:127.0.0.1`
+ - Daten: Docker Volume `termix-data` → `/app/data` (verschluesseltes SQLite)
+
+ ## Aktuelle Version: 2.2.1 (gepinnt)
+
+ > [!WARNING]
+ > Termix laeuft bewusst auf Version **2.2.1** statt der aktuellen 2.3.0.
+ >
+ > **Grund:** In 2.3.0 fehlt der Wake-on-LAN-Button im Web-UI (Regression).
+ > Der Button wurde nur im Electron-Desktop-Client implementiert, nicht in der Web-Sidebar.
+ >
+ > - GitHub Issue gemeldet: 2026-05-28
+ > - Update auf 2.3.x: erst nach Bugfix
+
+ ## Wake-on-LAN
+
+ - Workstation-MAC: `F4:93:9F:F8:22:74`
+ - WoL-Button erscheint im Host-Dropdown wenn SSH-Protokoll am Host aktiviert ist
+ - Funktioniert wegen `network_mode: host` (UDP-Broadcast 255.255.255.255:9)
+ - API-Endpunkt intern: `POST /db/host/:id/wake`
+
+ ## Registrierte Verbindungen
+
+ | Ziel | Typ | Host | User |
+ |---|---|---|---|
+ | Windows 11 VM | RDP | 192.168.178.71:3389 | Administrator |
+
+ ## Zugriffspfad
+
+ ```
+ Browser -> https://termix.ls-cloud.biz -> Caddy -> Authelia -> CT 110 :8080 -> Termix
+ ```
+
+ ## Pruefung
+
+ ```bash
+ pct status 110
+ pct exec 110 -- bash -c 'cd /opt/termix && docker compose ps'
+ curl -kI https://termix.ls-cloud.biz/
+ ```
+
+ ## Historischer Hinweis
+
+ > [!IMPORTANT]
+ > CT 110 war frueher der **Pi-hole DNS-Container** (dns, 192.168.178.78).
+ > Pi-hole wurde durch **Technitium DNS auf CT 117** abgeloest.
+ > CT 110 wurde dann komplett neu als Termix aufgesetzt.
ct-111-webserver.md ..
@@ 15,6 15,10 @@
> [!WARNING]
> Wenn CT 111 gestoppt ist, liefert `web.ls-cloud.biz` über Caddy typischerweise direkt `502`.
+ ## Webspace
+
+ Inhalte liegen nicht primär „im Containergefühl“, sondern operativ über den Host-/Bind-Mount-Pfad. Änderungen an Webinhalten gehören deshalb an den Webspace und nicht blind in irgendein Container-Verzeichnis.
+
## Prüfung
```bash
/dev/null .. ct-113-authelia.md
@@ 0,0 1,219 @@
+ # CT 113 – Authelia
+
+ > [!NOTE]
+ > CT 113 hostet **Authelia** als zentrale vorgeschaltete Authentifizierungs- und 2FA-Schicht für ausgewählte Webdienste hinter Caddy.
+
+ ## Basisdaten
+
+ | Eigenschaft | Wert |
+ |---|---|
+ | **CT-ID** | `113` |
+ | **Name** | `authelia` |
+ | **IP** | `192.168.178.64` |
+ | **OS** | Debian 13 |
+ | **Öffentliche URL** | `https://auth.ls-cloud.biz` |
+ | **Interner Port** | `9091/tcp` |
+ | **Compose-Pfad** | `/opt/authelia/compose.yml` |
+ | **Konfig-Pfad** | `/opt/authelia/config/configuration.yml` |
+ | **User-Datei** | `/opt/authelia/config/users_database.yml` |
+ | **Notification-Datei** | `/opt/authelia/config/notification.txt` |
+
+ ## Zweck
+
+ Authelia sitzt vor ausgewählten Webdiensten und erzwingt dort je nach Regel:
+ - kein Login (`bypass`)
+ - Passwort-Login (`one_factor`)
+ - Passwort + zweiter Faktor (`two_factor`)
+
+ Aktuell ist Authelia bereits für folgende Dienste in Benutzung:
+ - `terminal.ls-cloud.biz` → `two_factor`
+ - `files.ls-cloud.biz` → `two_factor`
+ - `termix.ls-cloud.biz` → `two_factor` (Termix mit SSH/RDP)
+
+ ## Architektur
+
+ ```text
+ Browser
+ -> Caddy auf dem Host
+ -> forward_auth gegen Authelia (CT 113 :9091)
+ -> bei Erfolg weiter zum eigentlichen Backend-Dienst
+ ```
+
+ Portal selbst:
+
+ ```text
+ https://auth.ls-cloud.biz
+ -> Caddy reverse_proxy
+ -> CT 113 :9091
+ ```
+
+ ## Wie ein neuer Dienst geschützt wird
+
+ Es braucht immer **zwei Änderungen**:
+
+ ### 1. Authelia-Regel
+ In `configuration.yml` unter `access_control.rules` eine Domain-Regel ergänzen, z. B.:
+
+ ```yaml
+ - domain: 'files.ls-cloud.biz'
+ policy: two_factor
+ ```
+
+ ### 2. Caddy davor schalten
+ Im jeweiligen Domain-Block:
+
+ ```caddy
+ forward_auth http://192.168.178.64:9091 {
+ uri /api/authz/forward-auth
+ copy_headers Remote-User Remote-Groups Remote-Email Remote-Name
+ }
+ ```
+
+ Danach erst das eigentliche `reverse_proxy` zum Backend.
+
+ ## Benutzerverwaltung
+
+ Aktuell wird der **file-based authentication backend** genutzt.
+
+ Benutzer stehen in:
+
+ ```text
+ /opt/authelia/config/users_database.yml
+ ```
+
+ Dort liegen u. a.:
+ - Benutzername
+ - Anzeige-Name
+ - Mailadresse
+ - Argon2-Passworthash
+ - Gruppen
+
+ ### Aufbau eines Benutzers
+
+ Ein einzelner Benutzer sieht im aktuellen Setup z. B. so aus:
+
+ ```yaml
+ users:
+ admin:
+ disabled: false
+ displayname: "Sergej"
+ password: "$argon2id$..."
+ email: "sergej@ls-cloud.biz"
+ groups:
+ - admins
+ ```
+
+ ### Vorlage für einen neuen Benutzer
+
+ ```yaml
+ neueruser:
+ disabled: false
+ displayname: "Neuer User"
+ password: "$argon2id$HIER_DEN_HASH_EINTRAGEN"
+ email: "user@example.com"
+ groups:
+ - users
+ ```
+
+ ### Passwort-Hash erzeugen
+ Ein Passwort wird nicht im Klartext gespeichert, sondern als Hash.
+ Ein neuer Hash kann z. B. so erzeugt werden:
+
+ ```bash
+ pct exec 113 -- docker run --rm authelia/authelia:latest \
+ authelia crypto hash generate argon2 --password 'NEUES_PASSWORT'
+ ```
+
+ Den `Digest:`-Wert dann in `users_database.yml` als `password:` eintragen.
+
+ ### Benutzer hinzufügen – Schritt für Schritt
+
+ 1. Passwort-Hash erzeugen
+ 2. Benutzerblock unter `users:` in `users_database.yml` ergänzen
+ 3. Datei speichern
+ 4. Authelia neu starten:
+
+ ```bash
+ pct exec 113 -- bash -lc "cd /opt/authelia && docker compose -f compose.yml restart"
+ ```
+
+ 5. Danach mit dem neuen Benutzer an `https://auth.ls-cloud.biz` testen
+
+ ### Passwort eines bestehenden Benutzers ändern
+
+ 1. neuen Hash erzeugen
+ 2. beim Benutzer nur den Wert von `password:` ersetzen
+ 3. Authelia neu starten
+
+ ### Benutzer deaktivieren
+
+ ```yaml
+ neueruser:
+ disabled: true
+ ```
+
+ > [!IMPORTANT]
+ > Nach Änderungen an `users_database.yml` ist ein Restart von Authelia der saubere Weg, damit die Änderung sicher übernommen wird.
+
+ ## TOTP / Google Authenticator / Aegis
+
+ Für den Benutzer kann in der Weboberfläche unter Sicherheitsoptionen ein **Einmal-Passwort (TOTP)** hinzugefügt werden.
+ Das funktioniert mit:
+ - Google Authenticator
+ - Aegis
+ - Ente Auth
+ - Authy
+ - anderen TOTP-Apps
+
+ ## „E-Mails“ / One-Time-Codes
+
+ Aktuell ist **kein echter SMTP-Versand** eingerichtet.
+ Stattdessen schreibt Authelia Benachrichtigungen in eine Datei auf dem Server:
+
+ ```text
+ /opt/authelia/config/notification.txt
+ ```
+
+ Dort landen z. B.:
+ - Identity-Confirmation-Codes
+ - One-Time-Codes
+ - Links zum Widerruf
+ - andere notifier-basierte Meldungen
+
+ ### Beispiel ansehen
+
+ ```bash
+ pct exec 113 -- tail -60 /opt/authelia/config/notification.txt
+ ```
+
+ > [!IMPORTANT]
+ > Wenn ein Benutzer behauptet, es komme „keine Mail“, ist im aktuellen Setup zuerst **diese Datei** zu prüfen.
+
+ ## Prüfung
+
+ ```bash
+ pct status 113
+ pct exec 113 -- bash -lc "cd /opt/authelia && docker compose -f compose.yml ps"
+ curl -k -I https://auth.ls-cloud.biz
+ curl -k -I https://terminal.ls-cloud.biz
+ curl -k -I https://files.ls-cloud.biz
+ ```
+
+ ## Wichtige Dateien
+
+ | Pfad | Zweck |
+ |---|---|
+ | `/opt/authelia/compose.yml` | Docker-Compose-Definition |
+ | `/opt/authelia/config/configuration.yml` | Hauptkonfiguration |
+ | `/opt/authelia/config/users_database.yml` | Benutzer & Passwort-Hashes |
+ | `/opt/authelia/config/db.sqlite3` | lokaler Storage |
+ | `/opt/authelia/config/notification.txt` | serverseitige „E-Mails“ / Codes |
+ | `/etc/caddy/Caddyfile` (Host) | Portal + ForwardAuth vor geschützten Diensten |
+
+ ## Hinweise
+
+ > [!TIP]
+ > Für neue Dienste immer in zwei Schritten denken: **Authelia-Regel** und **Caddy forward_auth**.
+
+ > [!WARNING]
+ > Nur Webdienste hinter Caddy lassen sich so sauber schützen. Nicht-HTTP-Protokolle brauchen andere Wege.
ct-114-games.md ..
@@ 1,7 1,7 @@
# CT 114 – Games
> [!NOTE]
- > CT 114 hostet aktuell einen Games-/EmulatorJS-Webdienst.
+ > CT 114 hostet einen Games-/EmulatorJS-Webdienst hinter `games.ls-cloud.biz`. Der Container ist aktuell nicht dauerhaft laufend.
## Basisdaten
ct-117-technitium-dns.md ..
@@ 1,7 1,7 @@
# CT 117 – Technitium DNS
> [!NOTE]
- > CT 117 hostet aktuell den **Technitium DNS Server**. Er ist über `dns.ls-cloud.biz` öffentlich für die Web-UI erreichbar und dient als aktueller DNS-/Resolver-Kandidat im Setup.
+ > CT 117 hostet den **Technitium DNS Server** — den primaeren DNS-Resolver fuer das gesamte lscloud-Netz. Er ist ueber `dns.ls-cloud.biz` oeffentlich fuer die Web-UI erreichbar.
## Basisdaten
@@ 11,28 11,34 @@
| **Name** | `technitium-dns` |
| **IP** | `192.168.178.87` |
| **OS** | Debian 12 |
- | **Disk** | 4 GB |
| **Web-UI intern** | `http://192.168.178.87:5380` |
| **Web-UI extern** | `https://dns.ls-cloud.biz` |
| **DNS-Port** | `53/tcp`, `53/udp` |
- | **Dienst** | `dns.service` |
+ | **Dienst** | `dns.service` (systemd) |
+ | **Install-Pfad** | `/opt/technitium/dns/` |
+ | **Version** | v15.2.0 (Stand 2026-05-28) |
- ## Operative Einordnung
+ ## Konfiguration
- - Caddy zeigt `dns.ls-cloud.biz` aktuell auf **`192.168.178.87:5380`**
- - Die Web-UI ist damit nicht mehr nur intern relevant, sondern Teil der öffentlichen Domain-Matrix
+ - **Upstream:** Cloudflare DoH + Quad9 DoH
+ - **Blocklisten:** OISD Big, HaGeZi Pro++, URLhaus, HaGeZi TIF (~48 MB, taeglich aktualisiert)
+ - Fritz!Box DHCP zeigt auf `192.168.178.87`
+ ## Update-Verfahren
- ## Prüfung
+ ```bash
+ pct exec 117 -- bash -c 'curl -fsSL https://download.technitium.com/dns/install.sh | bash'
+ ```
+
+ ## Pruefung
```bash
pct status 117
pct exec 117 -- systemctl status dns.service
pct exec 117 -- ss -ltnup | grep -E '53|5380'
- curl -k -I https://dns.ls-cloud.biz
+ curl -kI https://dns.ls-cloud.biz
```
- ## Hinweise
+ ## Hintergrund
- > [!TIP]
- > Für die operative Doku ist vor allem wichtig: **Domain → CT 117 → Port 5380**. Detail-Tuning zu Blocklisten oder Upstream-DNS kann separat gepflegt werden, wenn daran aktiv gearbeitet wird.
+ Technitium DNS hat **Pi-hole auf CT 110** abgeloest. CT 110 lief frueher als Pi-hole-DNS-Container auf IP 192.168.178.78 und wurde spaeter komplett zu Termix umgebaut. DNS laeuft seither auf CT 117.
ct-118-paperclipai.md ..
@@ 1,277 1,296 @@
- # CT 118 – PaperclipAI
+ # CT 118 – Paperclip benutzen (einfach erklaert)
> [!NOTE]
- > CT 118 hostet **PaperclipAI** – eine Open-Source Multi-Agent-Orchestrierungsplattform, die KI-Agenten (Claude Code) als autonome "Mitarbeiter" in virtuellen Unternehmen koordiniert. Zugriff über `https://agent.ls-cloud.biz` (Login erforderlich).
+ > Diese Seite erklaert **die Benutzung von Paperclip** moeglichst einfach. Nicht primär Infrastruktur, nicht Container-Interna, sondern: **Wie komme ich rein, was mache ich dort, und woran sehe ich, ob etwas funktioniert?**
- ## Basisdaten
+ ## Was ist Paperclip ueberhaupt?
- | Eigenschaft | Wert |
- |---|---|
- | **CT-ID** | `118` |
- | **Name** | `paperclipai` |
- | **IP** | `192.168.178.88` |
- | **OS** | Debian 12 (Bookworm) |
- | **RAM** | 2048 MB |
- | **Disk** | 20 GB |
- | **Web-UI (intern)** | `http://192.168.178.88:3101` |
- | **Web-UI (extern)** | `https://agent.ls-cloud.biz` |
- | **Service** | `paperclipai.service` (User: `paperclip`) |
- | **Node.js** | v20.20.2 |
- | **PaperclipAI** | v2026.403.0 |
- | **Claude Code** | v2.1.96 |
- | **Auth** | Caddy basic_auth + PaperclipAI-eigene Accounts |
+ Paperclip ist in diesem Setup die Weboberflaeche unter:
- ---
-
- ## Was ist PaperclipAI?
-
- PaperclipAI ist eine **Agentenorchestrierung** – du erstellst virtuelle Unternehmen mit KI-Agenten (hier: Claude Code), die eigenständig Code schreiben, Bugs fixen, Tasks ausführen und dabei ein Monatsbudget einhalten.
+ ```text
+ https://agent.ls-cloud.biz
+ ```
- **Kernkonzepte:**
+ Darueber arbeitest du mit Agenten.
- | Begriff | Bedeutung |
- |---|---|
- | **Company** | Virtuelles Unternehmen – Container für Agenten und Projekte |
- | **Agent** | KI-Worker (hier Claude Code) – führt Tasks autonom aus |
- | **Job** | Einzelner Auftrag / Prompt, den ein Agent bearbeitet |
- | **Budget** | Monatliches Kostenlimit pro Agent (verhindert Kontrollverlust) |
- | **Plugin** | Erweiterung für Agenten (z.B. GitHub, Jira-Integration) |
+ Ganz simpel gesagt:
+ - du oeffnest die Webseite
+ - meldest dich an
+ - waehlst einen Agenten
+ - schreibst, was der Agent tun soll
+ - liest die Antwort, Logs und den Status
- ---
+ Wenn du nur diesen Teil verstehst, bist du schon weiter als viele Produktdokus. Tragisch, aber wahr.
- ## Einrichtung – Schritt für Schritt
+ ## Schnellstart in 30 Sekunden
- ### 1. Dashboard öffnen
+ Wenn du einfach nur loslegen willst:
- Öffne `https://agent.ls-cloud.biz` im Browser.
+ 1. `https://agent.ls-cloud.biz` im Browser aufrufen
+ 2. bei **Authelia** anmelden
+ 3. in Paperclip einen vorhandenen Agenten anklicken
+ 4. unten oder im zentralen Eingabebereich deine Anweisung eingeben
+ 5. Run / Send / Start ausloesen
+ 6. warten, bis Status, Ausgabe oder Logs erscheinen
- Login mit Caddy-Credentials → danach erscheint das PaperclipAI-Dashboard.
+ ## Warum kommt zuerst ein Login?
- > [!NOTE]
- > Beim ersten Aufruf nach Installation erscheint ein **Bootstrap-Wizard** um den ersten Admin-Account anzulegen. E-Mail + Passwort eingeben → Account wird erstellt.
+ Vor Paperclip sitzt **Authelia**.
+ Das ist die vorgeschaltete Anmeldung mit optionalem 2FA-Schutz.
- ---
+ Das heisst:
+ - du kommst **nicht direkt** in Paperclip
+ - du wirst zuerst zu `auth.ls-cloud.biz` umgeleitet
+ - nach erfolgreichem Login landest du wieder bei `agent.ls-cloud.biz`
- ### 2. Ersten Account anlegen (Bootstrap)
+ Wenn du dich also wunderst, warum erst Login kommt:
+ ### Das ist korrekt und gewollt.
- Falls noch kein Account existiert:
+ ## So benutzt du Paperclip Schritt fuer Schritt
- 1. `https://agent.ls-cloud.biz` aufrufen
- 2. **"Create Account"** oder Bootstrap-Formular ausfüllen
- 3. E-Mail + Passwort festlegen
- 4. Du bist jetzt Admin
+ ## 1. Seite oeffnen
- > [!TIP]
- > Nach dem ersten Account empfiehlt es sich, in den Einstellungen die freie Registrierung zu deaktivieren – sonst kann sich jeder mit dem Caddy-Passwort auch einen PaperclipAI-Account anlegen.
+ Im Browser aufrufen:
- ---
+ ```text
+ https://agent.ls-cloud.biz
+ ```
- ### 3. Company erstellen
+ ## 2. Bei Authelia anmelden
- Eine **Company** ist der Arbeitsraum. Jedes Projekt / jeder Themenkomplex kann eine eigene Company sein.
+ Wenn noch keine Session vorhanden ist:
+ - Benutzername eingeben
+ - Passwort eingeben
+ - falls verlangt: zweiten Faktor bestaetigen
- 1. Im Dashboard auf **"New Company"** klicken
- 2. Name vergeben (z.B. `Homelab Automation`)
- 3. Optional: Beschreibung
- 4. **"Create"** → Company ist angelegt
+ Danach wirst du zurueck zu Paperclip geleitet.
- Du landest automatisch im Company-Dashboard.
+ ## 3. In der Paperclip-Oberflaeche orientieren
- ---
+ Je nach Version kann die Oberflaeche leicht anders aussehen. Typisch sind aber folgende Bereiche:
- ### 4. Agent hinzufügen
+ - **Agentenliste** oder Auswahl vorhandener Agenten
+ - **Runs / Sessions / Tasks**
+ - **Eingabefeld** fuer Anweisungen
+ - **Ausgabe / Verlauf / Logs**
+ - **Status** wie `idle`, `running`, `completed`, `failed`
- Ein Agent ist die Verbindung zu Claude Code (dem eigentlichen KI-Worker).
+ Wichtig:
+ Du musst nicht jeden Knopf verstehen.
+ Fuer den Anfang reichen drei Dinge:
+ - Wo waehle ich den Agenten?
+ - Wo tippe ich meine Aufgabe ein?
+ - Wo sehe ich die Antwort oder den Fehler?
- 1. In der Company auf **"Agents"** → **"Add Agent"**
- 2. **Name** vergeben (z.B. `claude-engineer`)
- 3. **Adapter** wählen: `claude_local`
- 4. **Monatliches Budget** setzen (z.B. `$10.00`) – schützt vor unkontrollierten Kosten
- 5. Optional: **Working Directory** – Verzeichnis in dem Claude Code arbeitet
- 6. **"Save"** → Agent ist registriert
+ ## 4. Agent auswaehlen
- > [!WARNING]
- > Ohne Budget-Limit läuft der Agent unbegrenzt. Für Homelab-Nutzung reichen $5–$20/Monat je nach Nutzungsintensität.
+ Ein Agent ist vereinfacht gesagt der "Arbeiter" in Paperclip.
- ---
+ Du gibst ihm eine Aufgabe wie z. B.:
+ - etwas analysieren
+ - etwas zusammenfassen
+ - eine Struktur erstellen
+ - einen Ablauf planen
- ### 5. Ersten Job erstellen (Agent beauftragen)
+ Wenn mehrere Agenten sichtbar sind:
+ - den passenden anklicken
+ - schauen, ob er grundsaetzlich verfuergbar wirkt
+ - falls ein Status angezeigt wird, ist `idle` oder `ready` meist gut
- Jobs sind die eigentlichen Aufgaben, die du dem Agenten gibst.
+ ## 5. Aufgabe eingeben
- 1. Im Company-Dashboard auf **"New Job"** klicken
- 2. **Agent auswählen** (den gerade angelegten)
- 3. **Prompt eingeben** – so präzise wie möglich, z.B.:
+ Jetzt kommt deine eigentliche Anweisung.
- ```
- Analysiere das Verzeichnis /opt/myapp und finde alle Stellen wo
- SQL-Queries direkt aus User-Input gebaut werden. Liste die Dateien
- und Zeilennummern auf und erkläre das Risiko.
- ```
+ ### Schlechtes Beispiel
- 4. Optional: **Kontext-Dateien** anhängen
- 5. **"Start Job"** → Agent beginnt die Arbeit
+ ```text
+ mach mal server
+ ```
- Der Job erscheint in der Job-Liste mit Status `running`. Du siehst in Echtzeit die Ausgabe des Agenten.
+ Das ist inhaltlich duenn. Paperclip oder der Agent muessen dann raten, was du willst.
- ---
+ ### Besseres Beispiel
- ### 6. Job-Ausgabe lesen
+ ```text
+ Analysiere, warum ein Webdienst nicht startet, und nenne mir die wahrscheinlichste Ursache.
+ ```
- Während und nach dem Job:
+ ### Noch besseres Beispiel
- - **Live-Output**: Claude Codes Nachrichten erscheinen in Echtzeit im Job-Detail
- - **Tool-Calls**: Jede Datei die gelesen/geschrieben wird, jeder Bash-Befehl – alles sichtbar
- - **Status**: `running` → `completed` / `failed`
- - **Kosten**: Werden nach Abschluss gegen das Budget gebucht
+ ```text
+ Analysiere, warum der Dienst nicht startet, und gib mir:
+ 1. die wahrscheinlichste Ursache
+ 2. die betroffene Datei oder Komponente
+ 3. einen konkreten Fix-Vorschlag
+ ```
- ---
+ Faustregel:
+ ### Je klarer du schreibst, desto brauchbarer wird die Antwort.
- ### 7. Mehrere Agenten & Arbeitsteilung
+ ## 6. Run starten
- Du kannst mehrere Agenten in einer Company anlegen und ihnen verschiedene Rollen geben:
+ Je nach Oberflaeche heisst der Knopf eventuell:
+ - `Run`
+ - `Start`
+ - `Send`
+ - oder etwas aehnliches
- | Agent-Name | Working Dir | Aufgabe |
- |---|---|---|
- | `frontend-dev` | `/opt/webapp/frontend` | React/CSS Änderungen |
- | `backend-dev` | `/opt/webapp/api` | API-Entwicklung |
- | `devops` | `/opt/infra` | Server/Config-Verwaltung |
+ Nach dem Start sollte sich sichtbar etwas tun:
+ - Status springt auf `running`
+ - es erscheinen Logzeilen
+ - spaeter eine Antwort oder ein Ergebnis
- Jeder Agent hat sein eigenes Budget. So lässt sich Kosten pro Bereich tracken.
+ Wenn **gar nichts** passiert:
+ - falscher Agent?
+ - Browser haengt?
+ - Run wurde nicht wirklich ausgeloest?
+ - Seite neu laden und nochmal schauen
- ---
+ ## Was bedeuten die Stati?
- ### 8. Plugins & Integrationen
+ ### `idle`
+ Der Agent wartet und ist nicht aktiv beschaeftigt.
- Unter **Settings → Plugins** kannst du Erweiterungen aktivieren:
+ ### `running`
+ Der Agent arbeitet gerade.
- - **GitHub**: Agent öffnet automatisch PRs für seine Änderungen
- - **Jira / Linear**: Tasks aus Ticketsystem als Job-Quelle
- - **Webhook**: Externe Trigger für Jobs (z.B. aus CI/CD Pipeline)
+ ### `completed`
+ Der Lauf ist fertig.
+ Es sollte eine Ausgabe, Antwort oder ein Ergebnis geben.
- Plugins werden pro Agent oder global aktiviert.
+ ### `failed`
+ Der Lauf ist fehlgeschlagen.
+ Dann sind Logs und Fehlermeldung wichtiger als jede Vermutung.
- ---
+ ### `terminated`
+ Der Lauf wurde beendet oder abgebrochen.
- ## Tägliche Nutzung
+ ## Wo lese ich das Ergebnis?
- ### Neuen Job starten
- **Company** → **"New Job"** → Agent wählen → Prompt schreiben → **"Start"**
+ Meist an einer dieser Stellen:
+ - im Verlauf des Runs
+ - im Ausgabebereich
+ - in der Detailansicht des Tasks
+ - in den Logs
- ### Job-Status prüfen
- **Company** → **"Jobs"** → Job anklicken → Live-Output + Kostenübersicht
+ Wenn du nicht sicher bist, ob es geklappt hat, schau immer zuerst auf:
+ 1. **Status**
+ 2. **sichtbare Antwort**
+ 3. **Fehlermeldung / Logauszug**
- ### Budget-Verbrauch prüfen
- **Company** → **"Agents"** → Agent anklicken → Budget-Chart (verbraucht / verbleibend)
+ ## Typische Beispiele, was man damit machen kann
- ### Agent temporär pausieren
- **Agents** → Agent → **"Disable"** → Agent nimmt keine neuen Jobs an
+ Mit Paperclip kannst du zum Beispiel:
+ - eine Aufgabe zusammenfassen lassen
+ - einen Plan aus etwas Chaotischem machen lassen
+ - technische Probleme grob analysieren lassen
+ - Struktur fuer ein Projekt oder eine Doku bauen lassen
+ - Ergebnisse und Laufverhalten von Agenten nachvollziehen
- ---
+ ## Beispiel-Workflows
- ## Überwachung & Wartung
+ ## Workflow 1 – Etwas erklaeren lassen
- ### Service-Status
+ Beispiel:
- ```bash
- ssh root@192.168.178.88
- systemctl status paperclipai
+ ```text
+ Erklaere mir dieses Problem in einfachen Worten und gib mir drei naechste Schritte.
```
- ### Logs
-
- ```bash
- # Systemd-Journal
- journalctl -u paperclipai -f
+ Sinnvoll, wenn:
+ - ein Thema unklar ist
+ - du aus Chaos erst einmal Struktur machen willst
- # PaperclipAI eigene Logs
- tail -f /home/paperclip/.paperclip/instances/default/logs/*.log
- ```
+ ## Workflow 2 – Technisches Problem einschaetzen lassen
- ### Neustart
+ Beispiel:
- ```bash
- systemctl restart paperclipai
+ ```text
+ Pruefe diese Fehlermeldung und nenne die wahrscheinlichste Ursache.
```
- ### Claude OAuth-Token erneuern (falls abgelaufen)
+ Sinnvoll, wenn:
+ - du erst eine Richtung brauchst
+ - du nicht blind irgendwo herumdoktern willst
- ```bash
- ssh root@192.168.178.88
- su - paperclip
- claude logout
- claude login
- # URL kopieren → im Browser öffnen → Pro-Account einloggen
- ```
+ ## Workflow 3 – Antwort in brauchbares Format zwingen
- Danach Credentials wieder für den paperclip User verfügbar machen:
- ```bash
- cp /root/.claude/.credentials.json /home/paperclip/.claude/.credentials.json
- chown paperclip:paperclip /home/paperclip/.claude/.credentials.json
- systemctl restart paperclipai
- ```
-
- ### PaperclipAI updaten
+ Beispiel:
- ```bash
- ssh root@192.168.178.88
- su - paperclip
- npm install -g paperclipai@latest
- systemctl restart paperclipai
+ ```text
+ Gib mir die Antwort als kurze Checkliste mit Prioritaet hoch, mittel, niedrig.
```
- ---
-
- ## Architektur im Überblick
+ Sinnvoll, wenn:
+ - du keine Laberantwort willst
+ - du etwas sofort abarbeiten moechtest
+
+ ## Typische Probleme und was sie bedeuten
+
+ ## Problem: "Ich sehe nur den Login"
+ Das ist normal.
+ Authelia sitzt davor.
+ Erst anmelden, dann geht es zu Paperclip weiter.
+
+ ## Problem: "Ich bin eingeloggt, aber sehe keine brauchbare Antwort"
+ Dann kann es sein, dass:
+ - der Agent haengt
+ - der Run fehlgeschlagen ist
+ - die Aufgabe zu unklar war
+ - ein internes Adapter-/Backendproblem vorliegt
+
+ ## Problem: "Die Seite laedt, aber der Agent reagiert nicht"
+ Dann ist oft **nicht** die Domain das Problem, sondern eher:
+ - der Agent selbst
+ - der Run selbst
+ - ein internes Problem im Backend
+
+ ## Problem: "Ich bekomme nur Fehler"
+ Dann auf Schluesselwoerter achten wie:
+ - `failed`
+ - `timeout`
+ - `auth`
+ - `adapter`
+ - `workspace`
+ - `parse`
+
+ Diese Begriffe sagen oft schon recht genau, in welche Richtung der Fehler geht.
+
+ ## Woran erkenne ich, ob eher die App oder eher die Infrastruktur kaputt ist?
+
+ ### Eher Infrastrukturproblem
+ Wenn:
+ - die Seite gar nicht aufgeht
+ - nur 502 / Bad Gateway kommt
+ - der Redirect voellig kaputt ist
+ - du nicht sauber durch Authelia kommst
+
+ ### Eher App-/Agentenproblem
+ Wenn:
+ - Login klappt
+ - die Seite laedt
+ - aber der Agent nicht antwortet oder Runs scheitern
+
+ ## Mini-Checkliste bei Stoerungen
+
+ 1. Komme ich auf `https://agent.ls-cloud.biz`?
+ 2. Werde ich sauber zu Authelia umgeleitet?
+ 3. Komme ich nach dem Login wieder zur App?
+ 4. Kann ich einen Agenten waehlen?
+ 5. Startet ein Run?
+ 6. Was sagt der Status?
+ 7. Was sagen die Logs?
+
+ ## Praktische Merksaetze
+
+ > [!IMPORTANT]
+ > Paperclip ist fuer die Benutzung kein Magieproblem, sondern fast immer nur ein Ablaufproblem: **Login, Agent waehlen, Aufgabe klar schreiben, Status lesen, Logs beachten.**
- ```
- Browser
- └── https://agent.ls-cloud.biz
- └── Caddy (Proxmox Host, basic_auth)
- └── nginx CT 118 :3101
- └── PaperclipAI :3100 (127.0.0.1, User: paperclip)
- └── embedded PostgreSQL :54329
- └── claude_local Adapter
- └── Claude Code (/usr/bin/claude)
- └── OAuth → Claude Pro Plan
- ```
-
- ---
-
- ## Wichtige Pfade
-
- | Pfad | Inhalt |
- |---|---|
- | `/home/paperclip/.paperclip/instances/default/config.json` | Hauptkonfiguration |
- | `/home/paperclip/.paperclip/instances/default/db/` | PostgreSQL Daten |
- | `/home/paperclip/.paperclip/instances/default/logs/` | Logs |
- | `/home/paperclip/.paperclip/instances/default/data/backups/` | Automatische DB-Backups |
- | `/home/paperclip/.claude/.credentials.json` | Claude OAuth-Token |
- | `/etc/systemd/system/paperclipai.service` | Systemd Service |
- | `/etc/nginx/sites-enabled/paperclipai` | nginx Proxy-Config |
-
- ---
-
- ## Schnellcheck
-
- ```bash
- # Container läuft?
- ssh root@192.168.178.46 "pct status 118"
-
- # Service läuft?
- ssh root@192.168.178.88 "systemctl status paperclipai --no-pager | head -5"
-
- # API erreichbar?
- curl -s http://192.168.178.88:3101/api/health | python3 -m json.tool
-
- # HTTPS mit Auth?
- curl -sk -u 'xclusive:PASSWORT' https://agent.ls-cloud.biz/api/health
- ```
+ > [!TIP]
+ > Wenn eine Antwort schlecht ist, ist oft nicht das Tool dumm, sondern die Anweisung zu unklar formuliert. Das klingt gemein, hilft aber erstaunlich oft.
- ---
+ ## Wenn du nur einen einzigen Satz mitnehmen willst
- > [!TIP]
- > Claude Code arbeitet im **Home-Verzeichnis des paperclip-Users** (`/home/paperclip`), sofern kein Working Directory im Agent gesetzt ist. Für produktive Nutzung immer ein konkretes Projektverzeichnis als Working Directory angeben.
+ ### Oeffnen, einloggen, Agent waehlen, Aufgabe klar schreiben, Ergebnis und Status lesen.
- > [!WARNING]
- > PaperclipAI läuft im Modus `local_trusted` – das bedeutet die App vertraut allen Requests die über localhost kommen **ohne zusätzliche Token-Prüfung**. Deshalb ist der Caddy `basic_auth` davor zwingend notwendig und darf nicht entfernt werden.
+ Damit kommt man in der Praxis schon ziemlich weit.
ct-119-azerothcore.md ..
@@ 1,138 1,37 @@
- # AzerothCore WoW Realm (CT 119)
+ # CT 119 – AzerothCore
- ## Übersicht
+ > [!NOTE]
+ > CT 119 hostet aktuell den **AzerothCore WoW-Stack** inklusive Realm-/Worldserver und einem Webpanel-Pfad über `panel.ls-cloud.biz`.
+
+ ## Basisdaten
| Parameter | Wert |
- |-----------|------|
- | CT-ID | 119 |
- | Hostname | azeroth |
- | IP | 192.168.178.89 |
+ |---|---|
+ | CT-ID | `119` |
+ | Hostname | `azeroth` |
+ | IP | `192.168.178.89` |
| OS | Debian 12 Bookworm |
- | CPU / RAM / Disk | 4 vCPU / 8 GB / 40 GB SSD |
- | Realm | lscloud (WotLK 3.3.5a) |
- | Installiert | April 2026 |
+ | Disk | 60 GB |
+ | Panel | `https://panel.ls-cloud.biz` |
- ## Ports & Dienste
+ ## Relevante Ports & Dienste
| Port | Dienst | Sichtbar |
|------|--------|----------|
- | 3724 TCP | AzerothCore Authserver | extern (DNAT) |
- | 8085 TCP | AzerothCore Worldserver | extern (DNAT) |
- | 7878 TCP | SOAP-Interface (Worldserver) | nur intern |
- | 80 TCP | nginx + FusionCMS | intern → Caddy |
- | 3306 TCP | MySQL 8.0 | nur intern |
-
- ## Dateipfade
-
- | Pfad | Inhalt |
- |------|--------|
- | `/opt/azerothcore/bin/` | authserver, worldserver Binaries |
- | `/opt/azerothcore/etc/` | authserver.conf, worldserver.conf |
- | `/opt/azerothcore/logs/` | Server-Logs (SSD, logrotate täglich) |
- | `/opt/azerothcore/data/` | Client-Daten (bind mount, read-only) |
- | `/var/lib/mysql/` | MySQL Daten (SSD) |
- | `/var/www/fusioncms/` | FusionCMS Web-Panel |
- | `/root/acore-credentials.txt` | Credentials (DB-Pass, Admin-Pass) |
-
- **Wichtig:** `/mnt/storage` (externe HDD) ist ausschließlich als read-only bind mount eingebunden.
- Alle schreibenden Dienste (MySQL, Logs) laufen auf lokaler SSD.
-
- ## Credentials (Platzhalter)
-
- ```
- ACORE_DB_USER : acore
- ACORE_DB_PASS : → /root/acore-credentials.txt
- ADMIN_USER : admin (GM Level 3)
- ADMIN_PASS : → /root/acore-credentials.txt
- FUSIONCMS URL : https://panel.ls-cloud.biz
- ```
-
- ## Systemd Services
-
- ```bash
- systemctl status acore-auth # Authserver (Port 3724)
- systemctl status acore-world # Worldserver (Port 8085 + SOAP 7878)
- systemctl status mysql # MySQL 8.0
- systemctl status nginx # nginx + FusionCMS
- ```
-
- ## WoW Client verbinden
-
- ```
- SET REALMLIST realm.ls-cloud.biz
- ```
- → Dann normaler Login-Screen. Realm "lscloud" auswählen.
-
- **Externe DNS-Einträge (Cloudflare):**
- - `realm.ls-cloud.biz` → Proxmox-Host-IP (TCP 3724 via DNAT)
- - `wow.ls-cloud.biz` → Proxmox-Host-IP (TCP 8085 via DNAT)
- - `panel.ls-cloud.biz` → Caddy auf Proxmox-Host → CT119:80
-
- **Fritz!Box:** Ports 3724 + 8085 müssen auf Proxmox-Host (192.168.178.46) weitergeleitet sein.
+ | 3724 TCP | Authserver | extern / Spielzugriff |
+ | 8085 TCP | Worldserver | extern / Spielzugriff |
+ | 80 TCP | Webpanel | intern → Caddy |
- ## Admin-Commands (Worldserver-Console oder SOAP)
+ ## Operative Einordnung
- ```
- # GM-Level vergeben
- account set gmlevel <user> 3 -1
-
- # Neuen Account erstellen
- account create <user> <pass>
-
- # Server-Info
- server info
-
- # Online-Spieler
- online list
- ```
+ - Caddy zeigt `panel.ls-cloud.biz` aktuell auf **`192.168.178.89:80`**
+ - Die früheren separaten Domain-Bezüge für Realm/World sollten nur dokumentiert werden, wenn sie operativ tatsächlich wieder genutzt werden
+ - Die eigentliche Rate-Konfiguration liegt in **`/opt/azerothcore/etc/worldserver.conf`**
- ## SOAP via FusionCMS
-
- FusionCMS schickt GM-Commands über SOAP an `127.0.0.1:7878`.
- Die Verbindung ist in der DB konfiguriert:
- ```sql
- mysql -u root fusioncms -e "SELECT console_username, console_port FROM realms;"
- ```
-
- ## Update-Prozedur
+ ## Prüfung
```bash
- # 1. In CT119 als root
- cd /root/azerothcore
-
- # 2. Neue Commits holen
- git pull
-
- # 3. Neu kompilieren
- cd build
- cmake .. -DCMAKE_INSTALL_PREFIX=/opt/azerothcore -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++
- make -j$(nproc) && make install
-
- # 4. Services neustarten
- systemctl restart acore-auth acore-world
-
- # DB-Updates werden beim nächsten Worldserver-Start automatisch importiert
+ pct status 119
+ pct exec 119 -- systemctl status acore-auth acore-world
+ curl -k -I https://panel.ls-cloud.biz
```
-
- ## MySQL-Tuning (HDD-Schutz)
-
- Konfiguration in `/etc/mysql/mysql.conf.d/99-acore.cnf`:
- - `expire_logs_days = 3` — Binary Logs automatisch rotieren
- - `general_log = 0` — Query-Log deaktiviert
- - `slow_query_log = 0` — Slow-Log deaktiviert
- - `innodb_buffer_pool_size = 2G`
-
- ## Datenbanken
-
- | DB | Inhalt |
- |----|--------|
- | `acore_auth` | Accounts, Realmliste, GM-Rechte |
- | `acore_characters` | Charakterdaten |
- | `acore_world` | Weltdaten, Quests, NPCs |
- | `fusioncms` | Web-Panel Daten |
-
- ## Verwandte Seiten
-
- - [[gm-commands]] – GM-Command Referenz
- - [[server-konsole]] – SSH, SOAP, Logs, Konsolen-Zugriff
- - [[home]]
ct-121-vaultwarden.md ..
@@ 1,70 1,30 @@
- # Vaultwarden Passwortmanager (CT 121)
+ # CT 121 – Vaultwarden
- ## Übersicht
+ > [!NOTE]
+ > CT 121 hostet **Vaultwarden** hinter `pw.ls-cloud.biz`.
+
+ ## Basisdaten
| Parameter | Wert |
- |-----------|------|
- | CT-ID | 121 |
- | Hostname | vaultwarden |
- | IP | 192.168.178.91 |
+ |---|---|
+ | CT-ID | `121` |
+ | Hostname | `vaultwarden` |
+ | IP | `192.168.178.91` |
| OS | Debian 12 Bookworm |
- | CPU / RAM / Disk | 1 vCPU / 256 MB / 8 GB SSD |
- | Software | Vaultwarden 1.35.4 (aus Source), Web Vault v2026.1.1 |
- | Installiert | April 2026 |
-
- ## Ports & Dienste
-
- | Port | Dienst | Sichtbar |
- |------|--------|----------|
- | 8080 TCP | Vaultwarden (Rocket HTTP) | intern → Caddy |
-
- ## Dateipfade
-
- | Pfad | Inhalt |
- |------|--------|
- | `/opt/vaultwarden/vaultwarden` | Binary (selbst kompiliert) |
- | `/opt/vaultwarden/web-vault/` | Web Vault UI |
- | `/opt/vaultwarden/data/` | Datenbank, Keys, Attachments |
- | `/opt/vaultwarden/.env` | Konfiguration |
- | `/root/vaultwarden-credentials.txt` | Admin-Passwort (auf Proxmox-Host) |
-
- ## Konfiguration (.env)
-
- ```ini
- DOMAIN=https://pw.ls-cloud.biz
- ROCKET_PORT=8080
- WEBSOCKET_ENABLED=true
- SIGNUPS_ALLOWED=false # nach erstem Account deaktivieren
- ADMIN_TOKEN=<argon2id-hash>
- ```
-
- ## Systemd Service
-
- ```bash
- systemctl status vaultwarden
- systemctl restart vaultwarden
- ```
-
- ## Admin-Panel
-
- - URL: `https://pw.ls-cloud.biz/admin`
- - Passwort: → `/root/vaultwarden-credentials.txt` auf Proxmox-Host
+ | Disk | 8 GB |
+ | Extern | `https://pw.ls-cloud.biz` |
+ | Intern | `http://192.168.178.91:8080` |
- ## Bitwarden-Client verbinden
+ ## Operative Hinweise
- 1. Bitwarden Browser Extension → Einstellungen → Server-URL
- 2. Eintragen: `https://pw.ls-cloud.biz`
- 3. Account anlegen / einloggen
+ - Caddy zeigt `pw.ls-cloud.biz` auf **`192.168.178.91:8080`**
+ - Der Dienst ist Teil der aktuellen öffentlichen Domain-Matrix
+ - Keine Zugangsdaten in der Wiki pflegen; nur Pfade und Zuständigkeiten dokumentieren
- ## Update-Prozedur
+ ## Prüfung
```bash
- # In CT 121 als root
- # 1. Neues Binary kompilieren (oder Binary von inoffiziellem Spiegel)
- # 2. Service stoppen
- systemctl stop vaultwarden
- # 3. Binary ersetzen
- cp new_vaultwarden /opt/vaultwarden/vaultwarden
- # 4. Service starten
- systemctl start vaultwarden
+ pct status 121
+ curl -k -I https://pw.ls-cloud.biz
+ pct exec 121 -- systemctl status vaultwarden
```
/dev/null .. ct-122-karakeep.md
@@ 0,0 1,72 @@
+ # CT 122 – Karakeep
+
+ > [!NOTE]
+ > CT 122 hostet **Karakeep** als selbst gehosteten Bookmark-/Hoarding-Dienst. Der Aufbau folgt dem offiziellen Docker-/Compose-Weg aus der Karakeep-Doku.
+
+ ## Basisdaten
+
+ | Eigenschaft | Wert |
+ |---|---|
+ | **CT-ID** | `122` |
+ | **Name** | `karakeep` |
+ | **IP** | `192.168.178.92` |
+ | **OS** | Debian 13 |
+ | **App-URL** | `https://keep.ls-cloud.biz` |
+ | **Interner Web-Port** | `3000/tcp` |
+ | **Compose-Pfad** | `/opt/karakeep/docker-compose.yml` |
+ | **Env-Datei** | `/opt/karakeep/.env` |
+
+ ## Offizieller Installationsweg
+
+ Karakeep wurde nach der offiziellen Docker-Doku aufgesetzt:
+ - offizielles `docker-compose.yml`
+ - `.env` mit mindestens:
+ - `KARAKEEP_VERSION`
+ - `NEXTAUTH_SECRET`
+ - `MEILI_MASTER_KEY`
+ - `NEXTAUTH_URL`
+
+ ## Dienste im Stack
+
+ | Dienst | Zweck |
+ |---|---|
+ | `web` | Karakeep-Webanwendung |
+ | `chrome` | Headless Chrome für Archivierung / Rendering |
+ | `meilisearch` | Suche / Index |
+
+ ## Relevante Dateien
+
+ | Pfad | Zweck |
+ |---|---|
+ | `/opt/karakeep/docker-compose.yml` | offizieller Compose-Stack |
+ | `/opt/karakeep/.env` | Version / Secrets / URL |
+
+ ## Operative Hinweise
+
+ - Karakeep lauscht intern auf **Port `3000`**
+ - Caddy zeigt `keep.ls-cloud.biz` auf **`192.168.178.92:3000`**
+ - Wenn das Frontend noch nicht sauber über HTTPS kommt, zuerst Caddy-/TLS-Lage und den Containerstatus prüfen
+
+ ## Prüfung
+
+ ```bash
+ pct status 122
+ pct exec 122 -- bash -lc "cd /opt/karakeep && docker compose ps"
+ pct exec 122 -- bash -lc "cd /opt/karakeep && docker compose logs --tail=100"
+ curl -I http://192.168.178.92:3000
+ curl -k -I https://keep.ls-cloud.biz
+ ```
+
+ ## Update
+
+ Wenn `KARAKEEP_VERSION=release` genutzt wird:
+
+ ```bash
+ pct exec 122 -- bash -lc "cd /opt/karakeep && docker compose up --pull always -d"
+ ```
+
+ Wenn auf eine feste Version gepinnt wird, zuerst `.env` anpassen und dann:
+
+ ```bash
+ pct exec 122 -- bash -lc "cd /opt/karakeep && docker compose up -d"
+ ```
/dev/null .. ct-126-tdarr.md
@@ 0,0 1,82 @@
+ # CT 126 – Tdarr
+
+ > [!NOTE]
+ > CT 126 bündelt den automatischen Medien-Transcoder Tdarr mit Intel QSV GPU-Beschleunigung.
+
+ ## Basisdaten
+
+ - **CT-ID:** `126`
+ - **Name:** `tdarr`
+ - **IP:** `192.168.178.73`
+ - **OS:** Debian 12, 4 vCPU, 4 GB RAM, 20 GB SSD (local-lvm)
+
+ ## Öffentliche Domain
+
+ - `https://transcode.ls-cloud.biz`
+
+ ## Relevante Ports
+
+ ```text
+ 8265 Tdarr Web-UI
+ 8266 Tdarr Server (intern)
+ ```
+
+ ## Setup
+
+ Tdarr läuft als Docker Container (privileged) mit GPU-Passthrough:
+
+ ```text
+ /dev/dri/renderD128 Intel Iris Xe renderD (QSV/VAAPI)
+ /dev/dri/card1 Intel Iris Xe card
+ ```
+
+ **Compose:** `/opt/tdarr/compose.yml`
+
+ ```bash
+ cd /opt/tdarr && docker compose up -d
+ ```
+
+ ## Mounts
+
+ | Host (Proxmox) | Im CT | Im Container |
+ |---|---|---|
+ | `/mnt/storage/fileserver/media` | `/mnt/media` | `/media` |
+ | `/mnt/storage/fileserver/tdarr-cache` | `/mnt/tdarr-cache` | `/temp` |
+
+ ## Konfiguration
+
+ - **Library:** `4NDShul-F` — Ordner `/media`, folderWatching aktiv
+ - **Flow:** `hevc-qsv-flow` — checkVideoCodec → ffmpegCommandStart → SetVideoEncoder(hevc_qsv) → SetContainer(mkv) → Execute → replaceOriginalFile
+ - **Worker-Limits:** transcodegpu=2, transcodecpu=1, healthcheckcpu=1
+ - **Node:** `lscloud-tdarr` (ID: `azQaGhE8F`)
+
+ ## GPU-Encoder (bestätigt funktionsfähig)
+
+ ```
+ hevc_qsv Intel QSV Hardware-Encoder ✓
+ hevc_vaapi Intel VAAPI Hardware-Encoder ✓
+ ```
+
+ ## Prüfung
+
+ ```bash
+ pct status 126
+ # Transcode-Queue anzeigen:
+ curl http://192.168.178.73:8265/api/v2/is-server-alive
+ # ffmpeg-Prozesse:
+ pct exec 126 -- docker exec tdarr ps aux | grep ffmpeg
+ ```
+
+ ## Datenbank
+
+ SQLite-DB im Container: `/app/server/Tdarr/DB2/SQL/database.db`
+ Tabellen: `flowsjsondb`, `librarysettingsjsondb`, `nodejsondb`, `filejsondb`
+ Spalten (alle DB-Tabellen): `id TEXT (PK)`, `timestamp INTEGER`, `json_data TEXT`
+
+ Scan manuell triggern:
+
+ ```bash
+ curl -s -X POST http://192.168.178.73:8265/api/v2/scan-files \
+ -H 'Content-Type: application/json' \
+ -d '{"data":{"scanConfig":{"dbID":"4NDShul-F","mode":"scanFresh","arrayOrPath":"/media"}}}'
+ ```
/dev/null .. ct-127-monitoring.md
@@ 0,0 1,48 @@
+ # CT 127 – Security Monitoring
+
+ > [!NOTE]
+ > CT 127 stellt den internen Log- und Monitoring-Stack bereit: Grafana, Loki, Promtail.
+
+ ## Basisdaten
+
+ | Eigenschaft | Wert |
+ |---|---|
+ | **CT-ID** | `127` |
+ | **Name** | `security-monitoring` |
+ | **OS** | Debian 12 |
+ | **Docker-Compose** | `/opt/security-monitoring/docker-compose.yml` |
+ | **Kein oeffentlicher Caddy-Eintrag** | — |
+
+ ## Technischer Aufbau
+
+ - Container: `grafana` (grafana/grafana:13.0.1) — Dashboard, Port 3000
+ - Container: `loki` (grafana/loki:3.7.2) — Log-Aggregation, Port 3100
+ - Container: `promtail` (grafana/promtail:3.6.11) — Log-Shipper
+
+ ## Versions-Stand (2026-05-28)
+
+ | Dienst | Version |
+ |---|---|
+ | Grafana | 13.0.1 |
+ | Loki | 3.7.2 |
+ | Promtail | 3.6.11 |
+
+ ## Zugriff
+
+ - Grafana intern: `http://192.168.178.87:3000` — kein oeffentlicher Caddy-Eintrag
+ - Admin-Credentials in `/opt/security-monitoring/docker-compose.yml`
+
+ ## Hinweise
+
+ > [!IMPORTANT]
+ > CT 127 hat altes Docker (20.10.x) ohne eingebautes Compose-Plugin.
+ > Docker Compose v2.35.1 wurde manuell installiert:
+ > `/usr/local/lib/docker/cli-plugins/docker-compose`
+
+ ## Update-Verfahren
+
+ ```bash
+ pct exec 127 -- bash -c 'cd /opt/security-monitoring && docker compose pull && docker compose up -d'
+ ```
+
+ Achtung: Promtail hat eigenes Versions-Schema (max. 3.6.x), nicht identisch mit Loki 3.7.x.
home.md ..
@@ 6,23 6,30 @@
| CT | Name | IP | Beschreibung | Wiki |
|----|------|----|--------------|------|
- | 101 | jellyfin | 192.168.178.55 | Jellyfin Mediaserver | — |
+ | 101 | jellyfin | 192.168.178.55 | Jellyfin Mediaserver 10.11.10 | — |
| 102 | pbs | 192.168.178.60 | Proxmox Backup Server | [[ct-102-pbs]] |
- | 103 | fileserver | 192.168.178.61 | Filebrowser | — |
- | 104 | immich | 192.168.178.62 | Immich Fotoverwaltung | [[ct-104-immich]] |
- | 105 | downloads | 192.168.178.63 | qBittorrent, SABnzbd, Prowlarr | [[ct-105-downloads]] |
- | 108 | wiki | 192.168.178.77 | OtterWiki (diese Seite) | — |
+ | 103 | fileserver | 192.168.178.61 | Filebrowser v2.63.5 | [[ct-103-fileserver]] |
+ | 104 | immich | 192.168.178.62 | Immich v2.7.4 Fotoverwaltung | [[ct-104-immich]] |
+ | 105 | downloads | 192.168.178.63 | qBittorrent, SABnzbd, Sonarr, Radarr, Prowlarr, Jellyseerr | [[ct-105-downloads]] |
+ | 108 | wiki | 192.168.178.77 | OtterWiki (diese Seite) | [[ct-108-wiki]] |
| 109 | claw | 192.168.178.75 | OpenClaw Runtime / Agent-Kontext | — |
- | 112 | claude-code | 192.168.178.82 | Claude Code Terminal | — |
+ | 110 | termix | 192.168.178.95 | Termix 2.2.1 SSH/RDP/VNC Serververwaltung | [[ct-110-termix]] |
+ | 111 | webserver | 192.168.178.79 | Webserver | — |
+ | 112 | claude-code | 192.168.178.82 | Claude Code Terminal (shellinabox) | — |
| 113 | authelia | 192.168.178.64 | Zentrale Auth-/2FA-Schicht | [[ct-113-authelia]] |
- | 114 | games | 192.168.178.84 | EmulatorJS Retro-Games | — |
- | 115 | local-ai | 192.168.178.85 | Local AI | — |
- | 117 | technitium-dns | 192.168.178.87 | Technitium DNS Server | — |
+ | 117 | technitium-dns | 192.168.178.87 | Technitium DNS v15.2.0 | [[ct-117-technitium-dns]] |
| 118 | paperclipai | 192.168.178.88 | PaperclipAI Multi-Agent | [[ct-118-paperclipai]] |
- | 119 | azeroth | 192.168.178.89 | AzerothCore WoW Realm (WotLK) | [[ct-119-azerothcore]] |
- | 120 | dashboard | 192.168.178.90 | Homepage Dashboard | — |
- | 121 | vaultwarden | 192.168.178.91 | Vaultwarden Passwoerter | — |
+ | 119 | azeroth | 192.168.178.89 | AzerothCore WoW Realm (gestoppt) | [[ct-119-azerothcore]] |
+ | 121 | vaultwarden | 192.168.178.91 | Vaultwarden 1.35.4 Passwoerter | [[ct-121-vaultwarden]] |
+ | 122 | karakeep | 192.168.178.92 | Karakeep Lesezeichen | [[ct-122-karakeep]] |
| 123 | cs16 | 192.168.178.93 | CS 1.6 Web-Server | [[ct-123-cs16]] |
+ | 124 | homarr | 192.168.178.94 | Homarr v0.16.0 Dashboard | — |
+ | 125 | norish | 192.168.178.96 | Norish Rezept-App | — |
+ | 126 | tdarr | 192.168.178.73 | Tdarr Medien-Transcoder (Intel QSV) | [[ct-126-tdarr]] |
+ | 127 | security-monitoring | intern | Grafana 13.0.1 + Loki 3.7.2 + Promtail (Docker) | [[ct-127-monitoring]] |
+ | 128 | bot | 192.168.178.97 | Freqtrade MrXScalper Trading Bot | [[ct-128-bot]] |
+ | 129 | burningnotes | 192.168.178.98 | BurningNotes (nginx+PHP+MariaDB) | — |
+ | 130 | lstools | 192.168.178.99 | URL-Shortener + BurningNotes Suite | — |
## Oeffentliche Domains
@@ 33,33 40,52 @@
| `stream.ls-cloud.biz` | Jellyfin | CT 101 |
| `fotos.ls-cloud.biz` | Immich | CT 104 |
| `files.ls-cloud.biz` | Filebrowser | CT 103 |
- | `qbit.ls-cloud.biz` | qBittorrent | CT 105 |
+ | `requests.ls-cloud.biz` | Jellyseerr | CT 105 |
| `wiki.ls-cloud.biz` | OtterWiki | CT 108 |
+ | `terminal.ls-cloud.biz` | Shell In A Box | CT 112 |
+ | `auth.ls-cloud.biz` | Authelia Portal | CT 113 |
| `dns.ls-cloud.biz` | Technitium DNS | CT 117 |
- | `games.ls-cloud.biz` | EmulatorJS | CT 114 |
- | `panel.ls-cloud.biz` | WoW Webpanel / Altpfad | CT 119 |
- | `pw.ls-cloud.biz` | Vaultwarden | CT 121 |
| `agent.ls-cloud.biz` | PaperclipAI | CT 118 |
- | `auth.ls-cloud.biz` | Authelia Portal | CT 113 |
+ | `pw.ls-cloud.biz` | Vaultwarden | CT 121 |
| `keep.ls-cloud.biz` | Karakeep | CT 122 |
| `cs.ls-cloud.biz` | CS 1.6 Web-Client | CT 123 |
+ | `ls-cloud.biz` | Homarr Dashboard | CT 124 |
+ | `www.ls-cloud.biz` | Redirect auf `ls-cloud.biz` | CT 124 |
+ | `termix.ls-cloud.biz` | Termix SSH/RDP/VNC | CT 110 |
+ | `norish.ls-cloud.biz` | Norish Rezept-App | CT 125 |
+ | `transcode.ls-cloud.biz` | Tdarr Transcoder | CT 126 |
+ | `bot.ls-cloud.biz` | Freqtrade Dashboard | CT 128 |
+ | `note.ls-cloud.biz` | BurningNotes | CT 129 |
+ | `sh0rt.biz` | URL-Shortener | CT 130 |
+ | `priv.sh0rt.biz` | BurningNotes (sh0rt.biz) | CT 130 |
+ | `panel.ls-cloud.biz` | WoW Webpanel (gestoppt) | CT 119 |
+ | `games.ls-cloud.biz` | EmulatorJS (gestoppt) | CT 114 |
## Detailseiten
- - [[lscloud-inventur]] — Host-Inventur
- - [[ct-119-azerothcore]] — AzerothCore WoW Server (CT 119)
- - [[ct-102-pbs]] — Proxmox Backup Server
- - [[ct-104-immich]] — Immich
- - [[ct-105-downloads]] — Downloads
-
- - [[ct-117-technitium-dns]] — Technitium DNS
- - [[ct-118-paperclipai]] — PaperclipAI
- - [[ct-121-vaultwarden]] — Vaultwarden
- - [[services-uebersicht]] — Service-Matrix
- - [[netz-und-domains]] — Domains und Ziele
- - [[container-und-vms]] — Laufende und gestoppte Systeme
-
- - [[ct-113-authelia]] — Authelia
+ - [[lscloud-inventur]]
+ - [[services-uebersicht]]
+ - [[netz-und-domains]]
+ - [[container-und-vms]]
+ - [[infrastruktur-uebersicht]]
+ - [[operativer-einstieg]]
+ - [[runbooks]]
+ - [[storage-und-mounts]]
+ - [[ct-102-pbs]]
+ - [[ct-103-fileserver]]
+ - [[ct-104-immich]]
+ - [[ct-105-downloads]]
+ - [[ct-108-wiki]]
+ - [[ct-110-termix]]
+ - [[ct-113-authelia]]
+ - [[ct-117-technitium-dns]]
+ - [[ct-118-paperclipai]]
+ - [[ct-119-azerothcore]]
+ - [[ct-121-vaultwarden]]
+ - [[ct-122-karakeep]]
+ - [[ct-123-cs16]]
+ - [[ct-126-tdarr]]
+ - [[ct-127-monitoring]]
+ - [[ct-128-bot]]
- - [[ct-122-karakeep]] — Karakeep
- - [[ct-123-cs16]] — CS 1.6 Web-Server
+ > Letztes Update: 2026-05-28 — Mass-Update aller Dienste
infrastruktur-uebersicht.md ..
@@ 1,80 1,38 @@
- # Infrastruktur-Übersicht
+ # Infrastruktur-Uebersicht
> [!NOTE]
- > Diese Seite ist die schnelle Einordnung für `lscloud`: Was ist Kern, was hängt woran, und welche Systeme sind operativ wirklich wichtig?
+ > Diese Seite ist die schnelle Einordnung fuer `lscloud`: Was ist Kern, was haengt woran, und welche Systeme sind operativ wirklich wichtig?
## Betriebsbild
| Bereich | Systeme | Bedeutung |
|---|---|---|
- | Core | Host, Caddy, CT 108 `wiki`, CT 109 `claw` | Fundament für Zugriff, Doku und Agent-Kontext |
- | Medien | CT 101 `jellyfin`, CT 103 `fileserver`, CT 104 `immich`, CT 105 `downloads` | Inhalte, Bibliotheken, Datenflüsse |
- | Spezialdienste | CT 112 `claude-code`, CT 114 `games` | Webterminal, Games/EmulatorJS |
- | Nebenobjekte | CT 100 `guacamole`, CT 107 `monitoring`, VM 200 `Windows11Pro` | situativ wichtig, aber bewusst Teil des Setups |
-
- ## Gesamtbild
-
- ```mermaid
- flowchart LR
- classDef ingress fill:#0f172a,stroke:#64748b,color:#f8fafc;
- classDef core fill:#1e293b,stroke:#94a3b8,color:#f8fafc;
- classDef svc fill:#1f2937,stroke:#6b7280,color:#f9fafb;
- classDef spec fill:#312e81,stroke:#818cf8,color:#eef2ff;
- classDef aux fill:#3f3f46,stroke:#a1a1aa,color:#fafafa;
-
- Internet[Internet / externe Clients]:::ingress --> Caddy[Caddy auf lscloud]:::ingress
-
- subgraph Core[Core-Dienste]
- Admin[Host Admin / Proxmox]:::core
- Wiki[CT 108 Wiki]:::core
- Claw[CT 109 Claw]:::core
- end
-
- subgraph Media[Medien & Daten]
- Files[CT 103 Fileserver]:::svc
- Jelly[CT 101 Jellyfin]:::svc
- Immich[CT 104 Immich]:::svc
- Downloads[CT 105 Downloads]:::svc
- Web[CT 111 Webserver]:::svc
- end
-
- subgraph Special[Spezialdienste]
- Terminal[CT 112 Terminal]:::spec
- Games[CT 114 Games]:::spec
- end
-
- subgraph Other[Nebenobjekte]
- Guac[CT 100 Guacamole]:::aux
- Mon[CT 107 Monitoring]:::aux
- Win[VM 200 Windows11]:::aux
- end
-
- Caddy --> Admin
- Caddy --> Wiki
- Caddy --> Files
- Caddy --> Jelly
- Caddy --> Immich
- Caddy --> Downloads
- Caddy --> Web
- Caddy --> Terminal
- Caddy --> Games
- Caddy --> Guac
- Claw -. Agenten-/OpenClaw-Kontext .-> Wiki
- Win -. Monitoring-Pfad .-> Mon
- ```
+ | Core | Host, Caddy, CT 108 `wiki`, CT 109 `claw`, CT 113 `authelia` | Fundament fuer Zugriff, Doku, Agent-Kontext und zentrale Auth |
+ | Medien | CT 101 `jellyfin`, CT 103 `fileserver`, CT 104 `immich`, CT 105 `downloads`, CT 111 `webserver` | Inhalte, Bibliotheken, Datenfluesse |
+ | Produktiv-nahe Webdienste | CT 110 `termix`, CT 118 `paperclipai`, CT 121 `vaultwarden`, CT 122 `karakeep`, CT 124 `homarr`, CT 125 `norish` | aktiv genutzte Oberflaechen und Dienste |
+ | Situative / Altlasten | CT 107 `monitoring`, CT 114 `games`, CT 119 `azeroth`, verwaiste Caddy-Ziele wie `ai` oder `octobot` | nach Aufraeumarbeiten besonders pruefpflichtig |
## Operative Lesart
> [!TIP]
- > Wenn du öffentlich ein Problem siehst, beginne meist bei **Caddy**, dann beim **Zielsystem**, dann beim **Dienst im Zielsystem**.
+ > Wenn du oeffentlich ein Problem siehst, beginne meist bei **Caddy**, dann beim **Zielsystem**, dann beim **Dienst im Zielsystem**.
> [!IMPORTANT]
> CT 109 ist der relevante OpenClaw-/Agent-Kontext. CT 112 ist aktuell eher Webterminal-/Claude-Code-Umfeld und nicht einfach als alte Jarvis-Phase zu lesen.
> [!WARNING]
- > Gestoppte Systeme können in der öffentlichen Wahrnehmung trotzdem Fehler auslösen, wenn Caddy noch aktiv auf sie zeigt.
+ > Nach dem Aufraeumen sind vor allem Eintraege verdachtig, die noch in Caddy stehen, aber kein sichtbares Zielsystem mehr in `pct list` haben.
+
+ ## Auffaellige Punkte per 2026-04-22
+
+ - **CT 124 `homarr`** ist der aktuelle Dashboard-Host hinter `ls-cloud.biz`.
+ - **CT 125 `norish`** ist neu aktiv und ueber `norish.ls-cloud.biz` erreichbar.
+ - **CT 115 `local-ai`** und **CT 120 `dashboard`** tauchen in der aktuellen Proxmox-Liste nicht mehr auf.
+ - `ai.ls-cloud.biz` ist nach Live-Pruefung die klarste Altlast: Ziel `192.168.178.85:3000` ist vom Host nicht erreichbar, CT 115 taucht nicht mehr in `pct list` auf, extern kommt `502`.
+ - `octobot.ls-cloud.biz` ist kein reiner Phantomeintrag, weil Authelia sauber antwortet. Das eigentliche Backend `192.168.178.93:5001` ist aber geschlossen; die IP gehoert aktuell zu CT 123 `cs16`, also passt die Zuordnung erkennbar nicht mehr sauber zur heutigen Lage.
+ - `panel.ls-cloud.biz`, `games.ls-cloud.biz` und `net.ls-cloud.biz` zeigen aktuell auf bewusst gestoppte CTs. Das ist hier nicht automatisch ein Fehler, sondern eher eine Frage, ob die oeffentlichen Eintraege waehrend der Pause bestehen bleiben sollen.
- ## Weiterführende Seiten
+ ## Weiterfuehrende Seiten
- [[services-uebersicht]]
- [[netz-und-domains]]
netz-und-domains.md ..
@@ 1,7 1,7 @@
# Netz & Domains
> [!NOTE]
- > Diese Seite beantwortet zwei praktische Fragen: Welche Adresse gehört wozu — und welche Domain zeigt am Ende wohin?
+ > Diese Seite beantwortet zwei praktische Fragen: Welche Adresse gehoert wozu, und welche Domain zeigt am Ende wohin?
## Kernadressen
@@ 12,13 12,16 @@
| Wiki | `192.168.178.77` | CT 108 |
| Claw / OpenClaw | `192.168.178.75` | CT 109 |
| Claude-Code / Terminal | `192.168.178.82` | CT 112 |
+ | Termix | `192.168.178.95` | CT 110 |
+ | Homarr | `192.168.178.94` | CT 124 |
+ | Norish | `192.168.178.96` | CT 125 |
| Games | `192.168.178.84` | CT 114 |
## Domain-Matrix
| Domain | Ziel | Zweck |
|---|---|---|
- | `admin.ls-cloud.biz` | Host / Proxmox | Adminoberfläche |
+ | `admin.ls-cloud.biz` | Host / Proxmox | Adminoberflaeche |
| `backup.ls-cloud.biz` | CT 102 | Proxmox Backup Server |
| `wiki.ls-cloud.biz` | CT 108 | Infrastruktur-Wiki |
| `files.ls-cloud.biz` | CT 103 | Filebrowser |
@@ 29,28 32,34 @@
| `dl.ls-cloud.biz` | CT 105 | Prowlarr |
| `dns.ls-cloud.biz` | CT 117 | Technitium DNS |
| `pw.ls-cloud.biz` | CT 121 | Vaultwarden |
- | `agent.ls-cloud.biz` | CT 118 | PaperclipAI |
+ | `agent.ls-cloud.biz` | CT 118 | Paperclip / Agent-Plattform (via Authelia) |
| `auth.ls-cloud.biz` | CT 113 | Authelia Portal |
| `keep.ls-cloud.biz` | CT 122 | Karakeep |
- | `ai.ls-cloud.biz` | CT 115 | Local AI |
+ | `ai.ls-cloud.biz` | kein aktiver CT mehr sichtbar | verwaister Local-AI-Eintrag, aktuell `502` |
| `terminal.ls-cloud.biz` | CT 112 | Webterminal |
| `games.ls-cloud.biz` | CT 114 | Games / EmulatorJS |
| `web.ls-cloud.biz` | CT 111 | Webserver |
| `net.ls-cloud.biz` | CT 107 | Monitoring / ntopng |
- | `live.ls-cloud.biz` | CT 100 | Guacamole |
| `panel.ls-cloud.biz` | CT 119 | WoW Webpanel / Altpfad |
+ | `ls-cloud.biz` | CT 124 | Homarr Dashboard |
+ | `www.ls-cloud.biz` | Redirect auf `ls-cloud.biz` | WWW-Redirect |
| `cs.ls-cloud.biz` | CT 123 | CS 1.6 Webclient |
+ | `termix.ls-cloud.biz` | CT 110 | Termix Serververwaltung mit SSH und RDP (via Authelia) |
+ | `norish.ls-cloud.biz` | CT 125 | Norish Rezept-App |
+ | `octobot.ls-cloud.biz` | Ziel-IP von CT 123, Port 5001 aber zu | Zuordnung unklar, derzeit nur Authelia-Redirect sichtbar |
{{DataTable}}
## Einordnung
> [!TIP]
- > Für Außenwirkung ist diese Seite die schnellste Wahrheit: Domain → Ziel → Zweck.
+ > Fuer Aussenwirkung ist diese Seite die schnellste Wahrheit: Domain → Ziel → Zweck.
+ ## Merksaetze
- ## Merksätze
-
- - Neue Domains immer gegen **Caddy**, **Backend-Port** und **Dienststatus** prüfen.
- - Öffentliche Fehlerbilder sind oft schlichter, als sie aussehen: gestoppter CT, falscher Port, kaputter Backend-Dienst.
+ - Neue Domains immer gegen **Caddy**, **Backend-Port** und **Dienststatus** pruefen.
+ - Oeffentliche Fehlerbilder sind oft schlichter, als sie aussehen: gestoppter CT, falscher Port, kaputter Backend-Dienst.
- `terminal.ls-cloud.biz` ist ein Webterminal, kein klassischer Webdienst.
+ - `termix.ls-cloud.biz` ist ueber Authelia vorgeschaltet und zeigt auf CT 110 `:8080`.
+ - `norish.ls-cloud.biz` zeigt auf CT 125 `:3000`.
+ - `ls-cloud.biz` wird aktuell von **CT 124 `homarr`** ausgeliefert.
operativer-einstieg.md ..
@@ 38,3 38,9 @@
|toc=false
|toggle=false
}}
+
+
+ ## Auth-Schicht
+
+ - Für vorgeschaltete Login-/2FA-Themen siehe [[ct-113-authelia]].
+ - Wenn Codes oder Bestätigungen angeblich nicht ankommen, zuerst `notification.txt` prüfen.
runbooks.md ..
@@ 95,3 95,12 @@
## tmux
- [[tmux]]
+
+
+ ## Authelia – Schnellchecks
+
+ ```bash
+ pct status 113
+ pct exec 113 -- bash -lc "cd /opt/authelia && docker compose -f compose.yml ps"
+ pct exec 113 -- tail -60 /opt/authelia/config/notification.txt
+ ```
services-uebersicht.md ..
@@ 1,7 1,9 @@
# Services & Domains auf `lscloud`
+ Stand: 2026-05-28
+
> [!NOTE]
- > Diese Seite ist als operative Service-Matrix gedacht. Sortieren, suchen und querlesen soll hier schneller gehen als Rätselraten.
+ > Diese Seite ist als operative Service-Matrix gedacht.
## Service-Matrix
@@ 9,32 11,31 @@
|---|---|---|---|---|
| `admin.ls-cloud.biz` | `https://localhost:8006` | Host `lscloud` | Proxmox Web UI | erreichbar |
| `backup.ls-cloud.biz` | `https://192.168.178.60:8007` | CT 102 `pbs` | Proxmox Backup Server | erreichbar |
- | `files.ls-cloud.biz` | `192.168.178.61:8080` | CT 103 `fileserver` | Filebrowser | erreichbar |
- | `stream.ls-cloud.biz` | `192.168.178.55:8096` | CT 101 `jellyfin` | Jellyfin | erreichbar |
- | `fotos.ls-cloud.biz` | `192.168.178.62:2283` | CT 104 `immich` | Immich | erreichbar |
- | `qbit.ls-cloud.biz` | `192.168.178.63:8081` | CT 105 `downloads` | qBittorrent | situativ |
- | `usenet.ls-cloud.biz` | `192.168.178.63:8082` | CT 105 `downloads` | SABnzbd | situativ |
- | `dl.ls-cloud.biz` | `192.168.178.63:9696` | CT 105 `downloads` | Prowlarr | situativ |
- | `requests.ls-cloud.biz` | `192.168.178.63:5055` | CT 105 `downloads` | Jellyseerr Anfragen-Portal | erreichbar |
- | `net.ls-cloud.biz` | `192.168.178.72:3000` | CT 107 `monitoring` | ntopng / Monitoring | bewusst gestoppt / bei Bedarf aktivierbar |
+ | `files.ls-cloud.biz` | `192.168.178.61:8080` | CT 103 `fileserver` | Filebrowser v2.63.5 | erreichbar |
+ | `stream.ls-cloud.biz` | `192.168.178.55:8096` | CT 101 `jellyfin` | Jellyfin 10.11.10 | erreichbar |
+ | `fotos.ls-cloud.biz` | `192.168.178.62:2283` | CT 104 `immich` | Immich v2.7.4 | erreichbar |
+ | `requests.ls-cloud.biz` | `192.168.178.63:5055` | CT 105 `downloads` | Jellyseerr 2.7.3 | erreichbar |
| `wiki.ls-cloud.biz` | `192.168.178.77:8080` | CT 108 `wiki` | OtterWiki | erreichbar |
- | `web.ls-cloud.biz` | `192.168.178.79:80` | CT 111 `webserver` | Webserver / Webspace | erreichbar, solange CT 111 laeuft |
- | `games.ls-cloud.biz` | `192.168.178.84:8080` | CT 114 `games` | Games / EmulatorJS-Webdienst | bewusst gestoppt / bei Bedarf aktivierbar |
- | `terminal.ls-cloud.biz` | `192.168.178.82:7681` | CT 112 `claude-code` | Webterminal (Shell In A Box) | erreichbar |
- | `agent.ls-cloud.biz` | `192.168.178.88:3101` | CT 118 `paperclipai` | PaperclipAI Multi-Agent Platform | via Authelia geschuetzt |
- | `bot.ls-cloud.biz` | `192.168.178.97:5001` | CT 128 `bot` | Trading Bot Dashboard (Freqtrade) | via Authelia geschuetzt |
- | `panel.ls-cloud.biz` | `192.168.178.89:80` | CT 119 `azeroth` | WoW Webpanel (FusionCMS) | bewusst gestoppt / bei Bedarf aktivierbar |
- | `wow.ls-cloud.biz` | `192.168.178.89:8085` | CT 119 `azeroth` | AzerothCore WotLK Realm | bei Bedarf aktivierbar |
- | `pw.ls-cloud.biz` | `192.168.178.91:8080` | CT 121 `vaultwarden` | Vaultwarden Passwortmanager | erreichbar |
- | `ls-cloud.biz` | `192.168.178.94:7575` | CT 124 `homarr` | Homarr Dashboard | erreichbar |
- | `www.ls-cloud.biz` | Redirect auf `ls-cloud.biz` | CT 124 `homarr` | WWW-Redirect | erreichbar |
- | `dns.ls-cloud.biz` | `192.168.178.87:5380` | CT 117 `technitium-dns` | Technitium DNS Web UI | erreichbar |
+ | `termix.ls-cloud.biz` | `192.168.178.95:8080` | CT 110 `termix` | Termix 2.2.1 (SSH/RDP/VNC) | via Authelia geschuetzt |
+ | `web.ls-cloud.biz` | `192.168.178.79:80` | CT 111 `webserver` | Webserver | erreichbar |
+ | `terminal.ls-cloud.biz` | `192.168.178.82:7681` | CT 112 `claude-code` | shellinabox / Claude Code | erreichbar |
| `auth.ls-cloud.biz` | `192.168.178.64:9091` | CT 113 `authelia` | Authelia Portal | erreichbar |
+ | `dns.ls-cloud.biz` | `192.168.178.87:5380` | CT 117 `technitium-dns` | Technitium DNS v15.2.0 | erreichbar |
+ | `agent.ls-cloud.biz` | `192.168.178.88:3101` | CT 118 `paperclipai` | PaperclipAI 2026.525.0 | via Authelia geschuetzt |
+ | `pw.ls-cloud.biz` | `192.168.178.91:8080` | CT 121 `vaultwarden` | Vaultwarden 1.35.4 | erreichbar |
| `keep.ls-cloud.biz` | `192.168.178.92:3000` | CT 122 `karakeep` | Karakeep | erreichbar |
- | `cs.ls-cloud.biz` | `192.168.178.93:27016` | CT 123 `cs16` | CS 1.6 Web-Client | erreichbar |
- | `termix.ls-cloud.biz` | `192.168.178.95:8080` | CT 110 `termix` | Termix Web-basierte Serververwaltung mit SSH/RDP | via Authelia vorgeschaltet |
+ | `cs.ls-cloud.biz` | `192.168.178.93:80` | CT 123 `cs16` | CS 1.6 Web-Client | erreichbar |
+ | `ls-cloud.biz` | `192.168.178.94:7575` | CT 124 `homarr` | Homarr v0.16.0 | erreichbar |
+ | `www.ls-cloud.biz` | Redirect auf `ls-cloud.biz` | CT 124 | Redirect | erreichbar |
| `norish.ls-cloud.biz` | `192.168.178.96:3000` | CT 125 `norish` | Norish Rezept-App | erreichbar |
- | `transcode.ls-cloud.biz` | `192.168.178.73:8265` | CT 126 `tdarr` | Tdarr Medien-Transcoder (Intel QSV) | erreichbar |
+ | `transcode.ls-cloud.biz` | `192.168.178.73:8265` | CT 126 `tdarr` | Tdarr (Intel QSV) | erreichbar |
+ | `bot.ls-cloud.biz` | `192.168.178.97:5001` | CT 128 `bot` | Freqtrade MrXScalper Dashboard | via Authelia geschuetzt |
+ | `note.ls-cloud.biz` | `192.168.178.98:80` | CT 129 `burningnotes` | BurningNotes | erreichbar |
+ | `sh0rt.biz` | `192.168.178.99:80` | CT 130 `lstools` | URL-Shortener | erreichbar |
+ | `priv.sh0rt.biz` | `192.168.178.99:80` | CT 130 `lstools` | BurningNotes (sh0rt.biz) | erreichbar |
+ | `panel.ls-cloud.biz` | `192.168.178.89:80` | CT 119 `azeroth` | WoW Webpanel (FusionCMS) | bewusst gestoppt |
+ | `games.ls-cloud.biz` | `192.168.178.84:8080` | CT 114 `games` | EmulatorJS | bewusst gestoppt |
+ | `net.ls-cloud.biz` | `192.168.178.72:3000` | CT 107 `monitoring` | ntopng | bewusst gestoppt |
{{DataTable}}
@@ 43,7 44,7 @@
> [!IMPORTANT]
> Gestoppte Container erklaeren oft auch oeffentliche Fehlerbilder direkt. Erst Backend-Status pruefen, dann Caddy verdaechtigen.
- - `web.ls-cloud.biz` haengt am Zustand von **CT 111**
- - `terminal.ls-cloud.biz` ist ein Webterminal, kein normaler Webdienst im klassischen Sinn
- - `termix.ls-cloud.biz` ist mit Authelia vor dem Termix-Backend abgesichert
- - **Nicht jeder gestoppte CT ist ein Fehlerbild**: `net`, `games` und `panel` koennen bewusst stillgelegt sein, um Ressourcen zu sparen.
+ - `termix.ls-cloud.biz` und `agent.ls-cloud.biz` sind mit Authelia vor dem Backend abgesichert
+ - `bot.ls-cloud.biz` ist Freqtrade-Dashboard (live Binance-Trading — vorsichtig)
+ - **CT 110** ist jetzt Termix (frueheres Pi-hole/DNS). DNS laeuft auf CT 117 Technitium.
+ - Nicht jeder gestoppte CT ist ein Fehlerbild: `net`, `games` und `panel` sind bewusst stillgelegt.
storage-und-mounts.md ..
@@ 16,7 16,6 @@
| CT | Name | Rootfs |
|---|---|---|
- | 100 | guacamole | `local-lvm:vm-100-disk-0,size=8G` |
| 101 | jellyfin | `local-lvm:vm-101-disk-0,size=16G` |
| 102 | pbs | `local-lvm:vm-102-disk-0,size=50G` |
| 103 | fileserver | `local-lvm:vm-103-disk-0,size=8G` |
@@ 38,7 37,6 @@
| CT | Name | Host-Pfad | Ziel im CT | Art | Zweck |
|---|---|---|---|---|---|
- | 100 | guacamole | `/dev/net/tun` | `dev/net/tun` | bind file | TUN-Device |
| 101 | jellyfin | `/mnt/storage/fileserver/media` | `srv/media` | bind dir | Medienbibliothek |
| 102 | pbs | `/mnt/storage/pbs-datastore` | `mnt/datastore` | bind dir | Backup-Datastore |
| 103 | fileserver | `/mnt/storage/fileserver` | `srv/storage` | bind dir | Dateidaten |
vm-201-macos-sequoia.md ..
@@ 1,189 1,19 @@
- # VM 201 – macOS Sequoia (Hackintosh)
-
- Stand: April 2026
-
- > [!NOTE]
- > macOS Sequoia als KVM-VM auf Proxmox. Läuft über OpenCore-Bootloader mit SMBIOS-Spoofing – kein nativer Apple-Support, aber vollständig funktionsfähig inkl. iCloud.
-
- ## Basisdaten
-
- | Parameter | Wert |
- |---|---|
- | **VM-ID** | `201` |
- | **Name** | `macos-sequoia` |
- | **OS** | macOS Sequoia 15.6.1 (24G90) |
- | **CPU** | `host` passthrough, 4 Cores |
- | **RAM** | 8.192 MB |
- | **Firmware** | OVMF (UEFI), kein Secure Boot |
- | **Machine** | q35 |
- | **Display** | VMware SVGA |
- | **Netzwerk** | vmxnet3, DHCP |
-
- ## Disk-Übersicht
-
- | Slot | LVM-Volume | Inhalt | Größe |
- |---|---|---|---|
- | `efidisk0` | `vm-201-disk-0` | OVMF UEFI NVRAM | 4 MB |
- | `sata0` | `vm-201-disk-1` | macOS BaseSystem (Recovery-Image) | 1,3 GB |
- | `sata2` | `vm-201-disk-3` | Macintosh HD (macOS-Installation) | 100 GB |
- | `sata3` | `vm-201-disk-2` | OpenCore v21 Bootloader (GPT-Disk) | 152 MB |
-
- **Boot-Reihenfolge:** `sata3` (OpenCore) → `sata0` (BaseSystem) → `sata2` (Macintosh HD)
-
- ## Bootloader – OpenCore
-
- - **Projekt:** [KVM-Opencore v21](https://github.com/thenickdude/KVM-Opencore) (REL-100, März 2024)
- - **SMBIOS:** `iMacPro1,1`
- - **SecureBootModel:** `j137` (T1-Chip-Simulation – für iCloud zwingend erforderlich)
- - **ScanPolicy:** `0x0` (alle Disk-Typen)
+ # VM 201 – macOS Sequoia (Versuchsobjekt)
> [!WARNING]
- > Das OpenCore-„ISO" ist kein echtes ISO 9660, sondern ein **raw GPT-Disk-Image**. Es muss als **SATA-Disk** (nicht als CD-ROM) eingebunden werden – sonst findet OVMF keinen Bootloader.
+ > Diese Seite ist derzeit **kein Erfolgsbericht**, sondern nur ein Platzhalter für einen unvollständigen macOS-/Hackintosh-Versuch auf Proxmox. Die VM existiert aktuell zwar, aber die frühere Beschreibung als vollständig funktionsfähig ist für den jetzigen Stand nicht belastbar.
- ## SMBIOS-Seriennummern (iCloud-fähig)
+ ## Aktueller Stand
| Feld | Wert |
|---|---|
- | SystemSerialNumber | `C02YJRZXHX87` |
- | MLB | `C02914310QXJG361M` |
- | SystemUUID | `6B7D3ACC-FA73-4437-94ED-3CEF31EF773C` |
- | ROM | `BC2411E13CD2` (= VM-MAC ohne Doppelpunkte) |
-
- ## OpenCore config.plist bearbeiten
-
- > [!IMPORTANT]
- > Nur bei **gestoppter VM** durchführen.
-
- ```bash
- qm stop 201
- mkdir -p /mnt/oc_efi
- losetup -f --show -o $((40*512)) /dev/pve/vm-201-disk-2 # gibt /dev/loopX aus
- mount /dev/loopX /mnt/oc_efi
- nano /mnt/oc_efi/EFI/OC/config.plist
- umount /mnt/oc_efi && losetup -d /dev/loopX
- qm start 201
- ```
-
- ## iCloud & Apple-Dienste
-
- | Dienst | Status |
- |---|---|
- | iCloud Drive, Fotos, Keychain | ✅ funktioniert |
- | App Store | ✅ funktioniert |
- | iMessage / FaceTime | ⚠️ manchmal blockiert – 24h warten, dann nochmal |
- | Handoff, AirDrop, Sidecar | ❌ kein Bluetooth/WLAN in VM |
- | GPU-Beschleunigung | ❌ kein Passthrough |
- | Sleep / Standby | ❌ in macOS deaktivieren |
-
- **Troubleshooting „Prüfung fehlgeschlagen":**
- 1. SecureBootModel muss `j137` sein (nicht `Disabled`)
- 2. iPhone/iPad: Einstellungen → Apple-ID → Passwort & Sicherheit → Bestätigungsdialog?
- 3. Nochmal versuchen oder kurz über anderen IP-Bereich (Hotspot)
-
- ## Neue SMBIOS-Seriennummern generieren
-
- ```bash
- # macserial herunterladen (einmalig)
- curl -L https://github.com/acidanthera/OpenCorePkg/releases/download/1.0.7/OpenCore-1.0.7-RELEASE.zip -o /tmp/oc.zip
- unzip /tmp/oc.zip 'Utilities/macserial/macserial.linux' -d /tmp/oc/
- chmod +x /tmp/oc/Utilities/macserial/macserial.linux
-
- # 3 Seriennummern generieren, einen Satz auswählen
- /tmp/oc/Utilities/macserial/macserial.linux -m iMacPro1,1 -n 3
-
- # EFI mounten und patchen
- qm stop 201
- losetup -f --show -o $((40*512)) /dev/pve/vm-201-disk-2
- mount /dev/loopX /mnt/oc_efi
-
- python3 << 'PYEOF'
- import plistlib, uuid
- with open('/mnt/oc_efi/EFI/OC/config.plist', 'rb') as f:
- p = plistlib.load(f)
- pi = p['PlatformInfo']['Generic']
- pi['SystemSerialNumber'] = 'NEUE_SERIAL' # ← anpassen
- pi['MLB'] = 'NEUE_MLB' # ← anpassen
- pi['SystemUUID'] = str(uuid.uuid4()).upper()
- pi['ROM'] = bytes.fromhex('BC2411E13CD2')
- with open('/mnt/oc_efi/EFI/OC/config.plist', 'wb') as f:
- plistlib.dump(p, f)
- print('Fertig:', pi['SystemSerialNumber'])
- PYEOF
-
- umount /mnt/oc_efi && losetup -d /dev/loopX
- qm start 201
- ```
-
- ---
-
- ## VM vollständig entfernen (Rollback)
-
- > [!WARNING]
- > Diese Schritte löschen die VM und **alle zugehörigen Daten unwiderruflich**. Kein Backup nötig, aber sicher sein.
-
- ### Schritt 1 – VM stoppen und vollständig löschen
-
- ```bash
- qm stop 201
- qm destroy 201 --purge
- ```
-
- `--purge` entfernt automatisch alle LVM-Volumes:
- - `vm-201-disk-0` (EFI NVRAM, 4 MB)
- - `vm-201-disk-1` (BaseSystem, 1,3 GB)
- - `vm-201-disk-2` (OpenCore, 152 MB)
- - `vm-201-disk-3` (Macintosh HD, 100 GB)
- - `/etc/pve/qemu-server/201.conf`
-
- ### Schritt 2 – Heruntergeladene Dateien entfernen
-
- ```bash
- # OpenCore ISO aus local-Storage
- rm -f /var/lib/vz/template/iso/OpenCore-v21.iso
-
- # BaseSystem-Dateien auf HDD (hdd5tb)
- rm -f /mnt/storage/pve-data/iso/BaseSystem.dmg
- rm -f /mnt/storage/pve-data/iso/BaseSystem.img
- rm -f /mnt/storage/pve-data/iso/BaseSystem.chunklist
-
- # OSX-KVM Projektverzeichnis
- rm -rf /opt/OSX-KVM
-
- # macserial / OpenCorePkg (falls vorhanden)
- rm -rf /tmp/oc/ /tmp/oc.zip /tmp/oc107* /tmp/oc107.zip
- ```
-
- ### Schritt 3 – Optionale Aufräumarbeiten
-
- ```bash
- # Mount-Verzeichnisse entfernen
- rmdir /mnt/oc_efi /mnt/macos_installer 2>/dev/null || true
-
- # Tools deinstallieren (nur wenn nicht anderweitig genutzt)
- apt remove -y dmg2img p7zip-full
- ```
-
- ### Verifikation – alles weg?
-
- ```bash
- qm list # VM 201 darf nicht erscheinen
- lvs | grep vm-201 # darf keine Ausgabe liefern
- ls /var/lib/vz/template/iso/ | grep -i opencore
- ls /mnt/storage/pve-data/iso/ | grep -iE 'base|opencore'
- ls /opt/OSX-KVM 2>/dev/null && echo 'NOCH DA' # nichts ausgeben = OK
- ```
-
- ---
-
- ## Prüfung / Status
-
- ```bash
- qm status 201
- qm config 201
- ```
+ | VM-ID | `201` |
+ | Name | `macos-sequoia` |
+ | Status | aktuell gestoppt |
+ | Einordnung | unfertiger Versuch / nicht operativ genutzt |
- ## Verwandte Seiten
+ ## Operative Regel
- - [[container-und-vms]]
- - [[vm-200-windows11pro]]
- - [[infrastruktur-uebersicht]]
+ - Diese VM nicht als produktiv oder funktionsfähig dokumentieren
+ - Vor neuen macOS-Versuchen zuerst sauber planen, welches Medium und welcher Bootpfad wirklich genutzt werden sollen
+ - Alte Detailbehauptungen zu iCloud, OpenCore-Versionen oder „vollständig funktionsfähig“ gelten hier bewusst nicht als aktuelle Wahrheit
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9