GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

So installieren Sie Fedora/RHEL/CentOS über Kickstart auf einem vorhandenen LUKS-Gerät

Mit Kickstart-Installationen können wir unbeaufsichtigte oder halb unbeaufsichtigte Installationen von Fedora, Red Hat Enterprise Linux oder CentOS einfach skripten und replizieren. Die für die Installation des Betriebssystems erforderlichen Anweisungen werden mit einer speziellen Syntax in einer Kickstart-Datei angegeben, die an das Anaconda-Installationsprogramm übergeben wird. In diesem Tutorial werden wir sehen, wie man ein bereits existierendes LUKS wiederverwendet (Linux Unified Keys Setup)-Container bei der Durchführung einer Kickstart-Installation:Dies ist etwas, das nicht nur mit Kickstart-Anweisungen erreicht werden kann und einige zusätzliche Schritte erfordert.

In diesem Tutorial lernen Sie:

  • Wie man einen vorhandenen LUKS-Container verwendet, wenn man eine Kickstart-Installation von Fedora, RHEL oder CentOS durchführt
  • Erstellen und Verwenden einer updates.img-Datei zur Verwendung mit dem Anaconda-Installationsprogramm.

So installieren Sie Fedora/RHEL/CentOS über Kickstart auf einem vorhandenen LUKS-Gerät

Softwareanforderungen und verwendete Konventionen

Softwareanforderungen und Linux-Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder verwendete Softwareversion
System Fedora/Rhel/CentOS
Software Für dieses Tutorial ist keine spezielle Software erforderlich.
Andere
  • Kenntnisse der Kickstart-Syntax
  • Kenntnisse von LUKS (Linux Unified Key Setup) und dem Befehl cryptsetup.
Konventionen # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder direkt als Root-Benutzer oder durch Verwendung von sudo Befehl
$ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden

Einführung

Kickstart ermöglichte es uns, Betriebssysteminstallationen auf eine Weise zu replizieren und anzupassen, die mit dem grafischen Installationsprogramm von Anaconda einfach unmöglich zu erreichen ist. Wir können beispielsweise angeben, welche Pakete oder Paketgruppen auf dem System installiert werden sollen und welche stattdessen ausgeschlossen werden sollen.

Wir haben auch die Möglichkeit, benutzerdefinierte Befehle vor oder nach der Installation auszuführen, indem wir sie im dedizierten %pre angeben und %post Abschnitte der Kickstart-Datei. Wir werden diese letztgenannte Funktion nutzen, um ein bereits vorhandenes LUKS zu verwenden Gerät während des Installationsvorgangs.

Verschlüsselung mit nativer Kickstart-Syntax

Das Erstellen von LUKS-Containern ist recht einfach und kann einfach mit nativen Kickstart-Anweisungen durchgeführt werden. Hier ist ein Beispiel:

part pv.01 --ondisk=sda --encrypted --luks-type=luks1 --cipher=aes-xts-plain64 --pbkdf-time=5000 --passphrase=secretpassphrase

Im obigen Beispiel durch Verwendung des part Anweisung erstellen wir ein verschlüsseltes lvm physisches Volume auf /dev/sda Scheibe. Wir spezifizieren das LUKS zu verwendende Version (luks1 in diesem Fall – zumindest in neueren Versionen von Fedora ist luks2 zum Standard geworden), die chiffre , und die Zeit, ausgedrückt in Millisekunden, die für PBKDF aufzuwenden ist (Password-Based Key Derivation Function) Passphrase-Verarbeitung (dies entspricht der Verwendung von --iter-time Option von cryptsetup ).

Auch wenn es keine sichere Angewohnheit ist, haben wir auch die --passphrase verwendet die Verschlüsselungs-Passphrase bereitzustellen:Ohne diese Option würde der Installationsvorgang unterbrochen und wir würden aufgefordert, interaktiv eine Passphrase bereitzustellen.

Wir können deutlich sehen, wie wir mit Kickstart viel mehr Flexibilität im Vergleich zu einer herkömmlichen Installation erhalten; warum müssten wir dann zusätzliche Schritte ausführen? Es gibt immer noch einige Aufgaben, die wir mit der standardmäßigen Kickstart-Syntax nicht bewältigen können. Unter anderem können wir LUKS nicht erstellen Container auf Raw-Geräten (nur auf Partitionen) oder geben Sie den Hash-Algorithmus an, der für LUKS verwendet werden soll key setup, das standardmäßig auf sha256 eingestellt ist (Daran ist nichts auszusetzen).

Aus diesen Gründen möchten wir vielleicht unser Partitions-Setup erstellen, bevor wir die Installation durchführen, entweder manuell oder mithilfe von Tools wie parted innerhalb von %pre Abschnitt der Kickstart-Datei selbst. Möglicherweise haben wir auch nur ein vorhandenes LUKS Setup, das wir nicht zerstören wollen. In all diesen Fällen müssen wir die zusätzlichen Schritte ausführen, die wir gleich sehen werden.

