1 Architecture
vr6syncro edited this page 2026-07-07 06:32:42 +02:00

Architektur

Komponenten

Der Helper ist ein duenner Wrapper um den offiziellen TafForge-Installer. Er besteht aus host-seitigen und LXC-internen Skripten.

Host-seitig (laeuft auf dem Proxmox-VE-Host)

  • ct/teddytafforge.sh — Entry-Point. Quellt misc/build.func, fragt Scope + Einstellungen per whiptail ab, legt den unprivilegierten LXC an (pct create), bootet Debian 13 und delegiert per pct exec an den LXC-internen Installer.
  • ct/update.sh — Convenience-Updater: waehlt per whiptail einen TafForge-LXC (Hostname *tafforge*/*teddy* oder Meta-Datei /etc/tafforge/proxmox.meta) und ruft darin den autoritativen Updater auf.
  • misc/build.func — geteilte Host-Helfer (Farben, ERR-Trap _on_err, catch_errors, pve_check, default_settings, build_container, description, DEBUG/xtrace).

LXC-intern (laeuft im frisch erzeugten Container)

  • install/teddytafforge-install.sh — Delegator: klont App-Code (Backend/Frontend/Plugin) vom GitHub-Mirror github.com/vr6syncro/TeddyTafForge, legt den vendored install/-Stack daneben und ruft install/lxc/install.sh (Upstream-Installer verbatim) auf. Schreibt danach /etc/tafforge/proxmox.meta.
  • install/all-in-one-install.sh — Orchestrator: installiert erst TeddyCloud, dann TafForge; setzt TEDDYCLOUD_URL, TEDDYCLOUD_DATA_DIR=/opt/teddycloud/data, TAFFORGE_TOPOLOGY=all-in-one, PLUGIN_ROOT_REQUIRED=1.
  • install/teddycloud-install.sh — nativer TeddyCloud-Build aus Quellcode (make zip, kein Docker), Layout unter /opt/teddycloud/, systemd-Unit teddycloud.service. Default-Ref tc_v0.6.8.
  • misc/install.func — geteilte LXC-interne Helfer (network_check, setting_up_container, update_os, msg_*).

Vendored Stack

  • vendor/tafforge-install/lib/ und lxc/ aus dem Upstream-TafForge-Repo (Installer, systemd-Unit tafforge.service, tafforge.env.sample, update-app.sh, update-ytdlp.sh, Topologie-/Python-Erkennung). Wird bei Upstream-Aenderungen per Refresh synchron gehalten; CI prueft Drift.

Datenfluss

flowchart TD
    subgraph HOST["Proxmox VE Host (root)"]
        CT["ct/teddytafforge.sh<br/>whiptail-Dialoge"]
        BF["misc/build.func"]
        UPD["ct/update.sh"]
    end

    subgraph LXC["Unprivilegierter LXC (Debian 13)"]
        DEL["install/teddytafforge-install.sh"]
        AIO["install/all-in-one-install.sh"]
        TCI["install/teddycloud-install.sh"]
        VEN["install/lxc/install.sh<br/>(vendored Upstream)"]
        IF["misc/install.func"]
        TAF["tafforge.service :3000"]
        TC["teddycloud.service :80/443/8443"]
        META["/etc/tafforge/proxmox.meta"]
    end

    subgraph EXT["Externe Quellen"]
        GH["github.com/vr6syncro/TeddyTafForge<br/>(App-Code)"]
        TCSRC["github.com/toniebox-reverse-engineering<br/>teddycloud (Quellcode)"]
        FJ["Forgejo raw:<br/>misc/*.func, vendor/*"]
    end

    CT -->|source| BF
    CT -->|pct create + pct exec| DEL
    CT -.->|Scope all-in-one| AIO
    AIO -->|Schritt 1/2| TCI
    AIO -->|Schritt 2/2| DEL
    TCI -->|git clone + make zip| TCSRC
    TCI --> TC
    DEL -->|git clone App| GH
    DEL -->|vendored install/| VEN
    DEL --> IF
    VEN --> TAF
    DEL --> META
    UPD -->|pct exec update-app.sh| TAF
    BF -.->|raw fetch| FJ

    classDef host fill:#dbeafe,stroke:#1e40af,color:#1e3a8a;
    classDef lxc fill:#dcfce7,stroke:#166534,color:#14532d;
    classDef ext fill:#fef3c7,stroke:#92400e,color:#78350f;
    class CT,BF,UPD host;
    class DEL,AIO,TCI,VEN,IF,TAF,TC,META lxc;
    class GH,TCSRC,FJ ext;

Topologien

Scope Inhalt TeddyCloud-Quelle
sidecar Nur TafForge Bestehende TC anderswo; optional Bind-Mount mp0 der TC-Datenverzeichnisses
all-in-one TafForge + TeddyCloud im selben LXC Nativer Build unter /opt/teddycloud/, Plugin-Ziel data/www/plugins/

Im Sidecar-Modus wird das TeddyCloud-Datenverzeichnis als mp0 mit backup=0 gemountet, damit ein vzdump des TafForge-LXC die TC-Daten nicht mitzieht.

Quelle: ct/*.sh, install/*.sh, misc/*.func, vendor/README.md.