L'esecuzione di un file di Erlang Escript con distribuzione SSL
-
19-09-2019 - |
Domanda
Ho un piccolo file di EScript che si connette a un nodo e fa alcune chiamate RPC e roba ...
Funziona bene per brevi o longnames, ma si basa su comunicazioni HTTP standard per la distribuzione Erlang.
Vorrei usarlo, ma con https / SSL per la distribuzione.
Per avviare un sistema di Erlang 'normale' con SSL devi passare nelle diverse bandiere per dire Erlang a correre in quel modo, come il documentazione suggerisce:
$ ERL_FLAGS="-boot \"/home/me/ssl/start_ssl\" -proto_dist inet_ssl
-ssl_dist_opt client_certfile \"/home/me/ssl/erlclient.pem\"
-ssl_dist_opt server_certfile \"/home/me/ssl/erlserver.pem\"
-ssl_dist_opt verify 1 -ssl_dist_opt depth 1"
$ export ERL_FLAGS
$ erl -sname ssl_test
Questo sostituisce il meccanismo di distribuzione di default (inet_tcp_dist
) con SSL uno (inet_ssl_dist
).
EScript gestisce un file Erlang come un file di script di shell.
Le mie domande sono:
- è possibile ottenere l'Erlang 'ambiente' in cui EScript corre ad utilizzare il meccanismo di distribuzione sicura al posto di quello di default?
- e se sì, come dovrei farlo?
Soluzione
Non è necessario impostare questi flag attraverso l'ambiente, è anche possibile passare direttamente a erl
, vedere ch. 1.4 qui . bandiere erl
possono essere passati a tramite la linea di argomentazione %%!
.
z.escript
#!/usr/bin/env escript
%%! -boot start_ssl -proto_dist inet_ssl -ssl_dist_opt client_certfile /home/me/ssl/erlclient.pem -ssl_dist_opt server_certfile /home/me/ssl/erlserver.pem -ssl_dist_opt verify 1 -ssl_dist_opt depth 1
main(_) ->
io:format("~p~n", [init:get_arguments()]).
zed@zed:~$ ./z.escript
[{root,["/opt/erlang-R13B03/lib/erlang"]},
{progname,["erl"]},
{home,["/home/zed"]},
{boot,["start_clean"]},
{noshell,[]},
{boot,["start_ssl"]},
{proto_dist,["inet_ssl"]},
{ssl_dist_opt,["client_certfile","/home/me/ssl/erlclient.pem"]},
{ssl_dist_opt,["server_certfile","/home/me/ssl/erlserver.pem"]},
{ssl_dist_opt,["verify","1"]},
{ssl_dist_opt,["depth","1"]}]