Die Kickstart-Sektion %pre

Der %pre Abschnitt einer Kickstart-Datei ist der erste, der geparst wird, wenn die Datei abgerufen wird. Es wird verwendet, um benutzerdefinierte Befehle auszuführen, bevor die Installation beginnt, und muss explizit mit %end geschlossen werden Anleitung.

In %pre , wird standardmäßig der Bash-Shell-Interpreter verwendet, aber andere können über --interpreter angegeben werden Option (um Python zu verwenden, würden wir %pre --interpreter /usr/bin/python schreiben ). Wir können diesen Abschnitt verwenden, um die Befehle auszuführen, die zum Öffnen des vorhandenen LUKS erforderlich sind Container. Folgendes können wir schreiben:

%pre
iotty="$(tty)"
exec > "${iotty}" 2> "${iotty}"

while true; do
  cryptsetup luksOpen /dev/sda1 cryptroot - && break
done
%end

Schauen wir uns den obigen Code an. Zunächst speichern wir das Ergebnis des tty Befehl, der den Dateinamen des mit der Standardeingabe verbundenen Terminals in iotty ausgibt Variable.

Mit dem exec> "${iotty}" 2> "${iotty}" Befehl haben wir Standardausgabe und Standardfehler auf dasselbe Terminal umgeleitet:
Auf diese Weise können wir das Container-Passwort eingeben, wenn crytpsetup luksOpen Der Befehl wird ausgeführt und die Eingabeaufforderung wird auf dem Bildschirm angezeigt. Der Befehl wird in einer Endlosschleife gestartet, die nur unterbrochen wird, wenn LUKS Container wurde erfolgreich geöffnet.

Wenn wir eine vollständig unbeaufsichtigte Installation ausführen möchten, müssen wir die Passphrase direkt an cryptsetup übergeben (auch dies wird nicht empfohlen). Wir würden schreiben:

%pre
echo -n "ourverysecretpassphrase" | cryptsetup luksOpen /dev/sda1 cryptroot -
%end

Im obigen Beispiel haben wir die Passphrase über eine Pipe | an die Standardeingabe des cryptsetup-Befehls übergeben :wir haben das echo verwendet Befehl mit dem -n Option, um zu vermeiden, dass am Ende der Passphrase ein Zeilenumbruchzeichen angehängt wird.

Fedora 31 Anaconda-Installationsprogramm patchen

Wenn wir versuchen, bei der Installation von Fedora 31 über Kickstart einen entsperrten LUKS-Container zu verwenden, erhalten wir die folgende
Meldung und der Vorgang wird abgebrochen:

Das vorhandene entsperrte LUKS-Gerät kann ohne einen für dieses
Gerät spezifizierten Verschlüsselungsschlüssel nicht für die Installation verwendet werden. Bitte scannen Sie den Speicher erneut.

Dies geschieht aufgrund dieses Commit, das in der Fedora 31-Version des Anaconda-Installationsprogramms eingeführt wurde. Der Code überprüft grundsätzlich, ob ein vorhandenes LUKS-Gerät einen registrierten Schlüssel hat, wenn dies nicht der Fall ist, wird die Installation abgebrochen. Das Problem ist, dass blivet , die Python-Bibliothek, die von Anaconda zum Verwalten der Partition verwendet wird, erhält den Schlüssel nur, wenn der Container von ihr geöffnet wird:Dies kann über das grafische Installationsprogramm erfolgen, aber zum Zeitpunkt des Schreibens gibt es keine Kickstart-Anweisung zum Entsperren eines vorhandenen  LUKS Container. Ich persönlich habe den Commit kommentiert und die Situation erklärt, und ein Fehler wurde auf Red Hat Bugzilla geöffnet.

Erstellen einer updates.img-Datei

Im Moment besteht die einzige mir bekannte Problemumgehung darin, den Anaconda-Quellcode zu patchen und die Zeile zu kommentieren, die das mit dem oben erwähnten Commit eingeführte Steuerelement ausführt. Die gute Nachricht ist, dass die Bedienung sehr einfach ist.

Als erstes müssen wir das Anaconda-Git-Repository klonen, insbesondere die f31-release Zweig:

$ git clone https://github.com/rhinstaller/anaconda -b f31-release

Sobald das Repo geklont ist, geben wir den anaconda ein Verzeichnis und ändern Sie die pyanaconda/storage/checker.py Datei:Alles, was wir tun müssen, ist die Zeile 619 zu kommentieren :

