Files
schul-laptops/files/first-boot-setup.sh
Herb d349595aec first-boot-setup.sh: Admin-Key-Schutz, Versionsdatei, Pull-Aktivierung
Entfernt den privaten Gitea-Admin-Key auf allen Laptops ausser
laptop03 (E-005), setzt /etc/schul-image-version und aktiviert den
ansible-pull-Timer samt erstem Lauf.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-13 13:17:14 +02:00

90 lines
2.8 KiB
Bash
Executable File

#!/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 ""