Dies ist eine alte Version des Dokuments!
Installation eines Ansible-Orchestrator-Management-Hosts mit Hilfe eines Kickstartfiles für CentOS 8.x (PXE-Server)
Seite in der Entstehung, noch nicht aktuell! Wird laufend aktualisiert!
Kurz mal einen Rechner zu installieren, wie im Kapitel Installation von CentOS 8.x via PXE beschrieben und anschließend manuell dann anschließend Ansible mit Ansible einzurichten, wie hier beschrieben, mag auch eine Variante darstellen.
Wir wollen aber in folgendem Beispiel automatisiert unseren AOMH1) reproduzierbar vie PXE installieren, so dass wir ohne Umwege direkt mit der Arbeit beginnen und unsere Zielsysteme nach unseren Wünschen automatisiert zu bestücken.
Voraussetzungen
TFTP-/PXE-Bootserver
Folgende Voraussetzungen müssen hierzu erfüllt werden:
- Der DHCP-Server muss für PXE konfiguriert werden und im Netz erreichbar sein.
- Ein TFTP-Server muss zur Verfügung stehen und im Netz erreichbar sein.
- Eine Definition des Bootmenüs mit entsprechenden Optionen wurde erfolgreich vorgenommen.
- Die Netzwerkkarte im Clientrechner muss PXE unterstützen!
SSH-Schlüsselmaterial
Der Grundgedanke bei dieser Vorhaben ist, im Zweifel immer wieder exakt den gleichen Ansible-Ochestrator-Management-Host reproduzierbar aufzusetzen, werden wir das benötigte SSH-Schlüsselmaterial zu aller erst erzeugen und dann auch entsprechend sicher im physischen Safe wegsperren, so dass wir im Katastrophenfall darauf zurückgreifen zu können.
Im Kapitel Voraussetzung: SSH-Schlüssel haben wir uns bereits ausführlich mit der Thematik SSH-Schlüssel beschäftigt und auch gezeigt, wie dieser eerstellt wird.
Wir erstellen uns nun einen ED25519-Schlüssel (-t
), mit einer festen Schlüssellänge. Der Parameter (-a
) beschreibt dabei die Anzahl der KDF-Schlüsselableitfunktion (siehe manpage von ssh-keygen). Wir verwenden wieder als Beschreibung Ansible Systemuser (-C
) und als Ziel-/Speicherort ~/.ssh/id_ed25519_ansible (-f
).
$ ssh-keygen -t ed25519 -a 100 -C 'Ansible Systemuser' -f ~/.ssh/id_ed25519_ansible
Generating public/private ed25519 key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ~/.ssh/id_ed25519_ansible. Your public key has been saved in ~/.ssh/id_ed25519_ansible.pub. The key fingerprint is: SHA256:jTZQUDbCqZaV648fKVBfx3L4+tBMWL+z+iUCBY3kKMQ Ansible Systemuser The key's randomart image is: +--[ED25519 256]--+ | o+==.oo | | .E+ +.+. | | ++.. = * | | +..+ + O . | | ... S + o . | | ... o * . | | .oo o + + .| | .... o . = | | .. ooo | +----[SHA256]-----
Die beiden Key-Files kopieren wir dann auf ein vertrauenswürdiges Medium, auf welches wir jederzeit wiieder zurückgreifen können.
$ ll .ssh/
-r--------. 1 ansible ansible 411 Jun 20 13:08 id_ed25519_ansible -rw-r--r--. 1 ansible ansible 100 Jun 20 13:08 id_ed25519_ansible.pub
Ob das nun ein sicherer USB-Speicherstick wie der Nitrokey Storage 2, ein Network Attached Storage oder eine vertrauenswürdige (Next)Cloud ist, muss natürlich jeder für sich selbst entscheiden.
Ansible-Orchestrator-Management-Host
Aufgabenstellung
Wie Eingangs schon angesprochen, wollen wir unseren Ansible-Orchestrator-Management-Host bei Bedarf immer nach dem gleichen Grundschema aufbauen, konfigurieren und auch härten. Wir werden also diese Aufgaben standardisieren und automatisch abarbeiten lassen.
Folgende Aufgaben wird unser Script für uns reproduzierbar künftig erledigen:
- Grundinstallation eines CentOS 8 Hosts (Minimalinstallation)
- IP-Adresse und Hostname Durch Angabe des Hostnamens beim Booten des Installationsimages wollen wir diesen setzen und auch die zugehörige IP-Adresse übernehmen lassen. (Der Hostname wir so z.B. auch bei der Definition der VolumeGroup eines LVMs verwendet.)
- Installations-Logfile zum Nachvollziehen der erfolgten INstallation unter
/root/anaconda-postinstall.log
anlegen. - Bootloader Da wir beim Booten der Maschine detailierte Informationen sehen wollen werden wir die Option rhgb in der GRUB-Definition entfernen.
- MOTD und ISSUE.NET individualisieren inkl. Hostnamen
- SSH-Daemon Den SSH Daemon härten wir und passen die Konfigurationsdatei entsprechend an.
- SSH-Publickey Für unseren Admin-Account django hinterlegen wir den zugehörigen öffentlichen SSH-Schlüssel.
- Repositories Statt der öffentlichen, sollen nur noch die lokal gesyncten Repositories verwendet werden; daher macht es auch keinen Sinn die Einträge
mirrorlist=
in den entsprechenden repo-filers stehen zu lassen. - Zusätzlich zum Standard soll auch noch das Repository EPEL eingebunden und genutzt werden.
- Update Zum Schluss stellen wir noch sicher dass alle installierten Pakete in der aktuellsten Version vorliegen und lassen dann das System neu starten.
- NFS-Client zur Verbindung NAS einrichten, damit später die Playbooks gesichert werden können.
- Ansible System-User erstellen und zuvor erstelltes Schlüsselmaterial hinterlegen
- Ansible: Directory Layout- Verzeichnisstruktur anlegen
Kickstartdatei anlegen
Zur automatischen Installation und Konfiguration unseres Ansible-Orchestrator-Management-Hosts verwenden wir folgende Kickstart-Datei.
# vim /srv/kickstart/ks_centos_8_x86_64_ansible.cfg
PXE-Bootmenü-Datei anpassen
Damit nun beim Laden der Menüdatei bei PXE-Boot die überarbeitete Kickstart-Datei geladen werden kann, erweitern wir nun die Menü-Datei unseres PXE-Bootservers.
# vim /var/lib/tftpboot/pxelinux.cfg/dmz-64
Dort tragen wir beim betreffenden LABEL die Optionen ks
, net.ifnames
und biosdevname
sowie am Ende der Zeile SERVERNAME=
ein.
LABEL 3 MENU LABEL ^3) Installation von CentOS 8 (64 Bit) KERNEL images/centos/8/x86_64/vmlinuz APPEND ks=http://10.0.0.57/kickstart/ks_centos_8_x86_64_dmz.cfg initrd=images/centos/8/x86_64/initrd.img ksdevice=eth0 ip=dhcp --hostname=vml000250.dmz.nausch.org method=http://10.0.0.57/centos/8/BaseOS/x86_64/os/ net.ifnames=0 biosdevname=0 SERVERNAME=
Anschliessend starten wir wie gewohnt unsere virtuelle Maschine.
Zum Setzen des Hostnamens wählen wir nun wie gewünscht den betreffenden Menüpunkt aus, drücken dann aber NICHT die EINGABETASTE, sondern die Taste TAB! Anschliessend geben wir den Hostnamen ein.
Am Ende des Installationsvorganges werden wir informiert, dass das postinstall-script, welches wir per PXE-Boot bzw. genauer gesagt mit dem Kickstartfile mitgegeben hatten, ausgeführt wird.
Nach kurzer Wartezeit haben wir ein neues, vorkonfiguriertes und vor allem aktuelles System, bei dem wir uns direkt per ssh
verbinden können.
$ ssh 10.0.0.50
The authenticity of host '10.0.0.50 (10.0.0.50)' can't be established. ED25519 key fingerprint is SHA256:JKV0iNvjQGMhkWIGEPC1hQH/vzpbeabl1g7s46yhMj6. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '10.0.0.50' (ED25519) to the list of known hosts. ############################################################################## # # # This is a private home server. # # # # Unauthorized access to this system is prohibited ! # # # # This system is actively monitored and all connections may be logged. # # By accessing this system, you consent to this monitoring. # # # ############################################################################## ############################################################################## # # # This is the home server of Michael Nausch. # # # # vml000050.nausch.org # # # # Unauthorized access to this system is prohibited ! # # # # This system is actively monitored and all connections may be logged. # # By accessing this system, you consent to this monitoring. # # # ##############################################################################
Die Netzwerkschnittstelle hat entsprechend die gewünschte Bezeichnung erhalten.
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:74:80:c2 brd ff:ff:ff:ff:ff:ff inet 10.0.0.50/24 brd 10.0.0.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::5054:ff:fe74:80c2/64 scope link noprefixroute valid_lft forever preferred_lft forever
Das System ist auch mit den aktuellesten Programmpaketen bestückt.
# dnf update
Last metadata expiration check: 0:12:20 ago on Sun 14 Jun 2020 01:49:52 PM CEST. Dependencies resolved. Nothing to do. Complete!