def set_default_checks(self):
        """Set the default checks."""
        self.checks = list()
        self.add_check(verify_root)
        self.add_check(verify_s390_constraints)
        self.add_check(verify_partition_formatting)
        self.add_check(verify_partition_sizes)
        self.add_check(verify_partition_format_sizes)
        self.add_check(verify_bootloader)
        self.add_check(verify_gpt_biosboot)
        self.add_check(verify_swap)
        self.add_check(verify_swap_uuid)
        self.add_check(verify_mountpoints_on_linuxfs)
        self.add_check(verify_mountpoints_on_root)
       #self.add_check(verify_unlocked_devices_have_key)
        self.add_check(verify_luks_devices_have_key)
        self.add_check(verify_luks2_memory_requirements)
        self.add_check(verify_mounted_partitions)

Wir speichern die Änderung und starten vom Stammverzeichnis des Repositorys aus makeupdates Skript, das in scripts zu finden ist Verzeichnis. Damit das Skript ausgeführt werden kann, müssen wir python2 haben installiert:

$ ./scripts/makeupdates

Das Skript generiert die updates.img Datei, die unsere Änderungen enthalten wird. Um seinen Inhalt zu überprüfen, können wir die lsinitrd verwenden Befehl:

$ lsinitrd updates.img
Image: updates.img: 8.0K
========================================================================
Version:

Arguments:
dracut modules:
========================================================================
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 .
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run/install
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run/install/updates
drwxr-xr-x   3 egdoc    egdoc           0 Jan 30 09:29 run/install/updates/pyanaconda
drwxr-xr-x   2 egdoc    egdoc           0 Jan 30 09:29 run/install/updates/pyanaconda/storage
-rw-r--r--   1 egdoc    egdoc       25443 Jan 30 09:29 run/install/updates/pyanaconda/storage/checker.py
========================================================================

Wir werden diese Datei verwenden, um das Installationsprogramm von Fedora 31 zu „patchen“.

Anwendung des Patches

Um die in der gerade erstellten Datei enthaltenen Änderungen anzuwenden, müssen wir sie irgendwo platzieren, wo wir leicht darauf zugreifen können, vielleicht über ftp oder http, oder sogar auf einem lokalen Blockgerät, und die inst.updates -Parameter, um ihn aus dem Fedora-Installer-Image zu referenzieren. Aus dem Grub-Menü markieren wir den Menüeintrag „Fedora installieren“:



Fedora 31 Installationsmenü

Sobald die Menüzeile ausgewählt ist, drücken wir die Tabulatortaste:Die mit dem Eintrag verknüpfte Kernel-Befehlszeile wird am unteren Rand des Bildschirms angezeigt:



Die vom „Install Fedora“-Eintrag verwendete Kernel-Kommandozeile Jetzt müssen wir nur noch die inst.updates anhängen Anweisung und geben Sie den Pfad zur updates.img an Datei, die wir erstellt haben. Angenommen, sowohl Kickstart als auch die Datei updates.img sind über http auf einem lokalen Server mit IP 192.168.0.37 zugänglich, würden wir schreiben:
vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=Fedora-S-dvd-x86_31-31 quiet
inst.updates=http://192.168.0.37/updates.img inst.ks=http://192.168.0.37/ks.cfg

An dieser Stelle können wir die Eingabetaste drücken, um zu booten. Mit der obigen Änderung beschwert sich der Installer nicht mehr über
das entsperrte LUKS Gerät, und die Installation wird ohne Probleme fortgesetzt.

Schlussfolgerungen

In diesem Artikel haben wir gesehen, wie man eine Kickstart-Installation optimiert, um ein bereits vorhandenes LUKS wiederzuverwenden Gerät, indem Sie es im %pre entsperren Abschnitt der Kickstart-Datei und wie man eine kleine Problemumgehung auf das Fedora 31 Anaconda-Installationsprogramm anwendet, das andernfalls fehlschlagen würde, wenn eine solche Art von Installation versucht wird. Wenn Sie neugierig auf die Kickstart-Syntax sind, werfen Sie bitte einen Blick in die Online-Dokumentation.


Cent OS
  1. So installieren Sie eine RPM-Datei unter Linux-Betriebssystemen (CentOS, RHEL und Fedora)

  2. So installieren Sie Google Chrome 17 auf Fedora 16, CentOS 6 / RHEL 6

  3. So installieren Sie Python 3.5 unter CentOS/RHEL und Fedora

  4. Wie entpacke ich ein 7z-Paket in CentOS/RHEL/Fedora?

  5. So installieren Sie Docker unter CentOS / RHEL / Fedora

So installieren Sie ONLYOFFICE Desktop-Editoren unter RHEL/CentOS/Fedora

So installieren Sie Opera 11.61 auf Fedora 15/16, CentOS 6 / RHEL 6

So installieren Sie Cockpit unter CentOS 7 / RHEL 7 und Fedora 28

So installieren Sie pgAdmin 4 unter CentOS 7 / RHEL 7 und Fedora 29 / Fedora 28

So installieren Sie RPM-Pakete in CentOS, RHEL und Fedora

So installieren Sie Wine 5.0 auf CentOS, RHEL und Fedora