Kickstart Rocky Linux 9

Aus Xinux Wiki
Version vom 29. Juni 2026, 19:00 Uhr von Thomas.will (Diskussion | Beiträge) (→‎Kickstart (Rocky Linux 9))
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Kickstart (Rocky Linux 9)

Kickstart automatisiert die Installation vollständig: einmal eine ks.cfg schreiben, ISO booten, fertig installiertes System zurückbekommen – ohne eine einzige Eingabe. Als Paketquelle dient der lokale Spiegel; derselbe Apache liefert auch die ks.cfg aus. Der Abschluss ist die Übergabe an Ansible.

ℹ️ Hinweis: Bezieht sich auf Rocky Linux 9. Die hier gezeigte positionale mkksiso-Syntax ist die, die mit der lorax-Version aus Rocky 9 funktioniert.

⛔ Warnung: Eine Kickstart-Installation fragt nichts nach und löscht die Platte ohne Rückfrage. Niemals auf einem System booten, dessen Daten erhalten bleiben sollen.

Vorlage und Werkzeuge

Jede manuelle Installation legt unter /root/anaconda-ks.cfg eine fertige Kickstart-Datei ab – das ist der beste Startpunkt. Zum Prüfen dient ksvalidator aus pykickstart.

Werkzeuge installieren
dnf install -y pykickstart lorax

ℹ️ Hinweis: system-config-kickstart (das alte GUI-Werkzeug) ist seit EL8 entfernt. Die Datei wird per Editor gepflegt und mit ksvalidator geprüft.

Passwort-Hashes erzeugen

Klartext-Passwörter gehören nicht in die ks.cfg. SHA-512-Hash erzeugen und in die Datei eintragen:

openssl passwd -6
# Passwort eingeben -> Ausgabe beginnt mit $6$ ... -> in die ks.cfg kopieren

Die vollständige ks.cfg

Datei node2XX.ks – lauffähig, Hostname/IP/Hashes/SSH-Key an die Gruppe anpassen (2XX):

# Rocky Linux 9 - Kickstart (Lab)
text
eula --agreed
firstboot --disable
reboot

# Sprache / Tastatur / Zeit
lang de_DE.UTF-8
keyboard --vckeymap=de --xlayouts='de'
timezone Europe/Berlin --utc

# Installationsquelle: lokaler Spiegel
url --url="http://repo.it2XX.lab/repo/rocky/9/baseos/"
repo --name="appstream" --baseurl="http://repo.it2XX.lab/repo/rocky/9/appstream/"
repo --name="extras"    --baseurl="http://repo.it2XX.lab/repo/rocky/9/extras/"

# Netzwerk
network --bootproto=dhcp --device=link --activate --onboot=yes
network --hostname=node2XX.it2XX.lab

# Anmeldedaten (Hashes mit: openssl passwd -6)
rootpw --iscrypted $6$ERSETZEN$ERSETZENERSETZENERSETZENERSETZENERSETZENERSETZENERSETZEN
user --name=ansible --groups=wheel --iscrypted --password=$6$ERSETZEN$ERSETZENERSETZENERSETZENERSETZENERSETZENERSETZENERSETZEN

# Bootloader / Partitionierung
bootloader --location=mbr --boot-drive=sda
clearpart --all --initlabel --drives=sda
autopart --type=lvm

# Sicherheit / Dienste
selinux --enforcing
firewall --enabled --service=ssh
services --enabled=sshd,chronyd

%packages
@^minimal-environment
openssh-server
chrony
vim-enhanced
python3
%end

%post --log=/root/ks-post.log

# 1) Lokales Repo dauerhaft eintragen, Standard-Repos deaktivieren
cat > /etc/yum.repos.d/local.repo <<'REPO'
[baseos-local]
name=Rocky 9 - BaseOS (Lokaler Spiegel)
baseurl=http://repo.it2XX.lab/repo/rocky/9/baseos/
enabled=1
gpgcheck=1
gpgkey=http://repo.it2XX.lab/repo/RPM-GPG-KEY-Rocky-9

[appstream-local]
name=Rocky 9 - AppStream (Lokaler Spiegel)
baseurl=http://repo.it2XX.lab/repo/rocky/9/appstream/
enabled=1
gpgcheck=1
gpgkey=http://repo.it2XX.lab/repo/RPM-GPG-KEY-Rocky-9

[extras-local]
name=Rocky 9 - Extras (Lokaler Spiegel)
baseurl=http://repo.it2XX.lab/repo/rocky/9/extras/
enabled=1
gpgcheck=1
gpgkey=http://repo.it2XX.lab/repo/RPM-GPG-KEY-Rocky-9
REPO

