Files
linux-workstations/docs/postinstall-ansible.md
egon 41c9ae303c feat: vollst. Installations-Doku, Ansible-Rollen ausimplementiert, claude_workspace-Rolle
- docs/installation.md: Netinstall + Dualboot Schritt-für-Schritt (LUKS nur am Notebook)
- docs/postinstall-ansible.md: Ablauf + restmanuelle Schritte
- roles/base: APT-Sources mit non-free-firmware + Backports, Locale, Tastatur, Zeitzone, Grundpakete
- roles/desktop_kde: Plasma 6 + SDDM (ohne Recommends, kompakt)
- roles/hardening: SSH key-only, UFW, unattended-upgrades
- roles/dev_tools: Node.js via NodeSource, Python, Perl, Git-Defaults
- roles/workstation_apps: Firefox, Thunderbird, LibreOffice, Codecs, KeePassXC
- roles/claude_workspace (NEU): Claude Code + ccusage, SSH-Key für Gitea, Workspace-Clone (recurse-submodules), ~/.claude/settings.json
- site.yml: alle Rollen mit Tags
2026-05-17 21:46:23 +02:00

2.8 KiB

Postinstall via Ansible

Voraussetzung: Debian-Grundinstallation läuft, SSH-Login per Key funktioniert (siehe installation.md).

1. Ansible auf dem Admin-Rechner

Ansible kann von jedem Rechner ausgeführt werden, der die Zielmaschinen per SSH erreicht und Python 3 hat. Empfohlen: die erste fertige Linux-Workstation wird zum Admin-Rechner für die nächsten.

Initial vom Windows-Rechner (WSL/Git-Bash) reicht auch:

# Linux/WSL
sudo apt install -y ansible
# oder via pipx
pipx install ansible-core

2. Ablauf

cd ~/Claude/linux-workstations

# Verbindungstest
ansible -i ansible/inventory.yml notebook -m ping

# Trockenlauf
ansible-playbook -i ansible/inventory.yml ansible/site.yml --limit notebook --check --diff

# Echter Run
ansible-playbook -i ansible/inventory.yml ansible/site.yml --limit notebook

Die Playbook-Ausführung dauert beim ersten Mal ~20 min (KDE-Plasma-Pakete sind groß).

3. Was nach site.yml fertig ist

  • Debian-Basis mit allen Updates, deutsche Locale, Zeitzone Berlin
  • KDE Plasma 6 + SDDM (Login-Manager) — Reboot fällig
  • SSH gehärtet (Key-only), UFW aktiv (nur SSH offen), unattended-upgrades an
  • Git, Node.js, Python, Editor, Browser, LibreOffice, Codecs
  • Claude Code + ccusage installiert, ~/.claude/settings.json mit Statusline gesetzt
  • ~/Claude geklont (--recurse-submodules), Git-User auf egon konfiguriert
  • SSH-Key für Gitea generiert (~/.ssh/id_ed25519_gitea), known_hosts für docker.egonlebt.lan:2222 vorpopuliert

4. Restmanuelle Schritte

Diese zwei Dinge muss man pro Maschine selbst tun — beides je 1 Minute.

4.1 SSH-Public-Key auf Gitea hochladen

Am Ende des Ansible-Runs zeigt die Rolle claude_workspace den Public-Key an. Wenn der Run schon vorbei ist:

ssh tom@notebook 'cat ~/.ssh/id_ed25519_gitea.pub'

→ in http://docker.egonlebt.lan:3000/user/settings/keys als neuen SSH-Key einfügen, Name z.B. notebook-tom.

Danach auf dem Zielrechner einmal:

ssh -i ~/.ssh/id_ed25519_gitea -T git@docker.egonlebt.lan -p 2222
# Antwort: "Hi there, egon! You've successfully authenticated…"

4.2 Claude Code anmelden

Direkt am Zielrechner (oder per ssh -t):

claude
# → folgt dem Browser-Login-Flow einmalig

Danach ist die Maschine voll einsatzbereit. Statusline, Hooks (Auto-Pull beim Start, Auto-Commit/Push beim Stop), MCP-Server (paperless, imap, ssh-infra) — alles aktiv, weil Konfiguration im Repo liegt.

5. Wartung

# Alles aktualisieren (nur APT-Pakete + Konfig-Drift heilen):
ansible-playbook -i ansible/inventory.yml ansible/site.yml

# Eine einzelne Rolle:
ansible-playbook -i ansible/inventory.yml ansible/site.yml --tags claude_workspace

# Eine einzelne Maschine:
ansible-playbook -i ansible/inventory.yml ansible/site.yml --limit werkstatt