`
cryolite
  • 浏览: 580470 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Erlang应用打包工具:node_package

阅读更多
node_package是一个制作erlang应用安装包的脚本/模版集合。支持的平台包括deb(ubuntu), MacOSX, FreeBSD。

这里记录我使用过程中遇到的一些问题,备忘。

一、前提

rebar.config中添加对node_package的依赖。

使用前保证rebar generate能正确打包。
另外,generate出来的应用目录下要有个data目录,可以在reltool.config目录里配置:
{overlay, [
    {mkdir, "log"},
    {mkdir, "data/《应用名》"},
.......


二、起步
要想写自己的配置文件,可以拷贝stanchion应用,也可以参考riak,但是后者要复杂许多。

例如直接抄stanchion的Makefile有可能不会工作,出错的地方是这句:
git --git-dir=$${dep}/.git describe --tags >$${dep}/priv/vsn.git;

原因是有些依赖的应用的git describe得不到正常值,参考riak将这句改成:
printf "`git --git-dir=$${dep}/.git describe --long --tags 2>/dev/null || git --git-dir=$${dep}/.git rev-parse HEAD`" > $${dep}/priv/vsn.git;
即可

三、陷阱
这个工具与版本控制git关系很密切。与之相关有两个陷阱要小心:

1. 修改了某些配置参数(如package名字: package_name)后一定要提交到版本控制库里才会生效。

2. 有些工程是根据git describe的结果计算某些变量的,而git describe要得到有意义的结果需要有tag,所以还得给app打上tag。如:
git tag -m "bala 1.0.0" 1.0.0

3. 写配置的时候可能需要不断的实验,这里又有陷阱,这个陷阱又和git的tag有关:

git commit --amend
或者git commit
后,要重新设置tag,因为tag不会自动更新到最新的修改提交。因此tag也需要手工更新到最新的提交。操作过程是删除旧tag,在当前提交(HEAD)上建一个新tag。

一般提交后可以这样:删除tag:
git tag -d 1.0.0

然后,重新打上tag:
git tag -m "bala 1.0.0" 1.0.0

然后用make package测试一下修改是否正确。如果一切顺利,制造好的应用deb安装包放在package/package目录下,另附送一个SHA摘要认证。

四、配置

配置参数在pkg.vars.config中。这个没什么好说的,抄过来简单改一下就能用了。

比较麻烦的是还需要rel/vars.config中,后者其实是控制reltool工具进行generate的,但是由于用到了node_package/priva/base/runner脚本模板生成应用控制脚本(例如riak脚本),所以需要rel/vars.config控制某些环境参数。

在rel/reltool.config配置文件中,添加如下
{overlay_vars, "vars.config"}.
{overlay, [
...
           {copy, "../deps/node_package/priv/base/erl", "\{\{erts_vsn\}\}/bin/erl"},

           {template, "../deps/node_package/priv/base/runner", "bin/gfdatabus"},
           {template, "../deps/node_package/priv/base/env.sh", "lib/env.sh"}




五、其它

1. 包名
以上都是在ubuntu下测试的,最后一个陷阱是与dch有关,dch这个奇芭要求package的名字中不能有下划线,不然出错:
dch warning: illegal package name used with --package

所以你的应用名中也不要有下划线。


2. 其它疑难

如果打完deb成功,安装也成功,运行应用(假设应用叫xxx)的时候出现如下错误:
$ sudo xxx console
Crash dump was written to: erl_crash.dump
init terminating in do_boot ()
Error reading /etc/xxx/app.config

这个不是你的配置文件app.config的错误。这其实是reltool.config的配置出错:
{app, stdlib, [{mod_cond, derived}, {incl_cond, include}]},

正确的配置是:
{app, stdlib, [{incl_cond, include}]},

一般配置中不要有stdlib,kernel


参考
http://www.erlang-factory.com/upload/presentations/857/JaredEUC-2013.pdf
分享到:
评论

相关推荐

    Erlang安装包,版本:otp_win64_24.1.7.exe

    otp_win64_24.1.7.exe

    分布式应用Erlang:Erlang_OTP_19_win64

    Erlang OTP 19_win64是一款专为Windows 64位系统设计的Erlang软件开发工具包,它包含Erlang编程语言和OTP(Open Telecom Platform)框架。Erlang是一种强大的、动态类型的函数式编程语言,特别适合构建高可用性、...

    erlang_otp_win64_25.0

    总的来说,Erlang OTP 25.0 for Windows 64位是一个强大的开发工具,对于那些需要构建高可用、高性能、分布式应用程序的开发者来说,是一个理想的选择。通过下载并安装提供的"otp_win64_25.0.exe",用户可以开始探索...

    erlang_otp_win64_20.3.zip

    是适用于多线程、分布式开发的语言,也是如rabbitmq等重要工具的必须品 使用前需要配置环境变量:1.变量名为ERLANG_HOME,变量值为安装Erlang的路径(路径中不要包含bin目录) 2.将新建的系统变量添加在Path中:格式...

    erlang_environment_win64_21.0.1.zip

    erlang_environment_win64_21.0.1 文件可能包含了Erlang SDK(软件开发工具包)的一部分,这通常包括头文件、库文件以及用于编译和调试Erlang应用程序的工具。这些工具可能包括rebar或rebar3这样的构建系统,它们...

    Erlang_B_model.rar_Erlang B _Erlang B model_Wireless Handbook_e

    **无线通信手册**通常会包含Erlang B模型的详细解释和应用实例,帮助工程师理解和计算通信网络的性能。在这个压缩包中,我们有一个名为"Erlang_B_model.pdf"的文件,它很可能是这样的手册的一部分,提供了关于Erlang...

    esl-erlang_23.0.2-1_centos_7_amd64.rpm

    erlang_23.0.2-1版本 centos7 64bit esl-erlang_23.0.2-1_centos_7_amd64.rpm

    最新版 erlang安装包 otp_src_21.3.tar.gz

    Erlang是一种强大的编程语言,尤其在分布式计算、并发处理和实时系统中有着广泛的应用。OTP(Open Telecom Platform)是Erlang的核心组件,提供了一系列的库和设计原则,用于构建可靠、可扩展的系统。在Linux CentOS...

    erlang-otp_win64_23.0.zip

    此版本为window64位下的,erlang23版本,erlang-otp_win64_23.0,官网原包,官网太难找了,好不容易找到,和大家分享下,需要的可以下载,也作为自己的一个记录吧,自己亲测很好用,erlang环境需要与对应的rabbitmq...

    Erlang-otp_win64_23.0.zip

    Erlang OTP是Erlang编程语言的核心组成部分,它提供了分布式计算、并发处理、热代码升级和容错恢复等一系列强大的功能。在安装RabbitMQ,一个广泛使用的开源消息代理和队列服务器之前,通常需要先安装Erlang环境。...

    Erlang-Formula.zip_Erlang B _Erlang-B_erlang_erlang B计算_erlang C

    Erlang B 和 Erlang C 是在电信领域中广泛使用的两个数学公式,用于预测和管理电话交换系统的呼叫处理能力。这两个公式由丹麦工程师 Agner Krarup Erlang 在20世纪初开发,对于理解通信系统中的呼叫占用率、阻塞率和...

    erl:otp_src_24.0.5.tar.gz

    Erlang/OTP的"OTP"部分代表Open Telecom Platform,这是一个包含Erlang虚拟机(BEAM)、标准库和开发框架的集合,旨在简化开发高效、可靠和可扩展的应用程序。在24.0.5版本中,可能会包含新的特性和改进,比如性能...

    confetti, Erlang配置提供程序/应用程序.zip

    confetti, Erlang配置提供程序/应用程序 纸屑五彩纸屑是你的Erlang应用程序的配置提供程序。基本上是 application:get_env/2 在类固醇上。特性管理控制台可以通过telnet维护部门访问将为你 love在运行时重新加载( ...

    Erlang 环境 opt_win64_21.1版本

    otp_win64_21.1.exe是OTP在Windows 64位系统的特定版本,包含了运行Erlang应用程序所需的全部组件,如Erlang虚拟机、标准库和工具集。 RabbitMQ是一款广泛使用的开源消息代理和队列服务器,它基于AMQP(Advanced ...

    erlang_otp_win64_22.1.zip

    2. **分布式**:Erlang OTP系统天生支持节点间的分布式计算,可以在多台机器上无缝地部署和运行应用程序。 3. **容错性**:通过故障检测和自动恢复机制,Erlang OTP允许系统在部分组件故障时继续运行,增强了系统的...

    esl-erlang_19.3_osx_10.10_amd64.dmg

    Erlang是一种动态类型的函数式编程语言,以其并发、分布式和实时系统处理能力而闻名,尤其在电信、金融以及互联网应用等领域广泛应用。 描述中的信息同样强调了这是Erlang 19.3版本的macOS 10.10版本,AMD64架构的...

    erlang语言实现binary_to_term完整代码

    erlang提供了binary_to_term 函数,用于把二进制数据转为原始的erlang数据。这个函数都是c实现的,这里用erlang语言实现了,很有参考价值,其他语言可以参考这个解析erlang二进制协议数据。配套文章地址...

    erlang_otp_src_22.3.tar.gz

    总的来说,Erlang OTP 22.3 是一个强大的开发工具,特别适合构建分布式系统和实时应用程序。其源代码的可用性让开发者有机会深入理解其工作原理,并根据需要自定义和扩展 OTP 的功能。通过学习和掌握 Erlang 语言...

    Erlang-opt_win64_23.0.zip

    Erlang是一种高级编程语言,主要用于构建分布式、并发和实时的系统。它的设计目标是提供高可用性、容错性和可扩展性。Erlang OTP(开放电信平台)是一个全面的开发框架,包括虚拟机、库和设计模式,用于构建大规模、...

    erlang_otp_win64_20.2

    10. **编译器和工具链**:Erlang OTP 20.2可能包含了改进的编译器和其他开发工具,如rebar3(一个流行的Erlang构建工具)。 在下载并解压"otp_win64_20.2.exe"后,你可以安装Erlang OTP的这个版本,从而在Windows ...

Global site tag (gtag.js) - Google Analytics