Kickstartscript - Hostname mitgeben
Hallo,
ich möchte RedHat per kickstartscript installieren, den Hostnamen aber variabel halten.
gibt es eine Möglichkeit diesen bei Aufruf des Scripts mitzugeben?
Finde dazu leider nichts.
ich möchte RedHat per kickstartscript installieren, den Hostnamen aber variabel halten.
gibt es eine Möglichkeit diesen bei Aufruf des Scripts mitzugeben?
Finde dazu leider nichts.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 225994
Url: https://administrator.de/forum/kickstartscript-hostname-mitgeben-225994.html
Ausgedruckt am: 08.04.2025 um 10:04 Uhr
8 Kommentare
Neuester Kommentar
Hallo,
1. Die "einfache" Lösung für wenige Systeme:
Du kannst den Anaconda Installer mit Kernel-Optionen booten.
Also <Kernel> ... initrd=<Pfad zur initrd> ks=<Pfad zum kickstart File> ip=<ip>::<gateway>:<netmask>:<hostname>:<interface>:<autoconf>
Details siehe http://wwoods.fedorapeople.org/doc/boot-options.html#network
Das musst du halt bei jedem Boot dann im Bootloader ausfüllen.
2. Die "elegantere" Lösung für hunderte Systeme:
Du schreibst im Kickstart File einen Python Codeblock, welcher mittels %pre als Pre-Install Script ausgeführt wird.
Dieser Codeblock macht folgendes:
- Lokale MAC-Adresse auslesen
- Von einem Webserver eine Liste abholen
- In der Liste den Eintrag zur eigenen MAC-Adresse finden
- Konfiguration aus dieser Liste holen (IP, Hostname, etc.)
- Diese Informationen aus der Liste in korrekter Syntax in eine 2te Kickstart Datei (z.B. /tmp/kickstart.network.ks) schreiben
Dann schreibst du im anderem Kickstart-File nur noch:
%include /tmp/kickstart.network.ks
Damit kannst du dann alles in einer zentralen Liste auf einem Server pflegen.
Wir erstellen halt auch noch eine /tmp/kickstart.software.ks und /tmp/kickstart.partitions.ks), das ist ganz nett wenn alles zentral liegt.
Grüße,
Daniel
1. Die "einfache" Lösung für wenige Systeme:
Du kannst den Anaconda Installer mit Kernel-Optionen booten.
Also <Kernel> ... initrd=<Pfad zur initrd> ks=<Pfad zum kickstart File> ip=<ip>::<gateway>:<netmask>:<hostname>:<interface>:<autoconf>
Details siehe http://wwoods.fedorapeople.org/doc/boot-options.html#network
Das musst du halt bei jedem Boot dann im Bootloader ausfüllen.
2. Die "elegantere" Lösung für hunderte Systeme:
Du schreibst im Kickstart File einen Python Codeblock, welcher mittels %pre als Pre-Install Script ausgeführt wird.
Dieser Codeblock macht folgendes:
- Lokale MAC-Adresse auslesen
- Von einem Webserver eine Liste abholen
- In der Liste den Eintrag zur eigenen MAC-Adresse finden
- Konfiguration aus dieser Liste holen (IP, Hostname, etc.)
- Diese Informationen aus der Liste in korrekter Syntax in eine 2te Kickstart Datei (z.B. /tmp/kickstart.network.ks) schreiben
Dann schreibst du im anderem Kickstart-File nur noch:
%include /tmp/kickstart.network.ks
Damit kannst du dann alles in einer zentralen Liste auf einem Server pflegen.
Wir erstellen halt auch noch eine /tmp/kickstart.software.ks und /tmp/kickstart.partitions.ks), das ist ganz nett wenn alles zentral liegt.
Grüße,
Daniel
Hallo,
Im Prinzip ist der Kernel auf der Installations-CD ein normaler, kleiner Linux Kernel, welcher am Ende des Boot-Vorgangs den Anaconda startet.
Folglich akzeptiert er beim Boot-Vorgang Parameter aus dem Boot-Loader.
Ich gehe davon aus, dass du von einem Installations-Medium bootest.
Das erste was du siehst ist der Boot-Loader mit "Welcome to Red Hat Enterprise 6.4!".
Dort hast du dann mehrere Optionen. Du verwendest wohl die erste "Install or Upgrade an existing system".
Wenn du hier nicht Enter sondern Tab drückst, gelangst du in eine Shell und kannst die Optionen ändern.
Bei der Installation steht "vmlinuz initrd=initrd.img".
vmlinuz ist dabei der Dateiname des Kernels auf der CD.
Das erste Argument teilt dem Kernel mit, dass er die initiale Ramdisk mit den Treibern aus der Datei initrd.img holen soll.
Und hier kannst du nun weitere Dinge angeben.
Bei mir sieht das etwa so aus:
vmlinuz initrd=initrd.img ip=dhcp ks=http://webserver-0815.example.com/rhel64.ks nousbstorage text
ip=dhcp - Das System soll bitte erst mal DHCP machen, die IP wird später über das Kickstart-File gesetzt
ks=<URL> - Hier soll der Anaconda das Kickstart-File runterladen, welches er dann verwendet
text - Installation ohne bunte Bilder, wir sind ja nicht unter Windows ;) Diese Option könnte man auch direkt ins Kickstart File schreiben.
Eine Anleitung mit Bildern findest du hier:
https://access.redhat.com/site/articles/507303
Dieses Thema ist dort "Step 4".
Grüße,
Daniel
ich verstehe allerdings nicht, wie ich den Anaconda installer mit optionen boote...
Im Prinzip ist der Kernel auf der Installations-CD ein normaler, kleiner Linux Kernel, welcher am Ende des Boot-Vorgangs den Anaconda startet.
Folglich akzeptiert er beim Boot-Vorgang Parameter aus dem Boot-Loader.
Ich gehe davon aus, dass du von einem Installations-Medium bootest.
Das erste was du siehst ist der Boot-Loader mit "Welcome to Red Hat Enterprise 6.4!".
Dort hast du dann mehrere Optionen. Du verwendest wohl die erste "Install or Upgrade an existing system".
Wenn du hier nicht Enter sondern Tab drückst, gelangst du in eine Shell und kannst die Optionen ändern.
Bei der Installation steht "vmlinuz initrd=initrd.img".
vmlinuz ist dabei der Dateiname des Kernels auf der CD.
Das erste Argument teilt dem Kernel mit, dass er die initiale Ramdisk mit den Treibern aus der Datei initrd.img holen soll.
Und hier kannst du nun weitere Dinge angeben.
Bei mir sieht das etwa so aus:
vmlinuz initrd=initrd.img ip=dhcp ks=http://webserver-0815.example.com/rhel64.ks nousbstorage text
ip=dhcp - Das System soll bitte erst mal DHCP machen, die IP wird später über das Kickstart-File gesetzt
ks=<URL> - Hier soll der Anaconda das Kickstart-File runterladen, welches er dann verwendet
text - Installation ohne bunte Bilder, wir sind ja nicht unter Windows ;) Diese Option könnte man auch direkt ins Kickstart File schreiben.
Eine Anleitung mit Bildern findest du hier:
https://access.redhat.com/site/articles/507303
Dieses Thema ist dort "Step 4".
Grüße,
Daniel
Hallo,
ich glaube wir reden leicht an einander vorbei.
Man muss zwischen 2 Konfigurationen unterscheiden:
1. Anaconda
Anaconda besteht aus 2 Teilen:
- Anaconda Stage 1: Das ist der Installations-Kernel und die Treiber-Geschichte. Stage 1 prüft noch das Medium und konfiguriert das Netzwerk, dann ist Stage 2 dran.
- Anaconda Stage 2: Das ist der eigentliche Installer, welcher die Installation durchführt.
Wenn du nun Anaconda Stage 1 bootest, wird dort das Netzwerk konfiguiert.
Es kann ja sein, dass du deine Installationsquelle (Stage 2) nicht auf dem Medium, sondern auf einem HTTP / NFS / FTP Server liegen hast.
Oder auch das Kickstart-File, welches du angegeben hast. Dafür muss das Netzwerk verfügbar sein, damit das abgerufen werden kann.
=> Die Netzwerk-Konfiguration, welche im Anaconda aktiv ist, kann über die Kernel-Optionen beim Boot beeinflusst werden.
=> Diese Netzwerk-Konfiguration kann eine vollständig andere sein, als später im installierten System aktiv ist.
2. Das Installierte System
Bei der Installation werden die Einstellungen aus dem Kickstart-File verwendet.
(Ich bin mir nicht sicher, aber ich glaube wenn man dort nichts konfiguriert, wird die Konfiguration von Anaconda Stage 1 übernommen.)
Folglich musst du für dein Szenario im Kickstart-File einen Eintrag für den Hostnamen haben.
Ich mache das z.B. so, dass das System bootet und erst mal per DHCP im Netzwerk hängt. (Weg des geringsten Widerstands)
Dann wird von einem Webserver das Kickstart-File abgeholt und das %pre Script ausgeführt.
Damit liegen dann die Infos für das Zielsystem vor (Hostname, statische IP, Partitioniertung, Installationsumfang), welche vom %pre Script in ein endgültiges, 2tes, 3tes und 4tes Kickstart-File geschrieben werden.
Diese neuen Kickstart-Files werden dann per %include eingebunden. Dann startet die Installation.
Zu deinen Fragen:
Alles schön und gut, aber damit konfigurierst du die Laufzeitumgebung des bereits gestarteten Anaconda.
Nach dem Reboot geht diese Einstellung einfach nur verloren.
Vorschlag 1:
Im Script:
und dann
Ich bin mir hier jetzt aber nicht sicher, ob --hostname=xyz als einziger Parameter funktioniert, oder ob "network" die gesamte Konfiguration "--ip", "--gateway", etc. in einer Zeile erwartet.
Müsste man testen.
Vorschlag 2:
Da das Kickstart-File nur ein simples Text-File ist, könnte es auch mit PHP auf einem Webserver erzeugt werden.
Du legst dir ein PHP Script auf den Webserver, welcher das File abhängig von den Parametern generiert.
Dann startest du Anaconda z.B. mit:
Bei Fragen immer gern.
Grüße,
Daniel
ich glaube wir reden leicht an einander vorbei.
Man muss zwischen 2 Konfigurationen unterscheiden:
1. Anaconda
Anaconda besteht aus 2 Teilen:
- Anaconda Stage 1: Das ist der Installations-Kernel und die Treiber-Geschichte. Stage 1 prüft noch das Medium und konfiguriert das Netzwerk, dann ist Stage 2 dran.
- Anaconda Stage 2: Das ist der eigentliche Installer, welcher die Installation durchführt.
Wenn du nun Anaconda Stage 1 bootest, wird dort das Netzwerk konfiguiert.
Es kann ja sein, dass du deine Installationsquelle (Stage 2) nicht auf dem Medium, sondern auf einem HTTP / NFS / FTP Server liegen hast.
Oder auch das Kickstart-File, welches du angegeben hast. Dafür muss das Netzwerk verfügbar sein, damit das abgerufen werden kann.
=> Die Netzwerk-Konfiguration, welche im Anaconda aktiv ist, kann über die Kernel-Optionen beim Boot beeinflusst werden.
=> Diese Netzwerk-Konfiguration kann eine vollständig andere sein, als später im installierten System aktiv ist.
2. Das Installierte System
Bei der Installation werden die Einstellungen aus dem Kickstart-File verwendet.
(Ich bin mir nicht sicher, aber ich glaube wenn man dort nichts konfiguriert, wird die Konfiguration von Anaconda Stage 1 übernommen.)
Folglich musst du für dein Szenario im Kickstart-File einen Eintrag für den Hostnamen haben.
Ich mache das z.B. so, dass das System bootet und erst mal per DHCP im Netzwerk hängt. (Weg des geringsten Widerstands)
Dann wird von einem Webserver das Kickstart-File abgeholt und das %pre Script ausgeführt.
Damit liegen dann die Infos für das Zielsystem vor (Hostname, statische IP, Partitioniertung, Installationsumfang), welche vom %pre Script in ein endgültiges, 2tes, 3tes und 4tes Kickstart-File geschrieben werden.
Diese neuen Kickstart-Files werden dann per %include eingebunden. Dann startet die Installation.
Zu deinen Fragen:
echo -n "Please enter the hostname for this machine (hostname): "
read hostn
hostname $hostn
echo -e "NETWORKING=yes\nHOSTNAME=$hostn" > /etc/sysconfig/network
read hostn
hostname $hostn
echo -e "NETWORKING=yes\nHOSTNAME=$hostn" > /etc/sysconfig/network
Alles schön und gut, aber damit konfigurierst du die Laufzeitumgebung des bereits gestarteten Anaconda.
Nach dem Reboot geht diese Einstellung einfach nur verloren.
network --hostname=${hostn}
Ein Kickstart File ist kein Shell-Script, daher werden Variablen nicht unterstützt.Vorschlag 1:
Im Script:
echo -n "Please enter the hostname for this machine (hostname): "
read hostn
echo "network --hostname=${hostn}" > /tmp/kickstart-hostname.ks
read hostn
echo "network --hostname=${hostn}" > /tmp/kickstart-hostname.ks
und dann
%include /tmp/kickstart-hostname.ks
Ich bin mir hier jetzt aber nicht sicher, ob --hostname=xyz als einziger Parameter funktioniert, oder ob "network" die gesamte Konfiguration "--ip", "--gateway", etc. in einer Zeile erwartet.
Müsste man testen.
Vorschlag 2:
Da das Kickstart-File nur ein simples Text-File ist, könnte es auch mit PHP auf einem Webserver erzeugt werden.
Du legst dir ein PHP Script auf den Webserver, welcher das File abhängig von den Parametern generiert.
Dann startest du Anaconda z.B. mit:
Bei Fragen immer gern.
Grüße,
Daniel