# schul-laptops 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`. ## So funktioniert es (Normalfall) 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. **Aenderung ausrollen:** ```bash 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 ``` **Auf einem Laptop nachsehen:** ```bash 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 ``` ## Komplett-Image (~1×/Jahr, nach den Ferien) Details in `CLONEZILLA_AUTOMATISCH.md`. Kurzfassung: - **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 ``` ~/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 - **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 `