erl_call -q

Bogdan Andu bog495@REDACTED
Tue Mar 29 14:40:06 CEST 2022


Hi,

I tried that before like this:
$ erl -setcookie proxy -proto_dist inet_tls -ssl_dist_optfile file_with_pem
-name 'stop-node@REDACTED' -s rpc call target-node@REDACTED init stop []
Erlang/OTP 24 [erts-12.3] [source] [64-bit] [smp:4:4] [ds:4:4:10]
[async-threads:1]

{"init terminating in do_boot",{undef,[{rpc,call,[['target-node@REDACTED
',init,stop,'[]']],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
init terminating in do_boot
({undef,[{erpc,call,[[_]],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]})

Crash dump is being written to: erl_crash.dump...done

$

But I looked for an erl_call based solution.

The thing is in that way the signature for rpc:call/4 will never be matched
because of the way -s flag
packs the function call and parameters.

Basically, it sends all parameters wrapped into a list, but the signature
of rpc:call/4 is this:
rpc:call(Node, Module, Function, Args)
and we get this with -s flag:
rpc:call([Node, Module, Function, Args])

And also the empty list argument needed for rpc:call is wrapped in '' like
this: '[]'

Normally, erl_call must be able to talk to tls nodes not only with tcp
nodes.

I founded a workaround if you are on elixir node:
$ elixir --name stop-node@REDACTED --cookie proxy  --erl "-proto_dist inet_tls"
--rpc-eval target-node@REDACTED System.stop

Again, it would be nice if erl would have a switch like --rpc-eval

Thanks,

Bogdan


On Mon, Mar 28, 2022 at 8:13 PM Luke Bakken <luke@REDACTED> wrote:

> Hello,
>
> I don't believe that erl_call supports the "inet_tls" distribution
> protocol - https://www.erlang.org/doc/man/erl_call.html
>
> At least, it's not documented in the manual page.
>
> If I try to connect to a TLS dist node using remsh, but without
> specifying certs, I get a function_clause error in
> public_key,pkix_decode_cert due to the lack of certificates.
>
> My guess is that, provided that you configure certificates for TLS
> distribution, you could accomplish what you want by starting a second
> node, connecting the "usual way" via addressing the other node, and
> then use the rpc module to stop the node.
>
> Thanks,
> Luke
>
> On Fri, Mar 25, 2022 at 2:13 AM Bogdan Andu <bog495@REDACTED> wrote
> >
> > Hello,
> >
> > I want to stop a node started with switch -proto_dist inet_tls :
> > $ /usr/lib/erlang/lib/erl_interface-5.2.1/bin/erl_call -q -c proxy -name
> 'node-name@REDACTED'
> >
> > doesn't kill the node:
> > $ erl -name node-name@REDACTED -setcookie proxy -proto_dist inet_tls
> > Erlang/OTP 24 [erts-12.3] [source] [64-bit] [smp:4:4] [ds:4:4:10]
> [async-threads:1]
> >
> > Eshell V12.3  (abort with ^G)
> > (node-name@REDACTED)1> =NOTICE REPORT==== 25-Mar-2022::08:55:56.447550
> ===
> > TLS server: In state hello at tls_record.erl:564 generated SERVER ALERT:
> Fatal - Unexpected Message
> >  - {unsupported_record_type,0}
> >
> > (node-name@REDACTED)1>
> >
> > Because the ssl handshake fails the node does not 'catch' the
> > command to terminate itself.
> >
> >
> > The execution of command shows the error:
> > $ /usr/lib/erlang/lib/erl_interface-5.2.1/bin/erl_call -c proxy -name
> node-name@REDACTED -a "init stop"
> > erl_call: failed to connect to node node-name@REDACTED
> >
> > Actually the erl_call node connects to 'node-name@REDACTED'  but is
> rejected with the same error as above.
> >
> > Because the erl_call cannot connect to a tls erlang node, erl_call
> cannot stop suc node.
> >
> > If the node is started like this:
> > $ erl -name node-name@REDACTED -setcookie proxy -proto_dist inet_tcp
> >
> > erl_call is able to stop it.
> >
> > Is there a solution to this problem?
> >
> > Cheers,
> >
> > Bogdan
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20220329/47242aed/attachment.htm>


More information about the erlang-questions mailing list