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
分享到:
相关推荐
RPM(Red Hat Package Manager)包是Linux发行版,如CentOS、Fedora等,用于安装、升级和管理软件的一种打包格式。本话题将详细介绍RabbitMQ 3.6.12的RPM包及其相关组件。 首先,让我们关注一下提供的两个RPM包: ...
1. **Mix**:Elixir的构建工具,类似于Ruby的Gemfile或Node.js的package.json。Mix负责管理项目依赖,编译源代码,并生成可执行文件。 2. **Release Management**:在Elixir中,发布管理是通过Mix任务实现的,它...
在Elixir社区中,exrm(现在被称为distillery)是一个广泛使用的工具,用于构建、发布和部署Elixir应用程序。exrm_deb是exrm的一个扩展,它添加了对创建 Debian 包的支持,使得在基于Debian的Linux系统(如Ubuntu、...
小姐姐炫酷唯美引导页.zip
scratch少儿编程逻辑思维游戏源码-让它们跳起来.zip
少儿编程scratch项目源代码文件案例素材-战斗塔防.zip
前端开发_Vue全家桶_vw适配_vux组件库_mescroll滚动_fastclick优化_mock模拟_less预处理器_移动端脚手架_基于Vue2和Webpack3构建的移动
数据可视化分析_微信小程序开发_JavaScript_Canvas图表渲染_数据助手工具_仿微信小程序数据助手_支持线性图圆环图柱状图条形图_动态效果适配_商业数据分析_移动端数据
少儿编程scratch项目源代码文件案例素材-章鱼怪.zip
音乐流媒体_API开发_网易云音乐接口封装与数据抓取_提供完整的网易云音乐API调用解决方案_包含歌曲搜索_MP3资源获取_歌词解析_播放列表管理_歌手专辑查询_专辑详情展示_MV
物联网与健康监测_基于RISC-V架构ESP32-C3芯片与MAX30102MAX30205传感器_LVGL图形界面与WiFiBLE双模通信的智能手表系统_实时监测心率血氧体温
wangtengfei-hn_EmployeesExample_23540_1745868671962
Android开发_自定义View绘制动画效果_模仿小米手环App首页计步数据展示_实现可自定义目标步数当前步数颜色字体大小圆点尺寸的动态步数统计图表组件_用于健康运动类App展示
少儿编程scratch项目源代码文件案例素材-钻机机器人.zip
scratch少儿编程逻辑思维游戏源码-狂暴坦克.zip
scratch少儿编程逻辑思维游戏源码-拳击.zip
scratch少儿编程逻辑思维游戏源码-魔方冲刺.zip
少儿编程scratch项目源代码文件案例素材-重返危机.zip
杰奇CMS小说网站系统_php53-73_mysql5-MariaDB10_utf8mb4编码_GBK自动转码_INNODB存储引擎_多模块支持_前后台分离_电脑手机双版适配_
linyuan620_StockAnalysisAssistant_17128_1745866117970