hans87
Goto Top

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.

Content-Key: 225994

Url: https://administrator.de/contentid/225994

Ausgedruckt am: 29.03.2024 um 09:03 Uhr

Mitglied: falscher-sperrstatus
falscher-sperrstatus 07.01.2014 um 10:50:10 Uhr
Goto Top
Hallo Hans,

normalerweise kannst du an jedes Skript einen Parameter eintragen. Hierbei kommt es darauf an, was es für ein Skript ist. Parameterübergabe sollte aber zum Ziel führen.

Beste Grüße,

Christian
Mitglied: Hans87
Hans87 07.01.2014 um 11:01:43 Uhr
Goto Top
Hallo,

danke für deine Hilfe,

heißt wenn ich das skript aufrufe einfach ein "--hostname=test1" dranhängen?


Gruß


Hans
Mitglied: falscher-sperrstatus
falscher-sperrstatus 07.01.2014 um 11:11:48 Uhr
Goto Top
wenn das skript darauf vorbereitet wurde, ja. Je nachdem musst du darin noch diese Übergabe definieren.
Mitglied: quin83
quin83 07.01.2014 aktualisiert um 19:50:10 Uhr
Goto Top
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
Mitglied: Hans87
Hans87 09.01.2014 um 14:00:27 Uhr
Goto Top
Hallo Daniel,

zunächst danke.

ich verstehe allerdings nicht, wie ich den Anaconda installer mit optionen boote...
Mitglied: quin83
quin83 09.01.2014 um 21:29:04 Uhr
Goto Top
Hallo,

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
Mitglied: Hans87
Hans87 10.01.2014 um 11:17:52 Uhr
Goto Top
aber ich kann wenn ich tab gedrückt habe unten in der Zeile nicht am Ende eingeben (also nach dem ks=http://........../rhel64.ks) hostname=testname ....

oder?

die maschine hat dann nämlich als name dhcp-ipadresse...

auch mit einem %pre skript im Kickstart skript komme ich nicht ans ziel... dieses sieht so aus:

%pre
#!/bin/bash

###Hostname#########################################
exec < /dev/tty6 > /dev/tty6
chvt 6
clear
echo "################################"
echo "# One short question! #"
echo "################################"
echo -n "Please enter the hostname for this machine (hostname): "
read hostn
hostname $hostn
echo -e "NETWORKING=yes\nHOSTNAME=$hostn" > /etc/sysconfig/network
echo "You have selected $hostn. Press enter to continue or ctrl alt del to restart"
read
###Go back to tty1##
exec < /dev/tty1 > /dev/tty1
chvt 1
%end


und oben im kickstartscript bei network habe ich dann folgendes stehen:

network --hostname=${hostn}


die fertige Maschine heißt dann allerdings ${hostn}


kann mir das einer erklären bzw sagen was ich da falsch mache?
Mitglied: quin83
quin83 10.01.2014 aktualisiert um 20:45:28 Uhr
Goto Top
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:

echo -n "Please enter the hostname for this machine (hostname): "
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

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