XED /CCC — cBOX@ /Container Control
Bash-Bootstrap und Werkzeuge für nested LXC-Stacks auf Proxmox VE 9 mit Debian 13 / Ubuntu 24.04+.
Status: Stufe 1 —
firstboot.shv0.7.0 (DE/EN-TUI, idempotent, ccc-Self-Install) +cccv0.0.1 (Python-Skelett) Lizenz: MIT Distribution: https://ccc.xed.dev (Bash) · https://pypi.org/project/xed-ccc/ (Python)
Schnellstart
In jeder frischen Debian/Ubuntu-LXC-Box als root:
# Pre-Step (minimal-LXC-Templates haben kein curl vorinstalliert):
apt update && apt install -y curl ca-certificates
# firstboot.sh ausführen:
bash <(curl -s https://ccc.xed.dev/firstboot.sh)
Oder als One-Liner:
apt-get update -qq && apt-get install -y -qq --no-install-recommends curl ca-certificates && bash <(curl -s https://ccc.xed.dev/firstboot.sh)
Das setzt Zeitzone, Locales, Default-Editor und Basis-Pakete — alles via Whiptail-TUI im Debian-Installer-Stil. Idempotent: kann beliebig oft wiederholt werden.
UX-Pattern (seit v0.5.0)
- Sechs-Phasen-State-Machine mit
<Zurück>-Button: Sprache → Zeitzone → Locales → Default-Locale → Pakete → Übersicht. Im ersten Dialog ist Cancel = Abort-Confirmation, sonst Cancel = zurück zur vorherigen Phase. - DE/EN-Sprachwahl als allererster Dialog. Alle weiteren Whiptail-Texte sind übersetzt;
info/ok/err-Logs bleiben deutsch. - Idempotente Pre-Selection beim Re-Run:
- Locales: drei-wertige Erkennung via
/etc/locale.gen(ACTIVE/DISABLED/ABSENT). User-Wille wird respektiert — abgewählte Locales kommen nicht als Default-ON wieder. - Pakete: Marker-Datei
/var/lib/xed-ccc/firstboot.appliedtrennt allerersten Run (Skript-Defaults greifen) vom Re-Run (nur dpkg-Ist-Zustand zählt).
- Locales: drei-wertige Erkennung via
- Deselect = Uninstall/Disable: bei Pakete mit Yesno-Confirmation (Daten-Verlust-Schutz), bei Locales ohne (reversibel).
- Optionaler
apt dist-upgrade + autoremove + autoclean-Schritt am Ende, nur wenn Updates verfügbar sind. Yesno-Prompt im interaktiven Modus, ENVDIST_UPGRADE=yesfür Auto-Run.
Non-Interactive (CI / Auto-Provisioning)
TZ=UTC \
LOCALES="de_AT.UTF-8 en_US.UTF-8" \
DEFAULT_LOCALE=de_AT.UTF-8 \
PKGS="htop curl wget sudo psmisc net-tools iproute2 iputils-ping gnupg nano" \
bash <(curl -s https://ccc.xed.dev/firstboot.sh)
TTY-Hinweis
bash <(curl -s URL) (Process Substitution) bewahrt das TTY und erlaubt
interaktive Whiptail-Dialoge. curl URL | bash (klassische Pipe) verbraucht
stdin und erzwingt Non-Interactive-Mode mit ENV-Defaults.
Was firstboot.sh tut
| Phase | Inhalt |
|---|---|
| 0 | Pre-Flight (root-Check, Distro-Check, apt-Bootstrap, TTY-Detect) |
| 1 | Eingaben sammeln (Whiptail bei TTY, ENV-Vars sonst) |
| 2 | Zeitzone setzen (/etc/timezone + /etc/localtime) |
| 3 | Locales generieren + Default-Locale (update-locale → /etc/default/locale) |
| 4 | Basis-Pakete installieren (--no-install-recommends) |
| 5 | EDITOR=nano in /etc/environment (idempotent via grep-vor-write) |
| 5b | Optional: apt dist-upgrade + autoremove + autoclean (Yesno) |
| 6 | Editor-Eintrag |
| 7 | XED /CCC Python-Tool installieren (Yesno) — apt python3-Stack + git clone + venv + symlink |
| 8 | Abschluss-Banner + Marker-Datei |
Bewusst nicht enthalten: Bridge-/iptables-/nested-LXC-Setup. Das kommt
mit lxc-host-setup.sh (Skript 2/3, geplant) als separates Skript für
cBOX-Outer-Container.
Phase 2 — ccc (Python-Tool, ab v0.0.1)
Nach firstboot.sh kommt das Python-Tool für Rollen-Konfiguration —
Pendant zu pct aus Proxmox, aber innerhalb der LXC-Box laufend.
Installation (zwei Wege)
# Variante A — automatisch via firstboot.sh Phase 7 (empfohlen für frische Boxen):
# firstboot.sh fragt nach ccc-Installation, klont Repo nach /opt/xed-ccc/,
# baut venv und symlinkt /usr/local/bin/ccc in einem Schritt.
# Variante B — PyPI (für SysOps die Python kennen, bestehende Boxen):
pipx install xed-ccc # isolierte Tool-Installation (empfohlen)
pip install xed-ccc # System-Python (mit pep668-bypass)
Updates (nach Erst-Installation):
# Variante A — firstboot.sh Re-Run (Phase 7 macht fetch+reset im /opt/xed-ccc/):
bash <(curl -s https://ccc.xed.dev/firstboot.sh)
# Variante B — pipx-Pfad:
pipx upgrade xed-ccc
# Geplant — Self-Update als Python-Verb:
ccc update
Verben (analog pct)
ccc list # verfügbare Rollen mit Status
ccc create pmDESK # Rolle in aktueller Box installieren
ccc create pmDESK --dry-run # nur Plan zeigen
ccc menu # interaktive TUI (Stub, Textual kommt später)
ccc --version
ccc --help
Rollen-Roadmap
| Rolle | Beschreibung | Status |
|---|---|---|
pmDESK |
Debian/Ubuntu Gnome-Desktop (xrdp + Gnome-Stack) | Stub (Plan) |
lxcHOST |
Firewall + Public-IP + Outer-Container für nested LXC | geplant |
osNGINX |
Reverse-Proxy + WordOps | geplant |
commBOX |
Communication-Stack (Mail, DNS, Webmail) | geplant |
Roadmap
| Skript | Zweck | Status |
|---|---|---|
firstboot.sh |
Basis-Setup für jede frische Debian/Ubuntu-Box | Stufe 1, live |
lxc-host-setup.sh |
Outer-Container vorbereiten (Bridge, iptables, nested LXC) | geplant |
ccc-create.sh |
Inner-Container provisionieren (Bash v1) | geplant |
ccc (Python) |
CLI als Pendant zu pct (Typer + Pydantic) |
geplant |
ccc-tui (Python) |
Textual-TUI als Pendant zum Proxmox-Webinterface | geplant |
Architektur und Designentscheidungen: siehe WHITEPAPER.md im
Entwicklungs-Workspace (privat).
Designprinzipien
- Vertrautheit > Eleganz —
ccc≈pctsemantisch,ccc-tui≈ Proxmox-Webinterface - Drei-Skripte-Modell statt Universal-Skript mit Modus-Switch
- Idempotenz (mailinabox-Stil) —
curl ... | bashjederzeit wiederholbar - Kaizen — kleine Schritte, ausprobieren statt endlos planen
- Bash für einmalige Setups, Python für wachsende Werkzeuge
Lizenz
MIT — siehe LICENSE.
Metadata
Release files for xed-ccc 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| xed_ccc-0.2.3.tar.gz | 32.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xed_ccc-0.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 69.4 kB
Release files / xed_ccc-0.2.3.tar.gz
| Download URL | xed_ccc-0.2.3.tar.gz |
|---|---|
| Size | 32.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e384f805633b6c57cd63f66084b3b54231e03a0825ca3e35569628f013c2f0f4
|
|
BLAKE2b-256 checksum How to use checksums |
bcb5b8539de9d9447c19f6fe63d18baedca6f4213482c878cfc630e014dd6d53
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.11
|
Release files / xed_ccc-0.2.3-py3-none-any.whl
| Download URL | xed_ccc-0.2.3-py3-none-any.whl |
|---|---|
| Size | 36.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6bb27f8e84fda4707bc229c2139a3bdccc0a12b7052c95eeecaa23f6392126c4
|
|
BLAKE2b-256 checksum How to use checksums |
169d4d92ae3a8a1134f5bfb6c91466c5b471fbfd150072263866577aeca20bed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.11
|
Security for xed-ccc 0.2.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.