From 78b8e68f9fe72a06c40fa4fcd97788d26909696c Mon Sep 17 00:00:00 2001 From: Herb Date: Mon, 13 Jul 2026 13:17:14 +0200 Subject: [PATCH] README auf Pull-Workflow umstellen, Push-Teil als Legacy markieren Co-Authored-By: Claude Fable 5 --- README.md | 178 +++++++++++++++++------------------------------------- 1 file changed, 56 insertions(+), 122 deletions(-) diff --git a/README.md b/README.md index 3fbbe6b..d4f566a 100644 --- a/README.md +++ b/README.md @@ -1,144 +1,78 @@ -# Ansible Setup - Schul-Laptops +# schul-laptops -12 Linux Mint Laptops verwalten mit Ansible + Clonezilla Backup. +12–16 Linux-Mint-Laptops verwalten: **ansible-pull** (laufende Updates) + +**Clonezilla** (Komplett-Image ~1×/Jahr). Ueberblick: `COCKPIT.md` · Status: +`CLAUDE.md` · Architektur: `docs/architektur.md`. -## Erstes Setup (einmalig auf diesem Rechner) +## So funktioniert es (Normalfall) -### 1. Passwordless Sudo einrichten +Jeder Laptop zieht sich alle 30 Minuten (und bei jedem Boot) selbst dieses Repo +von `https://git.lehrstun.de/admin/schul-laptops.git` und fuehrt `local.yml` aus. +Es gibt keinen Push mehr — das Schul-WLAN laesst das nicht zu. -Damit Ansible ohne Passwort arbeiten kann: +**Aenderung ausrollen:** ```bash -sudo visudo +cd ~/projekte/schul-laptops +# z.B. Paket ergaenzen in group_vars/all.yml oder Task in local.yml +git add -A && git commit -m "..." && git push +# fertig — die Laptops holen es sich beim naechsten Timer-Lauf ``` -Am Ende hinzufuegen: -``` -puettmann ALL=(ALL) NOPASSWD: ALL -``` - -Speichern mit `Ctrl+X`, dann `Y`, dann `Enter`. - -### 2. Inventory anpassen - -Bearbeite `inventory.yml` und trage die richtigen IP-Adressen ein: +**Auf einem Laptop nachsehen:** ```bash -nano ~/ansible-schule/inventory.yml +systemctl list-timers ansible-pull* # laeuft der Timer? +journalctl -u ansible-pull -n 50 # letztes Pull-Log +sudo systemctl start ansible-pull.service # sofort ziehen statt warten ``` -## Workflow: Image auf andere Rechner spielen +## Komplett-Image (~1×/Jahr, nach den Ferien) -### Schritt 1: Image erstellen (Clonezilla) +Details in `CLONEZILLA_AUTOMATISCH.md`. Kurzfassung: -1. Clonezilla Live USB-Stick erstellen -2. Von USB booten -3. "device-image" → "savedisk" waehlen -4. Image auf externen Datentraeger speichern - -### Schritt 2: Image auf Clients aufspielen - -1. Von Clonezilla USB booten -2. "device-image" → "restoredisk" waehlen -3. Image auswaehlen, auf Festplatte spielen - -### Schritt 3: First-Boot Setup (auf jedem geklonten Rechner) - -```bash -sudo ~/ansible-schule/files/first-boot-setup.sh laptop05 -``` - -(Ersetze `laptop05` durch den jeweiligen Hostnamen) - -## Ansible Befehle - -Alle Befehle aus dem Verzeichnis `~/ansible-schule` ausfuehren: - -```bash -cd ~/ansible-schule -``` - -### Alle Rechner pingen -```bash -ansible-playbook playbooks/ping.yml -``` - -### System-Update auf allen Clients -```bash -ansible-playbook playbooks/update.yml -``` - -### Software installieren -```bash -# Standard-Pakete (in der Datei definiert) -ansible-playbook playbooks/install-software.yml - -# Bestimmte Pakete -ansible-playbook playbooks/install-software.yml -e "packages=['firefox','vlc','gimp']" -``` - -### Nur bestimmte Rechner -```bash -ansible-playbook playbooks/update.yml --limit laptop05,laptop06 -``` - -### Alle Clients neustarten -```bash -ansible-playbook playbooks/reboot.yml -``` - -### Schnelle Befehle ohne Playbook -```bash -# Shell-Befehl auf allen Clients -ansible clients -m shell -a "df -h" - -# Paket installieren -ansible clients -m apt -a "name=htop state=present" --become - -# Datei kopieren -ansible clients -m copy -a "src=./files/test.txt dest=/tmp/" -``` +- **Erstinstallation:** Clonezilla-USB-Stick + externe Platte `DEZNTRSICHERUNG`, + danach einmalig `sudo files/first-boot-setup.sh laptopXX` (vergibt den Namen). +- **Danach ohne Stick:** Platte anstecken, Laptop einschalten. Ist das neueste + Image auf der Platte neuer als das installierte, bespielt sich der Laptop + selbst neu — der Hostname bleibt erhalten. +- **Neues Master-Image:** auf laptop03 im GRUB-Menue „Schul-Neuinstallation“ + waehlen → „IMAGE ERSTELLEN“. ## Verzeichnisstruktur ``` -~/ansible-schule/ -├── ansible.cfg # Ansible-Konfiguration -├── inventory.yml # Liste aller Laptops mit IPs -├── README.md # Diese Datei -├── playbooks/ -│ ├── ping.yml # Erreichbarkeit testen -│ ├── update.yml # System-Updates -│ ├── install-software.yml -│ ├── reboot.yml -│ └── set-hostname.yml -└── files/ - └── first-boot-setup.sh # Nach Klonen ausfuehren +~/projekte/schul-laptops/ +├── local.yml # DAS Playbook (laeuft per ansible-pull auf jedem Laptop) +├── group_vars/all.yml # Paketliste u.a. Variablen +├── files/ +│ ├── schul-pull.sh # Pull-Wrapper (HTTPS, SSH-Fallback) +│ ├── ansible-pull.service # systemd-Units +│ ├── ansible-pull.timer +│ └── first-boot-setup.sh # einmalig nach Erstinstallation +├── docs/ # Architektur, Entscheidungslog +└── playbooks/, inventory.yml, update-ips.sh, ansible.cfg # LEGACY, s.u. ``` +## Legacy: Push-Betrieb (nur Heimnetz) + +Das alte Push-Setup funktioniert weiterhin, aber **nur wenn die Laptops im +eigenen WLAN haengen** (Schul-WLAN blockiert SSH/mDNS zwischen Geraeten): + +```bash +./update-ips.sh # IPs per mDNS einsammeln +ansible-playbook playbooks/ping.yml # Erreichbarkeit +ansible-playbook playbooks/update.yml # Updates pushen +ansible clients -m shell -a "df -h" # Ad-hoc-Befehl +``` + +Voraussetzung auf neuen Controllern: passwordless sudo fuer `puettmann` +(`sudo visudo` → `puettmann ALL=(ALL) NOPASSWD: ALL`). + ## Problemloesungen -### "Permission denied" bei SSH -```bash -# SSH-Key manuell kopieren -ssh-copy-id puettmann@192.168.1.105 -``` - -### Rechner nicht erreichbar -```bash -# Einzelnen Rechner testen -ansible laptop05 -m ping -vvv -``` - -### Host-Key Warnung -Ist in ansible.cfg deaktiviert. Falls es trotzdem auftritt: -```bash -ssh-keygen -R 192.168.1.105 -``` - -## Tipps - -1. **Bandbreite sparen:** Updates nachts oder gestaffelt ausfuehren -2. **Grosse Aenderungen:** Besser per Clonezilla-Image -3. **Kleine Aenderungen:** Ansible (schneller, kein Neustart) -4. **Testen:** Erst mit `--limit laptop05` auf einem Rechner testen +- **Laptop zieht nichts:** `journalctl -u ansible-pull` — HTTPS blockiert? Dann + greift automatisch der SSH-Fallback (Port 2222, Deploy-Key unter /root/.ssh). +- **Pull sofort ausloesen:** `sudo systemctl start ansible-pull.service` +- **Push: Permission denied:** `ssh-copy-id puettmann@`; + Host-Key-Warnung: `ssh-keygen -R `