84 lines
3.4 KiB
Markdown
84 lines
3.4 KiB
Markdown
# 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`)
|
|
|
|
---
|
|
|
|
### 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 <name>`, `lxc delete <name>`.
|
|
- **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 <alias>`.
|
|
|
|
### Port-Verwaltung (falls genutzt)
|
|
|
|
Das Skript richtet eine Port-Weiterleitung namens `ssh-proxy` ein.
|
|
|
|
* **Anzeigen:** `lxc config show <container-name>`
|
|
* **Entfernen:** `lxc config device remove <container-name> ssh-proxy`
|
|
|
|
``` |