Exécution d'un fichier Erlang Escript avec distribution SSL
-
19-09-2019 - |
Question
J'ai un petit fichier Escript qui se connecte à un nœud et fait quelques appels et des trucs ... rpc
Il fonctionne très bien pour un court ou mais repose sur noms longs comms standard http pour Erlang.
Je voudrais l'utiliser mais avec https / SSL pour la distribution.
Pour démarrer un système Erlang « normal » avec SSL, vous devez passer dans les différents drapeaux pour dire Erlang à courir de cette façon, comme documentation suggère:
$ 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
Il remplace le mécanisme de distribution par défaut (inet_tcp_dist
) avec une ssl (de inet_ssl_dist
).
Escript exécute un fichier Erlang en tant que fichier de script shell.
Mes questions sont les suivantes:
- est-il possible d'obtenir le « environnement » dans lequel Erlang Escript va utiliser le mécanisme de distribution sécurisée au lieu de celui par défaut?
- et si oui, comment pourrais-je le faire?
La solution
Vous ne devez pas définir ces drapeaux par l'environnement, vous pouvez aussi les transmettre directement à erl
, voir ch. 1.4 . drapeaux erl
peuvent être passés à Escript via la ligne argument %%!
.
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"]}]