Запуск файла Escript Erlang с распространением SSL
-
19-09-2019 - |
Вопрос
У меня есть небольшой файл сценария, который подключается к узлу и выполняет некоторые вызовы RPC и прочее...
Он отлично работает с короткими и длинными именами, но для распределенного Erlang использует стандартные http-соединения.
Я хотел бы использовать его, но с https/SSL для распространения.
Чтобы запустить «нормальную» систему Erlang с SSL, вам необходимо передать различные флаги, чтобы Erlang работал таким образом, поскольку документация предлагает:
$ 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
Это заменяет механизм распределения по умолчанию (inet_tcp_dist
) с SSL (inet_ssl_dist
).
сценарий запускает файл erlang как файл сценария оболочки.
Мои вопросы:
- Можно ли получить «среду» Erlang, в которой запускается скрипт, для использования механизма безопасного распространения вместо механизма по умолчанию?
- и если да, то как мне это сделать?
Решение
Вам не обязательно устанавливать эти флаги через среду, вы также можете передать их непосредственно erl
, видеть гл.1.4 здесь. erl
флаги могут быть переданы сценарий через %%!
строка аргументов.
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"]}]