我目前正在学习如何使用rebar制作erlang版本并发布升级版本。感谢this tutorial我已经能够成功生成版本和升级,但在此过程中出现了一个问题。
在我正在进行的项目中,重要的是发布升级尽可能小,因为它们是通过不可靠且缓慢的连接下载到嵌入式设备(例如beagleboard)
不幸的是,rebar生成的tar.gz档案总是包含一个包含所有应用程序的完整版本。我想知道是否有一种方法可以进行工作版本升级,只包含新的应用程序和更新的应用程序以减少存档大小。也许有可能配置reltool来做到这一点?
感谢您的帮助。
答案 0 :(得分:0)
我写了一个关于这个问题的小指南part of Learn You Some Erlang's releases chapter:
这是为了缩小规模而发布的一个发布文件:
{sys, [
{lib_dirs, ["/home/ferd/code/learn-you-some-erlang/release/"]},
{erts, [{mod_cond, derived},
{app_file, strip}]},
{rel, "erlcount", "1.0.0", [kernel, stdlib, ppool, erlcount]},
{boot_rel, "erlcount"},
{relocatable, true},
{profile, embedded},
{app_file, strip},
{debug_info, strip},
{incl_cond, exclude},
{excl_app_filters, ["_tests.beam$"]},
{app, stdlib, [{mod_cond, derived}, {incl_cond, include}]},
{app, kernel, [{incl_cond, include}]},
{app, ppool, [{vsn, "1.0.0"}, {incl_cond, include}]},
{app, erlcount, [{vsn, "1.0.0"}, {incl_cond, include}]}
]}.
这会剥离调试信息,使应用程序文件尽可能小,删除测试文件,排除尽可能多的应用程序等。请注意,如果您希望人们能够使用,您至少需要包含SASL并保留debug_info运行材料的实时代码升级。
总而言之,ERTS本身需要18.5MB。如果您使用上述规则,这将占据您的大部分空间,因此您必须检查是否可以从列表中删除一些可执行文件(非SMP Erlang等)。