@@ -372,24 +372,32 @@ query_node_props(Nodes) when Nodes =/= [] ->
372
372
% % By using a temporary intermediate hidden node, we ask Erlang not to
373
373
% % connect everyone automatically.
374
374
Context = rabbit_prelaunch :get_context (),
375
- VMArgs0 = [" -boot" , " no_dot_erlang" , " -hidden" ],
376
- VMArgs1 = case Context of
375
+ VMArgs0 = [" -hidden" ],
376
+ VMArgs1 = case init :get_argument (boot ) of
377
+ {ok , [[BootFileArg ]]} ->
378
+ [" -boot" , BootFileArg | VMArgs0 ];
379
+ _ ->
380
+ % % Note: start_clean is the default boot file
381
+ % % defined in rabbitmq-defaults / CLEAN_BOOT_FILE
382
+ [" -boot" , " start_clean" | VMArgs0 ]
383
+ end ,
384
+ VMArgs2 = case Context of
377
385
#{erlang_cookie := ErlangCookie ,
378
386
var_origins := #{erlang_cookie := environment }} ->
379
- [" -setcookie" , atom_to_list (ErlangCookie ) | VMArgs0 ];
387
+ [" -setcookie" , atom_to_list (ErlangCookie ) | VMArgs1 ];
380
388
_ ->
381
- VMArgs0
389
+ VMArgs1
382
390
end ,
383
- VMArgs2 = maybe_add_tls_arguments (VMArgs1 ),
391
+ VMArgs3 = maybe_add_tls_arguments (VMArgs2 ),
384
392
PeerStartArg = case Context of
385
393
#{nodename_type := longnames } ->
386
394
#{name => PeerName ,
387
395
host => Suffix ,
388
396
longnames => true ,
389
- args => VMArgs2 };
397
+ args => VMArgs3 };
390
398
_ ->
391
399
#{name => PeerName ,
392
- args => VMArgs2 }
400
+ args => VMArgs3 }
393
401
end ,
394
402
? LOG_DEBUG (" Peer discovery: peer node arguments: ~tp " ,
395
403
[PeerStartArg ]),
@@ -421,7 +429,7 @@ maybe_add_tls_arguments(VMArgs0) ->
421
429
add_tls_arguments (inet_tls , VMArgs0 );
422
430
{ok , [[" inet6_tls" ]]} ->
423
431
add_tls_arguments (inet6_tls , VMArgs0 );
424
- error ->
432
+ _ ->
425
433
VMArgs0
426
434
end .
427
435
@@ -436,19 +444,77 @@ add_tls_arguments(InetDistModule, VMArgs0) ->
436
444
[" -pa" , filename :dirname (code :which (inet6_tls_dist ))
437
445
| ProtoDistArg ]
438
446
end ,
447
+ % % In the next case, RabbitMQ has been configured with additional Erlang VM arguments such as this:
448
+ % %
449
+ % % SERVER_ADDITIONAL_ERL_ARGS="-pa $ERL_SSL_PATH -proto_dist inet_tls
450
+ % % -ssl_dist_opt server_cacertfile /etc/rabbitmq/ca_certificate.pem
451
+ % % -ssl_dist_opt server_certfile /etc/rabbitmq/server_rmq0.local_certificate.pem
452
+ % % -ssl_dist_opt server_keyfile /etc/rabbitmq/server_rmq0.local_key.pem
453
+ % % -ssl_dist_opt server_verify verify_peer
454
+ % % -ssl_dist_opt server_fail_if_no_peer_cert true
455
+ % % -ssl_dist_opt client_cacertfile /etc/rabbitmq/ca_certificate.pem
456
+ % % -ssl_dist_opt client_certfile /etc/rabbitmq/client_rmq0.local_certificate.pem
457
+ % % -ssl_dist_opt client_keyfile /etc/rabbitmq/client_rmq0.local_key.pem
458
+ % % -ssl_dist_opt client_verify verify_peer"
459
+ % %
460
+ % % `init:get_argument(ssl_dist_opt)' returns the following data structure:
461
+ % %
462
+ % % ([email protected] )1> init:get_argument(ssl_dist_opt).
463
+ % % {ok,[["server_cacertfile",
464
+ % % "/etc/rabbitmq/ca_certificate.pem"],
465
+ % % ["server_certfile",
466
+ % % "/etc/rabbitmq/server_rmq0.local_certificate.pem"],
467
+ % % ["server_keyfile","/etc/rabbitmq/server_rmq0.local_key.pem"],
468
+ % % ["server_verify","verify_peer"],
469
+ % % ["server_fail_if_no_peer_cert","true"],
470
+ % % ["client_cacertfile","/etc/rabbitmq/ca_certificate.pem"],
471
+ % % ["client_certfile",
472
+ % % "/etc/rabbitmq/client_rmq0.local_certificate.pem"],
473
+ % % ["client_keyfile","/etc/rabbitmq/client_rmq0.local_key.pem"],
474
+ % % ["client_verify","verify_peer"]]}
475
+ % %
476
+ % % Which is then translated into arguments to `peer:start/1':
477
+ % % #{args =>
478
+ % % ["-ssl_dist_opt",
479
+ % % "server_cacertfile",
480
+ % % "/etc/rabbitmq/ca_certificate.pem",
481
+ % % "-ssl_dist_opt","server_certfile",
482
+ % % "/etc/rabbitmq/server_rmq2.local_certificate.pem",
483
+ % % "-ssl_dist_opt","server_keyfile",
484
+ % % "/etc/rabbitmq/server_rmq2.local_key.pem",
485
+ % % "-ssl_dist_opt","server_verify",
486
+ % % "verify_peer","-ssl_dist_opt",
487
+ % % "server_fail_if_no_peer_cert",
488
+ % % "true","-ssl_dist_opt",
489
+ % % "client_cacertfile",
490
+ % % "/etc/rabbitmq/ca_certificate.pem",
491
+ % % "-ssl_dist_opt","client_certfile",
492
+ % % "/etc/rabbitmq/client_rmq2.local_certificate.pem",
493
+ % % "-ssl_dist_opt","client_keyfile",
494
+ % % "/etc/rabbitmq/client_rmq2.local_key.pem",
495
+ % % "-ssl_dist_opt","client_verify",
496
+ % % "verify_peer","-pa",
497
+ % % "/usr/local/lib/erlang/lib/ssl-11.0.3/ebin",
498
+ % % "-proto_dist","inet_tls","-boot",
499
+ % % "no_dot_erlang","-hidden"],
439
500
VMArgs2 = case init :get_argument (ssl_dist_opt ) of
440
501
{ok , SslDistOpts0 } ->
441
502
SslDistOpts1 = [[" -ssl_dist_opt" | SslDistOpt ]
442
503
|| SslDistOpt <- SslDistOpts0 ],
443
504
SslDistOpts2 = lists :concat (SslDistOpts1 ),
444
505
SslDistOpts2 ++ VMArgs1 ;
445
- error ->
506
+ _ ->
446
507
VMArgs1
447
508
end ,
509
+ % % In the next case, RabbitMQ has been configured with additional Erlang VM arguments such as this:
510
+ % %
511
+ % % SERVER_ADDITIONAL_ERL_ARGS="-pa $ERL_SSL_PATH -proto_dist inet_tls -ssl_dist_optfile /etc/rabbitmq/inter_node_tls.config"
512
+ % %
513
+ % % This code adds the `ssl_dist_optfile' argument to the peer node's argument list
448
514
VMArgs3 = case init :get_argument (ssl_dist_optfile ) of
449
515
{ok , [[SslDistOptfileArg ]]} ->
450
516
[" -ssl_dist_optfile" , SslDistOptfileArg | VMArgs2 ];
451
- error ->
517
+ _ ->
452
518
VMArgs2
453
519
end ,
454
520
VMArgs3 .
0 commit comments