2026-07-13 13:17:14 +02:00
|
|
|
|
# schul-laptops
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
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`.
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
## So funktioniert es (Normalfall)
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
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.
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
**Aenderung ausrollen:**
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-07-13 13:17:14 +02:00
|
|
|
|
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
|
2026-07-13 13:11:24 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
**Auf einem Laptop nachsehen:**
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-07-13 13:17:14 +02:00
|
|
|
|
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
|
2026-07-13 13:11:24 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
## Komplett-Image (~1×/Jahr, nach den Ferien)
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
Details in `CLONEZILLA_AUTOMATISCH.md`. Kurzfassung:
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
- **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“.
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
|
|
|
|
|
## Verzeichnisstruktur
|
|
|
|
|
|
|
|
|
|
|
|
```
|
2026-07-13 13:17:14 +02:00
|
|
|
|
~/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.
|
2026-07-13 13:11:24 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
## Legacy: Push-Betrieb (nur Heimnetz)
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
Das alte Push-Setup funktioniert weiterhin, aber **nur wenn die Laptops im
|
|
|
|
|
|
eigenen WLAN haengen** (Schul-WLAN blockiert SSH/mDNS zwischen Geraeten):
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-07-13 13:17:14 +02:00
|
|
|
|
./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
|
2026-07-13 13:11:24 +02:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
Voraussetzung auf neuen Controllern: passwordless sudo fuer `puettmann`
|
|
|
|
|
|
(`sudo visudo` → `puettmann ALL=(ALL) NOPASSWD: ALL`).
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
## Problemloesungen
|
2026-07-13 13:11:24 +02:00
|
|
|
|
|
2026-07-13 13:17:14 +02:00
|
|
|
|
- **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>`
|