25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

52 satır
2.0 KiB

  1. #!/usr/bin/env escript
  2. %%! -noshell -noinput
  3. %% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
  4. %% ex: ft=erlang ts=4 sw=4 et
  5. -define(TIMEOUT, 60000).
  6. -define(INFO(Fmt,Args), io:format(Fmt,Args)).
  7. %% TODO: This script currently does NOT support slim releases.
  8. %% Necessary steps to upgrade a slim release are as follows:
  9. %% 1. unpack relup archive manually
  10. %% 2. copy releases directory and necessary libraries
  11. %% 3. using release_hander:set_unpacked/2 .
  12. %% For more details, see https://github.com/rebar/rebar/pull/52
  13. %% and https://github.com/rebar/rebar/issues/202
  14. main([NodeName, Cookie, ReleasePackage]) ->
  15. TargetNode = start_distribution(NodeName, Cookie),
  16. {ok, Vsn} = rpc:call(TargetNode, release_handler, unpack_release,
  17. [ReleasePackage], ?TIMEOUT),
  18. ?INFO("Unpacked Release ~p~n", [Vsn]),
  19. {ok, OtherVsn, Desc} = rpc:call(TargetNode, release_handler,
  20. check_install_release, [Vsn], ?TIMEOUT),
  21. {ok, OtherVsn, Desc} = rpc:call(TargetNode, release_handler,
  22. install_release, [Vsn], ?TIMEOUT),
  23. ?INFO("Installed Release ~p~n", [Vsn]),
  24. ok = rpc:call(TargetNode, release_handler, make_permanent, [Vsn], ?TIMEOUT),
  25. ?INFO("Made Release ~p Permanent~n", [Vsn]);
  26. main(_) ->
  27. init:stop(1).
  28. start_distribution(NodeName, Cookie) ->
  29. MyNode = make_script_node(NodeName),
  30. {ok, _Pid} = net_kernel:start([MyNode, shortnames]),
  31. erlang:set_cookie(node(), list_to_atom(Cookie)),
  32. TargetNode = make_target_node(NodeName),
  33. case {net_kernel:hidden_connect_node(TargetNode),
  34. net_adm:ping(TargetNode)} of
  35. {true, pong} ->
  36. ok;
  37. {_, pang} ->
  38. io:format("Node ~p not responding to pings.\n", [TargetNode]),
  39. init:stop(1)
  40. end,
  41. TargetNode.
  42. make_target_node(Node) ->
  43. [_, Host] = string:tokens(atom_to_list(node()), "@"),
  44. list_to_atom(lists:concat([Node, "@", Host])).
  45. make_script_node(Node) ->
  46. list_to_atom(lists:concat([Node, "_upgrader_", os:getpid()])).