# Anleitung: Automatisierte Erstellung mehrerer LXC-Container ## Übersicht Dieses Projekt automatisiert die Erstellung und Konfiguration von LXC-Containern mit verschiedenen Linux-Distributionen. Es besteht aus zwei Python-Skripten: 1. `setup_host.py`: Das **Haupt-Skript**, das Sie ausführen. Es orchestriert die Erstellung und Konfiguration von einem oder mehreren Containern. 2. `setup_container.py`: Ein **Hilfs-Skript**, das vom Haupt-Skript automatisch in jeden neuen Container kopiert und dort ausgeführt wird, um die interne Konfiguration (Benutzer, SSH, etc.) vorzunehmen. Sie interagieren nur mit `setup_host.py`. ## Voraussetzungen - **LXD installiert:** Sie müssen LXD auf Ihrem Host-System installiert und konfiguriert haben. Führen Sie bei Bedarf `lxd init` aus, um LXD zu initialisieren. - **Benutzerrechte:** Der Benutzer, der das Skript ausführt, muss Mitglied der `lxd`-Gruppe sein, um Container erstellen und verwalten zu dürfen. ## Benutzung ### Schritt 1: Skripte ausführbar machen ```bash chmod +x setup_host.py setup_container.py ``` ### Schritt 2: Haupt-Skript ausführen Führen Sie `setup_host.py` aus. Das Skript akzeptiert verschiedene Argumente, um den Erstellungsprozess anzupassen. #### Wichtige Argumente * `-c`, `--count`: Die Gesamtanzahl der Container. (Standard: `1`) * `-p`, `--root-password`: **(Erforderlich)** Das Passwort für `root` und `jonnybravo`. * `--image`: Das zu verwendende Image. (Standard: `images:archlinux`) * `--hostname-template`: Vorlage für die Namen der Container. Unterstützt `{basename}` und `{i}`. **Wichtig:** Muss `{i}` enthalten, wenn `--count > 1`. * `-b`, `--basename`: Der Basisname für die Container, falls die Vorlage `{basename}` enthält. (Standard: `vm`) * `--no-port-forward`: Deaktiviert die SSH-Port-Weiterleitung. * `--port-start`: Der Start-Port für die SSH-Weiterleitung, falls diese aktiv ist. (Standard: `2201`) * `--ssh-pub-key-file`: Pfad zu einem öffentlichen SSH-Schlüssel, der für den Benutzer `jonnybravo` hinterlegt werden soll. (Standard: `~/.ssh/id_rsa.pub`) --- ### Anwendungsbeispiele #### Beispiel 1: Standard-Container Erstellt einen einzelnen Arch-Linux-Container, der nur über den Host per Port-Weiterleitung erreichbar ist. ```bash python3 setup_host.py -p "IhrSicheresPasswort" ``` *Ergebnis: Container ist über `ssh root@localhost -p 2201` erreichbar. * #### Beispiel 2: Mehrere Container ohne Port-Weiterleitung Erstellt zwei Ubuntu-Container. Der Zugriff erfolgt hier nur über `lxc exec` oder durch manuelle Konfiguration im Nachhinein, da keine Ports weitergeleitet werden. ```bash python3 setup_host.py \ -c 2 \ -p "EinAnderesSicheresPasswort" \ --image ubuntu:22.04 \ --hostname-template "backend-{i}" \ --no-port-forward ``` *Ergebnis: Container sind nur über die vom Host zugewiesene interne IP oder `lxc exec` erreichbar.* --- ### Ausgabe & Verwaltung - **CSV-Datei:** Alle erstellten Container werden mit Name und IP in `out/clients.csv` geloggt. - **Container-Verwaltung:** Nutzen Sie Standard-Befehle wie `lxc list`, `lxc stop `, `lxc delete `. - **Massen-Löschung:** `lxc list projekt-x --format csv -c n | xargs -I {} lxc delete {} --force` löscht alle Container, die mit `projekt-x` beginnen. - **Image-Verwaltung:** `lxc image list` und `lxc image delete `. ### Port-Verwaltung (falls genutzt) Das Skript richtet eine Port-Weiterleitung namens `ssh-proxy` ein. * **Anzeigen:** `lxc config show ` * **Entfernen:** `lxc config device remove ssh-proxy` ```