2026-07-13 13:17:14 +02:00

schul-laptops

1216 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:

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:

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):

./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 visudopuettmann 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@<IP>; Host-Key-Warnung: ssh-keygen -R <IP>
Description
Zentrale Verwaltung der Schul-Laptops: ansible-pull + Clonezilla-Jahres-Reimage
Readme 64 KiB
Languages
Shell 100%