dnf config-manager --set-disabled baseos appstream extras crb 2>/dev/null || true

# 2) SSH-Key des Ansible-Control-Nodes hinterlegen
install -d -m 0700 -o ansible -g ansible /home/ansible/.ssh
cat > /home/ansible/.ssh/authorized_keys <<'KEY'
ssh-ed25519 AAAAC3Nza...ERSETZEN... ansible@control
KEY
chown ansible:ansible /home/ansible/.ssh/authorized_keys
chmod 0600 /home/ansible/.ssh/authorized_keys

# 3) Passwortloses sudo fuer Ansible
echo 'ansible ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/ansible
chmod 0440 /etc/sudoers.d/ansible

%end

⚠️ Achtung: Die beiden $6$ERSETZEN...-Hashes und der SSH-Key sind Platzhalter. Ohne echte Werte schlägt die Anmeldung fehl bzw. der Ansible-Zugriff funktioniert nicht.

Validieren

ksvalidator node2XX.ks

Keine Ausgabe = Syntax in Ordnung.

Variante 1: ks.cfg per HTTP (ohne ISO-Umbau)

Die Kickstart-Datei auf denselben Apache legen, der das Repo ausliefert:

mkdir -p /var/www/html/ks
cp node2XX.ks /var/www/html/ks/
restorecon -Rv /var/www/html/ks

Beim Booten des Installations-ISO im Boot-Menü Tab (BIOS) bzw. e (UEFI/GRUB) drücken und an die Kernel-Zeile anhängen:

inst.ks=http://repo.it2XX.lab/ks/node2XX.ks

Variante 2: ISO mit eingebetteter ks.cfg (mkksiso) – für VirtualBox

Für die Kurs-Auslieferung ist das der saubere Weg: kein PXE, kein manuelles Eintippen am Bootprompt. mkksiso (aus lorax) injiziert die ks.cfg direkt ins Boot-ISO und ergänzt automatisch inst.ks= in der Kernel-Kommandozeile. Die VM läuft vollautomatisch durch.

ISO bauen (Rocky 9 – positionale Form)
sudo mkksiso node2XX.ks Rocky-9.x-x86_64-boot.iso Rocky-9-node2XX.iso

ℹ️ Hinweis: Neuere lorax-Versionen (38.4+) nutzen stattdessen mkksiso --ks node2XX.ks INPUT.iso OUTPUT.iso. Auf Rocky 9 ist die positionale Form ohne Flag die richtige.

ℹ️ Hinweis: Das boot.iso (Netz-Installation) reicht, weil die Pakete vom lokalen Spiegel kommen. Das vollständige DVD-ISO funktioniert ebenso, ist aber größer.

Das erzeugte Rocky-9-node2XX.iso in VirtualBox als Boot-Medium einhängen – die Installation startet ohne Rückfrage und rebootet am Ende ins fertige System.

Übergabe an Ansible

Der %post-Block oben ist die Brücke zu Ansible: er legt den ansible-User in der Gruppe wheel an, hinterlegt den SSH-Key des Control-Nodes und richtet passwortloses sudo ein. Damit ist das frisch installierte System sofort per Ansible erreichbar:

# Vom Control-Node aus
ansible -i node2XX.it2XX.lab, all -u ansible -b -m ping

Kickstart provisioniert also das nackte System, Ansible übernimmt ab da die Konfiguration – saubere Arbeitsteilung, kein Overlap.

ℹ️ Hinweis: Optional lässt sich am Ende des %post ein ansible-pull einhängen, wenn das System sich direkt nach der Installation selbst konfigurieren soll.

Test und Fehlersuche

Symptom Ursache / Lösung
Installer landet im interaktiven Menü inst.ks= nicht gesetzt oder ks.cfg per HTTP nicht erreichbar → URL und Apache prüfen
Error setting up base repository url/repo zeigen ins Leere → lokalen Spiegel und Netzwerk im Installer prüfen
Installation bricht bei %packages ab Gruppe/Paket nicht im Spiegel → fehlt z. B. AppStream-Repo, oder --downloadcomps beim reposync vergessen
Login schlägt fehl Platzhalter-Hash nicht ersetzt → openssl passwd -6
Ansible-Ping scheitert SSH-Key/sudo im %post nicht korrekt → /root/ks-post.log auf dem Zielsystem auswerten

ℹ️ Hinweis: {{{1}}}