@@ -127,6 +127,7 @@ static bool arg_default_blockio_accounting = false;
127127static bool arg_default_memory_accounting = false;
128128static bool arg_default_tasks_accounting = true;
129129static uint64_t arg_default_tasks_max = UINT64_C (512 );
130+ static sd_id128_t arg_machine_id = {};
130131
131132static void pager_open_if_enabled (void ) {
132133
@@ -300,6 +301,17 @@ static int parse_crash_chvt(const char *value) {
300301 return 0 ;
301302}
302303
304+ static int set_machine_id (const char * m ) {
305+
306+ if (sd_id128_from_string (m , & arg_machine_id ) < 0 )
307+ return - EINVAL ;
308+
309+ if (sd_id128_is_null (arg_machine_id ))
310+ return - EINVAL ;
311+
312+ return 0 ;
313+ }
314+
303315static int parse_proc_cmdline_item (const char * key , const char * value ) {
304316
305317 int r ;
@@ -388,6 +400,12 @@ static int parse_proc_cmdline_item(const char *key, const char *value) {
388400 } else
389401 log_warning ("Environment variable name '%s' is not valid. Ignoring." , value );
390402
403+ } else if (streq (key , "systemd.machine_id" ) && value ) {
404+
405+ r = set_machine_id (value );
406+ if (r < 0 )
407+ log_warning ("MachineID '%s' is not valid. Ignoring." , value );
408+
391409 } else if (streq (key , "quiet" ) && !value ) {
392410
393411 if (arg_show_status == _SHOW_STATUS_UNSET )
@@ -743,7 +761,8 @@ static int parse_argv(int argc, char *argv[]) {
743761 ARG_DESERIALIZE ,
744762 ARG_SWITCHED_ROOT ,
745763 ARG_DEFAULT_STD_OUTPUT ,
746- ARG_DEFAULT_STD_ERROR
764+ ARG_DEFAULT_STD_ERROR ,
765+ ARG_MACHINE_ID
747766 };
748767
749768 static const struct option options [] = {
@@ -769,6 +788,7 @@ static int parse_argv(int argc, char *argv[]) {
769788 { "switched-root" , no_argument , NULL , ARG_SWITCHED_ROOT },
770789 { "default-standard-output" , required_argument , NULL , ARG_DEFAULT_STD_OUTPUT , },
771790 { "default-standard-error" , required_argument , NULL , ARG_DEFAULT_STD_ERROR , },
791+ { "machine-id" , required_argument , NULL , ARG_MACHINE_ID },
772792 {}
773793 };
774794
@@ -964,6 +984,14 @@ static int parse_argv(int argc, char *argv[]) {
964984 arg_switched_root = true;
965985 break ;
966986
987+ case ARG_MACHINE_ID :
988+ r = set_machine_id (optarg );
989+ if (r < 0 ) {
990+ log_error ("MachineID '%s' is not valid." , optarg );
991+ return r ;
992+ }
993+ break ;
994+
967995 case 'h' :
968996 arg_action = ACTION_HELP ;
969997 if (arg_no_pager < 0 )
@@ -1617,7 +1645,7 @@ int main(int argc, char *argv[]) {
16171645 status_welcome ();
16181646
16191647 hostname_setup ();
1620- machine_id_setup (NULL );
1648+ machine_id_setup (NULL , arg_machine_id );
16211649 loopback_setup ();
16221650 bump_unix_max_dgram_qlen ();
16231651
0 commit comments