summarylogtreecommitdiffstats
path: root/0002_added_machine_id_firmware_option.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002_added_machine_id_firmware_option.patch')
-rw-r--r--0002_added_machine_id_firmware_option.patch276
1 files changed, 138 insertions, 138 deletions
diff --git a/0002_added_machine_id_firmware_option.patch b/0002_added_machine_id_firmware_option.patch
index d389ebc1de41..575ae23268f0 100644
--- a/0002_added_machine_id_firmware_option.patch
+++ b/0002_added_machine_id_firmware_option.patch
@@ -1,218 +1,218 @@
+Subject: [PATCH] added systemd.machine_id=firmware option
+---
+Index: man/machine-id.xml
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/man/machine-id.xml b/man/machine-id.xml
+--- a/man/machine-id.xml (revision 051d462b42fe6c27824046c15cd3c84fa5afe05b)
++++ b/man/machine-id.xml (revision 21004b30bf831859d1743658915bce0fbd500e74)
+@@ -102,7 +102,8 @@
+ value of the kernel command line option <varname>container_uuid</varname>, the KVM DMI
+ <filename>product_uuid</filename> or the devicetree <filename>vm,uuid</filename>
+ (on KVM systems), the Xen hypervisor <filename>uuid</filename>, and finally a randomly
+- generated UUID.</para>
++ generated UUID. <varname>systemd.machine_id=firmware</varname> can be set to generate the machine id
++ from the firmware.</para>
+
+ <para>After the machine ID is established,
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+Index: src/core/main.c
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/src/core/main.c b/src/core/main.c
+--- a/src/core/main.c (revision 051d462b42fe6c27824046c15cd3c84fa5afe05b)
++++ b/src/core/main.c (revision 21004b30bf831859d1743658915bce0fbd500e74)
+@@ -148,6 +148,7 @@
+ static Set* arg_syscall_archs;
+ static FILE* arg_serialization;
+ static sd_id128_t arg_machine_id;
++static bool arg_machine_id_from_firmware = false;
+ static EmergencyAction arg_cad_burst_action;
+ static CPUSet arg_cpu_affinity;
+ static NUMAPolicy arg_numa_policy;
+@@ -381,10 +382,15 @@
+ if (proc_cmdline_value_missing(key, value))
+ return 0;
+
+- r = id128_from_string_nonzero(value, &arg_machine_id);
+- if (r < 0)
+- log_warning_errno(r, "MachineID '%s' is not valid, ignoring: %m", value);
+-
++ if (streq(value, "firmware"))
++ arg_machine_id_from_firmware = true;
++ else {
++ r = id128_from_string_nonzero(value, &arg_machine_id);
++ if (r < 0)
++ log_warning_errno(r, "MachineID '%s' is not valid, ignoring: %m", value);
++ else
++ arg_machine_id_from_firmware = false;
++ }
+ } else if (proc_cmdline_key_streq(key, "systemd.default_timeout_start_sec")) {
+
+ if (proc_cmdline_value_missing(key, value))
+@@ -2366,8 +2372,9 @@
+
+ (void) os_release_status();
+ (void) hostname_setup(true);
+- /* Force transient machine-id on first boot. */
+- machine_id_setup(/* root= */ NULL, /* force_transient= */ first_boot, arg_machine_id, /* ret_machine_id */ NULL);
++
++ machine_id_setup(/* root= */ NULL, arg_machine_id, (first_boot ? MACHINE_ID_SETUP_FORCE_TRANSIENT : 0) |
++ (arg_machine_id_from_firmware ? MACHINE_ID_SETUP_FORCE_FIRMWARE : 0), /* ret_machine_id */ NULL);
+ (void) loopback_setup();
+ bump_unix_max_dgram_qlen();
+ bump_file_max_and_nr_open();
+Index: src/machine-id-setup/machine-id-setup-main.c
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/src/machine-id-setup/machine-id-setup-main.c b/src/machine-id-setup/machine-id-setup-main.c
+--- a/src/machine-id-setup/machine-id-setup-main.c (revision 051d462b42fe6c27824046c15cd3c84fa5afe05b)
++++ b/src/machine-id-setup/machine-id-setup-main.c (revision 21004b30bf831859d1743658915bce0fbd500e74)
+@@ -188,7 +188,7 @@
+ } else {
+ sd_id128_t id;
+
+- r = machine_id_setup(arg_root, false, SD_ID128_NULL, &id);
++ r = machine_id_setup(arg_root, SD_ID128_NULL, /* flags = */ 0, &id);
+ if (r < 0)
+ return r;
+
Index: src/shared/machine-id-setup.c
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/shared/machine-id-setup.c b/src/shared/machine-id-setup.c
---- a/src/shared/machine-id-setup.c (revision 8f4dab049074d31c31af2bb9eb76f9f4f08e3711)
-+++ b/src/shared/machine-id-setup.c (date 1714255351696)
-@@ -28,7 +28,8 @@
+--- a/src/shared/machine-id-setup.c (revision 051d462b42fe6c27824046c15cd3c84fa5afe05b)
++++ b/src/shared/machine-id-setup.c (revision 21004b30bf831859d1743658915bce0fbd500e74)
+@@ -30,7 +30,8 @@
#include "umask-util.h"
#include "virt.h"
-
+
-static int acquire_machine_id_from_credential(sd_id128_t *ret) {
+static int acquire_machine_id_from_credential(sd_id128_t *ret_machine_id, bool *ret_machine_id_from_firmware) {
+
_cleanup_free_ char *buf = NULL;
int r;
-
-@@ -38,7 +39,12 @@
+
+@@ -40,15 +41,22 @@
if (r == 0) /* not found */
return -ENXIO;
-
+
- r = sd_id128_from_string(buf, ret);
+ if (streq(buf, "firmware")) {
+ *ret_machine_id_from_firmware = true;
++ *ret_machine_id = SD_ID128_NULL;
+ return 0;
+ }
+
+ r = sd_id128_from_string(buf, ret_machine_id);
if (r < 0)
++ *ret_machine_id_from_firmware = false;
return log_warning_errno(r, "Failed to parse system.machine_id credential, ignoring: %m");
-
-@@ -46,7 +52,7 @@
+
+ log_info("Initializing machine ID from credential.");
return 0;
}
-
--static int generate_machine_id(const char *root, sd_id128_t *ret) {
-+static int generate_machine_id(const char *root, sd_id128_t *ret, bool machine_id_from_firmware) {
+
+-static int acquire_machine_id(const char *root, sd_id128_t *ret) {
++static int acquire_machine_id(const char *root, sd_id128_t *ret, const bool machine_id_from_firmware) {
_cleanup_close_ int fd = -EBADF;
int r;
-
-@@ -61,7 +67,7 @@
-
+
+@@ -71,8 +79,9 @@
+ }
+
if (isempty(root) && running_in_chroot() <= 0) {
++ bool machine_id_from_firmware_credentials;
/* Let's use a system credential for the machine ID if we can */
-- r = acquire_machine_id_from_credential(ret);
-+ r = acquire_machine_id_from_credential(ret, &machine_id_from_firmware);
- if (r >= 0)
- return r;
-
-@@ -78,14 +84,14 @@
+- if (acquire_machine_id_from_credential(ret) >= 0)
++ if (acquire_machine_id_from_credential(ret, &machine_id_from_firmware_credentials) >= 0)
+ return 0;
+
+ /* If that didn't work, see if we are running in a container,
+@@ -88,14 +97,14 @@
return 0;
}
-
+
- } else if (IN_SET(detect_vm(), VIRTUALIZATION_KVM, VIRTUALIZATION_AMAZON, VIRTUALIZATION_QEMU, VIRTUALIZATION_XEN)) {
-+ } else if (IN_SET(detect_vm(), VIRTUALIZATION_KVM, VIRTUALIZATION_AMAZON, VIRTUALIZATION_QEMU, VIRTUALIZATION_XEN) || machine_id_from_firmware) {
-
++ } else if (IN_SET(detect_vm(), VIRTUALIZATION_KVM, VIRTUALIZATION_AMAZON, VIRTUALIZATION_QEMU, VIRTUALIZATION_XEN) || machine_id_from_firmware || machine_id_from_firmware_credentials) {
+
/* If we are not running in a container, see if we are running in a VM that provides
* a system UUID via the SMBIOS/DMI interfaces. Such environments include QEMU/KVM
* with the -uuid on the qemu command line or the Amazon EC2 Nitro hypervisor. */
-
+
if (id128_get_product(ret) >= 0) {
- log_info("Initializing machine ID from VM UUID.");
+ log_info("Initializing machine ID from SMBIOS/DMI UUID.");
return 0;
}
}
-@@ -100,12 +106,16 @@
+@@ -110,12 +119,14 @@
return 0;
}
-
+
-int machine_id_setup(const char *root, bool force_transient, sd_id128_t machine_id, sd_id128_t *ret) {
+int machine_id_setup(const char *root, sd_id128_t machine_id, MachineIdSetupFlags flags, sd_id128_t *ret) {
const char *etc_machine_id, *run_machine_id;
_cleanup_close_ int fd = -EBADF;
- bool writable;
-+ bool machine_id_from_firmware = false;
+ bool writable, write_run_machine_id = true;
int r;
-
-+ if (flags & MACHINE_ID_SETUP_FORCE_FIRMWARE)
-+ machine_id_from_firmware = true;
+
++ bool machine_id_from_firmware = FLAGS_SET(flags, MACHINE_ID_SETUP_FORCE_FIRMWARE);
+
etc_machine_id = prefix_roota(root, "/etc/machine-id");
-
+
WITH_UMASK(0000) {
-@@ -138,14 +148,14 @@
+@@ -148,14 +159,14 @@
}
-
+
/* A we got a valid machine ID argument, that's what counts */
- if (sd_id128_is_null(machine_id)) {
+ if (sd_id128_is_null(machine_id) || machine_id_from_firmware) {
-
+
/* Try to read any existing machine ID */
- if (id128_read_fd(fd, ID128_FORMAT_PLAIN, ret) >= 0)
- return 0;
-
- /* Hmm, so, the id currently stored is not useful, then let's generate one */
-- r = generate_machine_id(root, &machine_id);
-+ r = generate_machine_id(root, &machine_id, machine_id_from_firmware);
+ if (id128_read_fd(fd, ID128_FORMAT_PLAIN, &machine_id) >= 0)
+ goto finish;
+
+ /* Hmm, so, the id currently stored is not useful, then let's acquire one. */
+- r = acquire_machine_id(root, &machine_id);
++ r = acquire_machine_id(root, &machine_id, machine_id_from_firmware);
if (r < 0)
return r;
- }
-@@ -161,7 +171,7 @@
+ write_run_machine_id = !r;
+@@ -172,7 +183,7 @@
* disk and overmount it with a transient file.
*
* Otherwise write the machine-id directly to disk. */
- if (force_transient) {
-+ if (flags & MACHINE_ID_SETUP_FORCE_TRANSIENT) {
++ if (FLAGS_SET(flags, MACHINE_ID_SETUP_FORCE_TRANSIENT)) {
r = loop_write(fd, "uninitialized\n", SIZE_MAX);
if (r < 0)
return log_error_errno(r, "Failed to write uninitialized %s: %m", etc_machine_id);
-@@ -199,7 +209,7 @@
+@@ -212,7 +223,7 @@
return r;
}
-
+
- log_full(force_transient ? LOG_DEBUG : LOG_INFO, "Installed transient %s file.", etc_machine_id);
-+ log_full(flags & MACHINE_ID_SETUP_FORCE_TRANSIENT ? LOG_DEBUG : LOG_INFO, "Installed transient %s file.", etc_machine_id);
-
++ log_full(FLAGS_SET(flags, MACHINE_ID_SETUP_FORCE_TRANSIENT) ? LOG_DEBUG : LOG_INFO, "Installed transient %s file.", etc_machine_id);
+
/* Mark the mount read-only */
r = mount_follow_verbose(LOG_WARNING, NULL, etc_machine_id, NULL, MS_BIND|MS_RDONLY|MS_REMOUNT, NULL);
-Index: src/core/main.c
-IDEA additional info:
-Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
-<+>UTF-8
-===================================================================
-diff --git a/src/core/main.c b/src/core/main.c
---- a/src/core/main.c (revision 8f4dab049074d31c31af2bb9eb76f9f4f08e3711)
-+++ b/src/core/main.c (date 1714255351649)
-@@ -144,6 +144,7 @@
- static Set* arg_syscall_archs;
- static FILE* arg_serialization;
- static sd_id128_t arg_machine_id;
-+static bool arg_machine_id_from_firmware = false;
- static EmergencyAction arg_cad_burst_action;
- static CPUSet arg_cpu_affinity;
- static NUMAPolicy arg_numa_policy;
-@@ -352,10 +353,15 @@
- if (proc_cmdline_value_missing(key, value))
- return 0;
-
-- r = id128_from_string_nonzero(value, &arg_machine_id);
-- if (r < 0)
-- log_warning_errno(r, "MachineID '%s' is not valid, ignoring: %m", value);
--
-+ if (streq(value, "firmware"))
-+ arg_machine_id_from_firmware = true;
-+ else {
-+ r = id128_from_string_nonzero(value, &arg_machine_id);
-+ if (r < 0)
-+ log_warning_errno(r, "MachineID '%s' is not valid, ignoring: %m", value);
-+ else
-+ arg_machine_id_from_firmware = false;
-+ }
- } else if (proc_cmdline_key_streq(key, "systemd.default_timeout_start_sec")) {
-
- if (proc_cmdline_value_missing(key, value))
-@@ -2234,8 +2240,13 @@
-
- (void) os_release_status();
- (void) hostname_setup(true);
-- /* Force transient machine-id on first boot. */
-- machine_id_setup(/* root= */ NULL, /* force_transient= */ first_boot, arg_machine_id, /* ret_machine_id */ NULL);
-+
-+ /* Set up the machine ID flags */
-+ MachineIdSetupFlags machine_id_setup_flags = 0;
-+ machine_id_setup_flags = (first_boot ? MACHINE_ID_SETUP_FORCE_TRANSIENT : 0) |
-+ (arg_machine_id_from_firmware ? MACHINE_ID_SETUP_FORCE_FIRMWARE : 0);
-+
-+ machine_id_setup(/* root= */ NULL, arg_machine_id, machine_id_setup_flags, /* ret_machine_id */ NULL);
- (void) loopback_setup();
- bump_unix_max_dgram_qlen();
- bump_file_max_and_nr_open();
-Index: man/machine-id.xml
-IDEA additional info:
-Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
-<+>UTF-8
-===================================================================
-diff --git a/man/machine-id.xml b/man/machine-id.xml
---- a/man/machine-id.xml (revision 8f4dab049074d31c31af2bb9eb76f9f4f08e3711)
-+++ b/man/machine-id.xml (date 1714255351569)
-@@ -102,7 +102,8 @@
- value of the kernel command line option <varname>container_uuid</varname>, the KVM DMI
- <filename>product_uuid</filename> or the devicetree <filename>vm,uuid</filename>
- (on KVM systems), the Xen hypervisor <filename>uuid</filename>, and finally a randomly
-- generated UUID.</para>
-+ generated UUID. <varname>systemd.machine_id=firmware</varname> can be set to generate the machine id
-+ from the firmware.</para>
-
- <para>After the machine ID is established,
- <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
-Index: src/machine-id-setup/machine-id-setup-main.c
-IDEA additional info:
-Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
-<+>UTF-8
-===================================================================
-diff --git a/src/machine-id-setup/machine-id-setup-main.c b/src/machine-id-setup/machine-id-setup-main.c
---- a/src/machine-id-setup/machine-id-setup-main.c (revision 8f4dab049074d31c31af2bb9eb76f9f4f08e3711)
-+++ b/src/machine-id-setup/machine-id-setup-main.c (date 1714255351673)
-@@ -188,7 +188,7 @@
- } else {
- sd_id128_t id;
-
-- r = machine_id_setup(arg_root, false, SD_ID128_NULL, &id);
-+ r = machine_id_setup(arg_root, SD_ID128_NULL, 0, &id);
- if (r < 0)
- return r;
-
Index: src/shared/machine-id-setup.h
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/src/shared/machine-id-setup.h b/src/shared/machine-id-setup.h
---- a/src/shared/machine-id-setup.h (revision 8f4dab049074d31c31af2bb9eb76f9f4f08e3711)
-+++ b/src/shared/machine-id-setup.h (date 1714255351713)
+--- a/src/shared/machine-id-setup.h (revision 051d462b42fe6c27824046c15cd3c84fa5afe05b)
++++ b/src/shared/machine-id-setup.h (revision 21004b30bf831859d1743658915bce0fbd500e74)
@@ -3,5 +3,10 @@
#include <stdbool.h>