#!/bin/bash # # First-Boot Setup fuer geklonte Rechner # # Dieses Script nach dem Klonen EINMAL ausfuehren auf jedem Rechner: # sudo ~/projekte/schul-laptops/files/first-boot-setup.sh laptop05 # # Es macht: # 1. Neuen Hostnamen setzen # 2. Neue SSH-Host-Keys generieren (wichtig!) # 3. Neue Machine-ID generieren # 4. Privaten Admin-Key entfernen (ausser auf laptop03, siehe docs/decisions.md E-005) # 5. Image-Versionsdatei setzen (falls nicht vorhanden) # 6. ansible-pull-Timer aktivieren und ersten Lauf anstossen # # Beim automatischen Reimage von der externen Platte uebernimmt das # Clonezilla-Restore-Skript diese Schritte — dieses Script ist nur fuer # die Erstinstallation per USB-Stick gedacht. # set -e # Farben RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' echo -e "${GREEN}=== First-Boot Setup ===${NC}" # Hostname als Parameter oder interaktiv if [ -n "$1" ]; then NEW_HOSTNAME="$1" else read -p "Neuer Hostname (z.B. laptop05): " NEW_HOSTNAME fi if [ -z "$NEW_HOSTNAME" ]; then echo -e "${RED}Fehler: Kein Hostname angegeben${NC}" exit 1 fi echo -e "${YELLOW}Setze Hostname auf: $NEW_HOSTNAME${NC}" # 1. Hostname setzen hostnamectl set-hostname "$NEW_HOSTNAME" sed -i "s/127.0.1.1.*/127.0.1.1\t$NEW_HOSTNAME/" /etc/hosts # 2. Neue SSH-Host-Keys generieren echo -e "${YELLOW}Generiere neue SSH-Host-Keys...${NC}" rm -f /etc/ssh/ssh_host_* ssh-keygen -A # 3. Neue Machine-ID generieren echo -e "${YELLOW}Generiere neue Machine-ID...${NC}" rm -f /etc/machine-id /var/lib/dbus/machine-id dbus-uuidgen --ensure=/etc/machine-id cp /etc/machine-id /var/lib/dbus/machine-id # 4. SSH-Dienst neustarten systemctl restart ssh # 5. Privaten Admin-Key entfernen — der Gitea-Admin-Key gehoert nur auf laptop03. # Der Read-only-Deploy-Key unter /root/.ssh bleibt (wird fuer den Pull-Fallback gebraucht). if [ "$NEW_HOSTNAME" != "laptop03" ]; then echo -e "${YELLOW}Entferne privaten Admin-Key...${NC}" rm -f /home/puettmann/.ssh/id_ed25519 /home/puettmann/.ssh/id_ed25519.pub fi # 6. Image-Versionsdatei: "0" ist aelter als jeder Image-Name, d.h. das naechste # angesteckte Image wuerde ein Reimage ausloesen — das Restore-Skript schreibt # hier den echten Image-Namen hinein. if [ ! -f /etc/schul-image-version ]; then echo "0" > /etc/schul-image-version fi # 7. ansible-pull aktivieren: ab jetzt holt sich der Laptop alles selbst. echo -e "${YELLOW}Aktiviere ansible-pull-Timer...${NC}" systemctl daemon-reload systemctl enable --now ansible-pull.timer systemctl start --no-block ansible-pull.service echo "" echo -e "${GREEN}=== Setup abgeschlossen ===${NC}" echo -e "Hostname: ${GREEN}$NEW_HOSTNAME${NC}" echo "Der erste ansible-pull-Lauf wurde gestartet (Log: journalctl -u ansible-pull)." echo "" echo "Optional: Rechner neustarten mit 'sudo reboot'" echo ""