8 Konfiguration mit Ignition #
In diesem Abschnitt finden Sie Informationen zum Bereitstellungstool Ignition, mit dem ein Computer eingerichtet wird. Hier erfahren Sie, wie Sie die erforderlichen Konfigurationsdateien für die Computerdefinition bereitstellen.
8.1 Informationen zu Ignition #
Mit dem Bereitstellungstool Ignition können Sie ein System beim ersten Starten gemäß Ihrer Spezifikation konfigurieren. Wenn das System erstmalig gestartet wird, wird Ignition als Teil von initramfs geladen und sucht eine Konfigurationsdatei in einem bestimmten Verzeichnis (auf einem USB-Speicherstick; alternativ können Sie eine URL angeben). Alle Änderungen werden vorgenommen, bevor der Kernel vom temporären Dateisystem zum echten Root-Dateisystem wechselt (bevor der Befehl switch_root ausgeführt wird).
Ignition nutzt eine Konfigurationsdatei im JSON-Format. Die Datei trägt den Namen config.ign.
8.2 config.ign #
config.ign ist eine JSON-Konfigurationsdatei, die Anweisungen für Ignition enthält. Sie können die Datei entweder manuell in JSON erstellen oder das Tool Fuel Ignition (https://opensuse.github.io/fuel-ignition/) verwenden, um einen einfachen Satz von Anweisungen zu generieren. Beachten Sie, dass das Tool Fuel Ignition keinen vollständigen Satz von Optionen bietet, sodass Sie die Datei möglicherweise manuell ändern müssen.
Zur besseren Lesbarkeit für Menschen können Sie die Datei config.fcc auch in YAML erstellen und in JSON transpilieren. Detaillierte Informationen finden Sie in Abschnitt 8.2.2, „Konvertieren einer YAML fcc-Datei in JSON ign“.
Bei der Installation auf einem Bare-Metal-System muss sich die Konfigurationsdatei config.ign im Unterverzeichnis ignition auf dem Konfigurationsmedium mit der Bezeichnung ignition befinden. Die Verzeichnisstruktur muss wie folgt aussehen:
<root directory>
└── ignition
└── config.ign
Falls Sie einen virtuellen QEMU-/KVM-Computer konfigurieren möchten, geben Sie den Pfad zur Datei config.ign als Attribut des Befehls qemu an. Beispiel:
-fw_cfg name=opt/com.coreos/config,file=PATH_TO_config.ign
Die Datei config.ign enthält verschiedene Datentypen – Objekte, Zeichenketten, Ganzzahlen, boolesche Werte und Objektlisten. Eine vollständige Spezifikation finden Sie unter Ignition
specification v3.3.0.
Das Attribut version ist obligatorisch und muss bei SLE Micro entweder auf 3.3.0 oder auf eine beliebige niedrigere Version eingestellt werden. Ansonsten funktioniert Ignition nicht.
Wenn Sie sich als „root“ bei Ihrem System anmelden möchten, müssen Sie mindestens ein Passwort für root angeben. Es wird allerdings empfohlen, den Zugriff mithilfe von SSH-Schlüsseln einzurichten. Wenn Sie ein Passwort konfigurieren möchten, müssen Sie ein sicheres Passwort verwenden. Falls Sie ein zufällig erzeugtes Passwort heranziehen, muss dieses Passwort mindestens 10 Zeichen enthalten. Wenn Sie Ihr Passwort manuell erstellen, verwenden Sie mehr als 10 Zeichen und kombinieren Sie Großbuchstaben, Kleinbuchstaben und Ziffern.
8.2.1 Konfigurationsbeispiele #
In diesem Abschnitt finden Sie einige gängige Beispiele für die Ignition-Konfiguration sowohl im JSON- als auch im YAML-Format. Wenn Sie die Konfiguration im YAML-Format erstellen, müssen Sie die Konfiguration in JSON transpilieren, wie in Abschnitt 8.2.2, „Konvertieren einer YAML fcc-Datei in JSON ign“ beschrieben.
Falls Sie Dateien außerhalb von default mounted directories erstellen möchten, müssen Sie die Verzeichnisse mit dem Attribut filesystem definieren.
version ist obligatorisch
Schließen Sie die Versionsspezifikation in config.ign (Version 3.3.0 oder niedriger) bzw. in config.fcc (Version 1.4.0 oder niedriger) ein.
8.2.1.1 Speicherkonfiguration #
Mit dem Attribut storage können Sie Partitionen und RAID konfigurieren, Dateisysteme definieren, Dateien erstellen usw. Zum Definieren von Partitionen verwenden Sie das Attribut disks. Mit dem Attribut filesystem können Sie Partitionen formatieren und Einhängepunkte bestimmter Partitionen definieren. Mit dem Attribut files können Sie Dateien im Dateisystem erstellen. Die genannten Attribute werden in den nachfolgenden Abschnitten beschrieben.
8.2.1.1.1 Das Attribut disks #
Das Attribut disks ist eine Liste mit Geräten, sodass Sie Partitionen auf diesen Geräten definieren können. Das Attribut disks muss mindestens ein Gerät (device) enthalten. Andere Attribute sind optional. Im folgenden Beispiel wird ein einzelnes virtuelles Gerät verwendet und die Festplatte wird in vier Partitionen aufgeteilt:
{
"variant": "fcos",
"version": "3.3.0",
"storage": {
"disks": [
{
"device": "/dev/vda",
"wipe_table": true,
"partitions": [
{
"label": "root",
"number": 1,
"type_guid": "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709"
},
{
"label": "boot",
"number": 2,
"type_guid": "BC13C2FF-59E6-4262-A352-B275FD6F7172"
},
{
"label": "swap",
"number": 3,
"type_guid": "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F"
},
{
"label": "home",
"number": 4,
"type_guid": "933AC7E1-2EB4-4F13-B844-0E14E2AEF915"
}
]
}
]
}
}Das gleiche Beispiel im YAML-Format:
variant: fcos
version: 1.4.0
storage:
disks:
- device: "/dev/vda"
wipeTable: true
partitions:
- label: root
number: 1
typeGuid: 4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
- label: boot
number: 2
typeGuid: BC13C2FF-59E6-4262-A352-B275FD6F7172
- label: swap
number: 3
typeGuid: 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
- label: home
number: 4
typeGuid: 933AC7E1-2EB4-4F13-B844-0E14E2AEF9158.2.1.1.2 Das Attribut raid #
raid ist eine Liste mit RAID-Arrays. Die folgenden Attribute für raid sind obligatorisch:
- level
Ebene des jeweiligen RAID-Arrays (linear, raid0, raid1, raid2, raid3, raid4, raid5, raid6)
- geeignet sind
Liste mit Geräten im Array (anhand ihrer absoluten Pfade referenziert)
- Name
Name für das md-Gerät
{
"variant": "fcos",
"version": "3.3.0",
"storage": {
"raid": [
{
"name": "system",
"level": "raid1",
"devices": [
"/dev/sda",
"/dev/sdb"
]
}
]
}
}Das gleiche Beispiel im YAML-Format:
variant: fcos
version: 1.4.0
storage:
- raid: data
name: system
level: raid1
devices: "/dev/sda", "/dev/sdb"8.2.1.1.3 Das Attribut filesystem #
filesystem muss die folgenden Attribute enthalten:
- Gerät
Absoluter Pfad zum Gerät, bei physischen Festplatten in der Regel
/dev/sda- Format
Dateisystemformat (btrfs, ext4, xfs, vfat oder swap)
AnmerkungFür SLE Micro muss das
root-Dateisystem mit btrfs formatiert werden.
Das folgende Beispiel zeigt die Verwendung des Attributs filesystem. Das Verzeichnis /opt wird in die Partition /dev/sda1 eingehängt, die mit btrfs formatiert ist. Die Partitionstabelle wird nicht gelöscht.
{
"variant": "fcos",
"version": "3.3.0",
"storage": {
"filesystems": [
{
"path": "/opt",
"device": "/dev/sda1",
"format": "btrfs",
"wipe_filesystem": false
}
]
}
}Das gleiche Beispiel im YAML-Format:
variant: fcos
version: 1.4.0
storage:
filesystems:
- path: /opt
device: "/dev/sda1"
format: btrfs
wipe_filesystem: false8.2.1.1.4 Das Attribut files #
Mit dem Attribut files können Sie beliebige Dateien auf Ihrem Computer erstellen. Falls Sie Dateien außerhalb von default mounted directories erstellen möchten, müssen Sie die Verzeichnisse mit dem Attribut filesystem definieren.
Im folgenden Beispiel wird ein Hostname mit dem Attribut files erstellt. Die Datei /etc/hostname wird mit dem Hostnamen slemicro-1 erstellt.
Beachten Sie, dass JSON das dezimale Zahlensystem verwendet, sodass der mode-Wert der dezimalen Schreibweise der Zugriffsrechte entspricht. Für die oktale Schreibweise sollten Sie in diesem Fall YAML verwenden.
{
"variant": "fcos",
"version": "3.3.0",
"storage": {
"files": [
{
"path": "/etc/hostname",
"mode": 420,
"overwrite": true,
"contents": {
"inline": "slemicro-1"
}
}
]
}
}Das gleiche Beispiel in YAML:
variant: fcos
version: 1.4.0
storage:
files:
- path: /etc/hostname
mode: 0644
overwrite: true
contents:
inline: "slemicro-1"8.2.1.1.5 Das Attribut directories #
Das Attribut directories ist eine Liste mit Verzeichnissen, die im Dateisystem erstellt werden. Das Attribut directories muss mindestens ein Attribut path enthalten.
{
"variant": "fcos",
"version": "3.3.0",
"storage": {
"directories": [
{
"path": "/mnt/backup",
"user": {
"name": "tux"
}
}
]
}
}Das gleiche Beispiel in YAML:
variant: fcos
version: 1.4.0
storage:
directories:
- path: /mnt/backup
user:
- name: tux8.2.1.2 Benutzerverwaltung #
Mit dem Attribut passwd können Sie Benutzer hinzufügen. Wenn Sie sich bei Ihrem System anmelden möchten, erstellen Sie root und legen Sie das root-Passwort fest und/oder fügen Sie den SSH-Schlüssel in die Ignition-Konfiguration ein. Sie müssen einen Hash für das root-Passwort generieren, z. B. mit dem Befehl openssl:
openssl passwd -6
Der Befehl erstellt einen Hash für das ausgewählte Passwort. Tragen Sie diesen Hash als Wert für das Attribut password_hash ein.
variant: fcos
version: 1.0.0
passwd:
users:
- name: root
password_hash: "$6$PfKm6Fv5WbqOvZ0C$g4kByYM.D2B5GCsgluuqDNL87oeXiHqctr6INNNmF75WPGgkLn9O9uVx4iEe3UdbbhaHbTJ1vpZymKWuDIrWI1"
ssh_authorized_keys:
- ssh-rsa long...key user@host
Das Attribut users muss mindestens ein Attribut name enthalten. ssh_authorized_keys ist eine Liste von SSH-Schlüsseln für den Benutzer.
root
Wenn Sie andere Benutzer als root erstellen, müssen Sie /home-Verzeichnisse für die Benutzer definieren, da diese Verzeichnisse (in der Regel /home/USER_NAME) nicht standardmäßig eingehängt werden. Deklarieren Sie daher diese Verzeichnisse mit dem Attribut storage/filesystem. Für „tux“ sieht das Beispiel folgendermaßen aus:
{
"ignition": {
"version": "3.2.0"
},
"passwd": {
"users": [
{
"name": "tux",
"passwordHash": "$2a$10$US9XSqLOqMmGq/OnhlVjPOwuZREh2.iEtlwD5LI7DKgV24NJU.wO6"
}
]
},
"storage": {
"filesystems": [
{
"device": "/dev/disk/by-label/ROOT",
"format": "btrfs",
"mountOptions": [
"subvol=/@/home"
],
"path": "/home",
"wipeFilesystem": false
}
]
}
}Das gleiche Beispiel in YAML:
version: 1.2.0
passwd:
users:
- name: tux
passwordHash: $2a$10$US9XSqLOqMmGq/OnhlVjPOwuZREh2.iEtlwD5LI7DKgV24NJU.wO6
storage:
filesystems:
- device: /dev/disk/by-label/ROOT
format: btrfs
mountOptions:
- subvol=/@/home
path: /home
wipeFilesystem: false8.2.1.3 Aktivieren von systemd-Diensten #
Sollen systemd-Dienste aktiviert werden, geben Sie diese Dienste im Attribut systemd an. name muss den genauen Namen des zu aktivierenden Dienstes enthalten (mit Suffix).
variant: fcos
version: 1.0.0
systemd:
units:
- name: sshd.service
enabled: true {
"ignition": {
"version": "3.0.0"
},
"systemd": {
"units": [
{
"enabled": true,
"name": "sshd.service"
}
]
}
}Das gleiche Beispiel in YAML:
variant: fcos
version: 1.0.0
systemd:
units:
- name: sshd.service
enabled: true8.2.2 Konvertieren einer YAML fcc-Datei in JSON ign #
Soll die Ignition-Konfiguration leichter für Menschen lesbar sein, können Sie eine zweiphasige Konfiguration verwenden. Bereiten Sie zunächst die Konfiguration in YAML als fcc-Datei vor und transpilieren Sie diese Konfiguration dann nach JSON. Die Transpilation kann mit dem butane-Tool vorgenommen werden.
Während der Transpilation überprüft butane außerdem die Syntax der YAML-Datei, sodass eventuelle Fehler in der Struktur erkannt werden. Fügen Sie ein Repository für die neueste Version des butane-Tools hinzu:
>sudozypper ar -f \ https://download.opensuse.org/repositories/devel:/kubic:/ignition/DISTRIBUTION/ \ devel_kubic_ignition
DISTRIBUTION entspricht dabei einer der folgenden Bezeichnungen (je nach Ihrer Distribution):
openSUSE_TumbleweedopenSUSE_Leap_$release_number15.a
Nun können Sie das butane-Tool installieren:
>sudozypper in butane
Nun können Sie butane mit folgendem Befehl aufrufen:
> butane -p -o config.ign config.fccmit folgenden Bedeutungen
config.fccist der Pfad der YAML-Konfigurationsdateiconfig.ignist der Pfad der ausgegebenen JSON-KonfigurationsdateiMit der Befehlsoption
-pkönnen Sie Zeilenumbrüche in die Ausgabedatei einfügen und damit die Lesbarkeit der Datei erhöhen.