减少螺纹钢生成的升级包的尺寸

时间:2011-09-14 16:43:23

标签: erlang upgrade rebar

我目前正在学习如何使用rebar制作erlang版本并发布升级版本。感谢this tutorial我已经能够成功生成版本和升级,但在此过程中出现了一个问题。

在我正在进行的项目中,重要的是发布升级尽可能小,因为它们是通过不可靠且缓慢的连接下载到嵌入式设备(例如beagleboard)

不幸的是,rebar生成的tar.gz档案总是包含一个包含所有应用程序的完整版本。我想知道是否有一种方法可以进行工作版本升级,只包含新的应用程序和更新的应用程序以减少存档大小。也许有可能配置reltool来做到这一点?

感谢您的帮助。

1 个答案:

答案 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等)。