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
分享到:
相关推荐
otp_win64_24.1.7.exe
Erlang是一种通用的面向并发的编程语言,它有瑞典电信设备制造商爱立信所辖的CS-Lab开发, 目的是创造一种可以应对大规模并发活动的编程语言和运行环境。
erlang_otp_win64_25.0
是适用于多线程、分布式开发的语言,也是如rabbitmq等重要工具的必须品 使用前需要配置环境变量:1.变量名为ERLANG_HOME,变量值为安装Erlang的路径(路径中不要包含bin目录) 2.将新建的系统变量添加在Path中:格式...
erlang_23.0.2-1版本 centos7 64bit esl-erlang_23.0.2-1_centos_7_amd64.rpm
confetti, Erlang配置提供程序/应用程序 纸屑五彩纸屑是你的Erlang应用程序的配置提供程序。基本上是 application:get_env/2 在类固醇上。特性管理控制台可以通过telnet维护部门访问将为你 love在运行时重新加载( ...
erlang提供了binary_to_term 函数,用于把二进制数据转为原始的erlang数据。这个函数都是c实现的,这里用erlang语言实现了,很有参考价值,其他语言可以参考这个解析erlang二进制协议数据。配套文章地址...
实现了Erlang B/C功能,支持大容量计算
这是通信专业常用的无线通信容量查表,爱尔兰b表,希望能给有需要的同学用用
erlang-24.3.4.4__RAM包
esl-erlang_23.0和rabbitmq-3.8.4windows版本 直接下载安装就行,可以直接下载就可安装,非常的方便 ,欢迎大家下载 注意事项: 1. Erlang版本和RabbitMQ版本要配套 (Erlang23.0, RabbitMQ3.8.4) 2. amd芯片请乖乖...
使用erlang:system_info(dirty_cpu_schedulers_online)进行检查。 如果未启用它们,它将返回badarg。 您可以使用以下方法检查您的呼叫是否正在肮脏的调度程序上处理:if(enif_is_on_dirty_scheduler(hp)){/...
实现爱尔兰B公式和爱尔兰C公式,功能齐全,适用于通信网课程中的实验。
erlang_otp_win64_20.2 分享! 官网实在太慢.... 存着也方便自己用
此版本为window64位下的,erlang23版本,erlang-otp_win64_23.0,官网原包,官网太难找了,好不容易找到,和大家分享下,需要的可以下载,也作为自己的一个记录吧,自己亲测很好用,erlang环境需要与对应的rabbitmq...
esl-erlang_19.3_osx_10.10_amd64.dmg
rabbitmq-server-3.8.2.exe ErLang_otp_win64_22.2.exe window系统RabbitMQ安装
erlang_ls 一个实现微软语言服务器协议 3.15 的 Erlang 服务器。最低要求 快速开始编译项目: make要在/usr/local/bin安装生成的erlang_ls escript: make install命令行参数这些是可以提供给erlang_ls脚本的命令行...
这个erlang23.0版本,根据rabbitMQ官网的介绍,可以和下面这几个版本的rabbitMQ配合使用: 3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 其他版本的rabbit,请移步其他资源下载
esl-erlang_16.b.3-2~centos~6_amd64.rpm