System cannot boot: Missing /etc/machine-id and /etc is mounted read-only.
[    3.737221] systemd[1]: Booting up is supported only when:
[    3.737617] systemd[1]: 1) /etc/machine-id exists and is populated.
[    3.738003] systemd[1]: 2) /etc/machine-id exists and is empty.
[    3.738389] systemd[1]: 3) /etc/machine-id is missing and /etc is writable.

Die Datei /etc/machine-id enthält die eindeutige Maschinen-ID des lokalen Systems, die während der Installation oder beim Booten festgelegt wird. Die Maschinen-ID ist eine einzelne, mit einem Zeilenumbruch abgeschlossene, hexadezimale, 32 Zeichen lange Kleinbuchstaben-ID. Bei der Hexadezimaldekodierung entspricht dies einem 16-Byte/128-Bit-Wert. Diese ID darf nicht nur aus Nullen bestehen.

Die Maschinen-ID wird normalerweise während der Systeminstallation oder beim ersten Start aus einer zufälligen Quelle generiert und bleibt für alle nachfolgenden Starts konstant. Optional wird es bei zustandslosen Systemen bei Bedarf zur Laufzeit beim frühen Booten generiert.

Die Maschinen-ID kann beispielsweise beim Netzwerkstart mit dem Kernel-Befehlszeilenparameter systemd.machine_id= oder durch Übergabe der Option –machine-id= an systemd festgelegt werden. Eine auf diese Weise angegebene ID hat eine höhere Priorität und wird anstelle der in /etc/machine-id gespeicherten ID verwendet.

Die Maschinen-ID ändert sich nicht aufgrund der lokalen oder Netzwerkkonfiguration oder wenn Hardware ausgetauscht wird. Aus diesem Grund und aufgrund seiner größeren Länge ist es ein sinnvollerer Ersatz für den von POSIX spezifizierten gethostid(3)-Aufruf.

Diese Maschinen-ID folgt dem gleichen Format und der gleichen Logik wie die D-Bus-Maschinen-ID.

Diese ID identifiziert den Host eindeutig. Sie sollten als „vertraulich“ betrachtet werden und dürfen nicht in nicht vertrauenswürdigen Umgebungen, insbesondere im Netzwerk, offengelegt werden. Wenn für eine Anwendung eine stabile eindeutige Kennung benötigt wird, die an die Maschine gebunden ist, darf die Maschinen-ID oder ein Teil davon nicht direkt verwendet werden. Stattdessen sollte die Maschinen-ID mit einer kryptografischen, verschlüsselten Hash-Funktion unter Verwendung eines festen, anwendungsspezifischen Schlüssels gehasht werden. Auf diese Weise ist die ID korrekt eindeutig und wird in konstanter Weise von der Maschinen-ID abgeleitet, es gibt jedoch keine Möglichkeit, die ursprüngliche Maschinen-ID von der anwendungsspezifischen abzurufen. Die API sd_id128_get_machine_app_pecific(3) stellt eine Implementierung eines solchen Algorithmus bereit.

Wenn /etc/machine-id nicht existiert, handelt es sich um einen Erststart. Während des frühen Startvorgangs schreibt systemd „uninitialized\n“ in diese Datei und überlagert eine temporäre Datei, die die tatsächliche Maschinen-ID enthält. Später (nachdem first-boot-complete.target erreicht wurde) wird die tatsächliche Maschinen-ID auf die Festplatte geschrieben. Wenn /etc/machine-id die Zeichenfolge „uninitialized“ enthält, wird ein Start auch als erster Start betrachtet. Es gilt der gleiche Mechanismus wie oben. Wenn /etc/machine-id vorhanden und leer ist, wird ein Start nicht als erster Start betrachtet. systemd bindet weiterhin eine Datei mit der tatsächlichen Maschinen-ID darüber und versucht später, sie auf die Festplatte zu übertragen (sofern /etc/ beschreibbar ist). Wenn /etc/machine-id bereits eine gültige Maschinen-ID enthält, handelt es sich nicht um einen Erststart. Wenn gemäß den oben genannten Regeln ein Erststart erkannt wird, werden Einheiten mit ConditionFirstBoot=yes ausgeführt und systemd führt zusätzliche Initialisierungsschritte durch, insbesondere Voreinstellungen für Einheiten.

michis-kiste /etc # systemd-machine-id-setup 
Initializing machine ID from random generator.