Container aus dem Proxmox-Template (neueste passende Version aus aplinfo), unprivilegiert, nesting automatisch für docker. Weil Proxmox keine Exec-API für Container hat, läuft die Provisionierung per SSH: bevorzugt pct exec über den Node, sonst direkt in den Container mit einem Bereitstellungsschlüssel, der am Ende wieder entfernt wird. Auf pve-demo beide Wege geprüft: Debian 13 mit docker per pct exec (hello-world läuft mit nesting allein) und Ubuntu 24.04 per SSH in den Container. Dabei gefunden: chrony scheitert ohne CAP_SYS_TIME (jetzt if: vm), sshd -t auf Ubuntu 24.04 ohne /run/sshd. Closes #009 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
32 lines
1.4 KiB
YAML
32 lines
1.4 KiB
YAML
# Grundausstattung für jeden Gast. Platzhalter: {{ var.<name> }} aus den Variablen unten,
|
|
# {{ os.id }}, {{ os.version_id }}, {{ os.codename }} aus der Distribution,
|
|
# {{ guest.name }}, {{ guest.user }} aus dem Deployment. `a ?? b` nimmt b, wenn a leer ist.
|
|
# Bedingungen: `if: <variable>`, dazu fest `if: vm` / `if: lxc`.
|
|
id: base
|
|
name: Basis
|
|
description: Updates, Guest-Agent, Zeitzone, Locale, Tastatur, automatische Sicherheitsupdates, Zeitsync, SSH-Härtung
|
|
variables:
|
|
- { name: zeitzone, label: Zeitzone, default: Europe/Berlin }
|
|
- { name: locale, label: Locale, default: de_DE.UTF-8 }
|
|
- { name: tastatur, label: Tastaturbelegung, default: de }
|
|
- { name: fail2ban, label: fail2ban installieren, type: boolean, default: false, help: Sperrt Adressen nach wiederholten SSH-Fehlversuchen. }
|
|
families:
|
|
debian:
|
|
- update: true
|
|
- guest_agent: true
|
|
- timezone: "{{ var.zeitzone }}"
|
|
- locale: "{{ var.locale }}"
|
|
- keyboard: "{{ var.tastatur }}"
|
|
- packages: [sudo, curl, ca-certificates]
|
|
# Zeitsync nur in VMs: ein unprivilegierter Container darf die Uhr nicht stellen, er nimmt die des Hosts.
|
|
- packages: [chrony]
|
|
if: vm
|
|
- service: { name: chrony, enable: true, start: true }
|
|
if: vm
|
|
- unattended_upgrades: true
|
|
- ssh_harden: { password_auth: false, root_login: false }
|
|
- packages: [fail2ban]
|
|
if: fail2ban
|
|
- service: { name: fail2ban, enable: true, start: true }
|
|
if: fail2ban
|