`
arksea
  • 浏览: 61868 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

reltool使用入门

阅读更多
一、用实例感受一下reltool的功能
先来看看典型的目录结构
/home/arksea
       |--client
            |--ebin
            |--include
            |--nbproject
            |--priv
            |--src
            |--test


用reltool生成目标系统的过程为
1、写配置文件client.config
2、启动erl,如果提示需要以smp方式启动要加上参数erl -smp
3、生成目标系统
Eshell V5.7.3  (abort with ^G)
1> {ok,Server}=reltool:start_server([{config,"client.config"}]).
{ok,<0.32.0>}
2> reltool:create_target(Server, "target").
ok
3>


就这么简单,我们看看生成的目标系统的目录结构
target
  |--bin
  |--erts-5.7.3
  |--release
  |     |--0.1
  |     |   |--client.boot
  |     |   |--client.rel
  |     |   |--client.script
  |     |--start_erl.data
  |--lib
      |--client-0.1
      |     |--priv
      |--client-0.1.ez
      |--erts-5.7.3.ez
      |--kernel-2.13.3.ez
     ....
 

      
对,没错,所有的lib下的beam文件都被打包到一个.ez压缩包中了,这对于嵌入到客户端的系统来说是个好特性,啥时候再支持一下包认证就更棒了。

二、部署描述文件实例
看完了reltool的效果,现在来看看重点,也就是部署描述文件client.config的结构

下面是这个例子的部署描述文件,因为是嵌入到客户端程序中所以要尽量小,剔除了比较多的东西,服务端系统通常无需使用如此复杂的包含规则。最终的target目录里只剩12M的东东,还算可以接受,当然如果你愿意应该还是有不少东西是可以剔除的。
{sys,[{lib_dirs,["/home/arksea"]},
      {boot_rel,"client"},
      {rel,"client","0.1",[kernel,stdlib,sasl,client]},
      {debug_info, keep},
      {incl_sys_filters,["^bin/","^erts-.*?/","^release"]},
      {excl_sys_filters,["/doc","/usr","/man","/src","/include","/lib",
                         "/dialyzer.exe$","/escript.exe$","/werl.exe$",
                         "/beam.debug.dll$","/beam.debug.smp.dll$",
                         "\.pdb$"]},
      {incl_app_filters,["^ebin/"]},
      {excl_archive_filters,[]},
      {app,kernel,[{incl_cond,include}]},
      {app,stdlib,[{incl_cond,include}]},
      {app,sasl,[{incl_cond,include}]},
      {app,client,[{incl_cond,include},
                   {incl_app_filters,["^ebin/","^priv/"]},
                   {excl_archive_filters,["^priv$"]}]}
     ]
}.

erlang的文档中有关于reltool部署描述的详细解释,说得很清楚了。需要说明的是别看reltool文档中列出了一坨的参数,不要害怕,基本上只要使用默认值就行了,比如以上的部署描述文件只要这样写就能正常工作了:
{sys,[{lib_dirs,["/home/arksea"]},
      {boot_rel,"client"},
      {rel,"client","0.1",[kernel,stdlib,sasl,client]},
      {debug_info, keep},
      {app,kernel,[{incl_cond,include}]},
      {app,stdlib,[{incl_cond,include}]},
      {app,sasl,[{incl_cond,include}]},
      {app,client,[{incl_cond,include}]}
     ]
}.

是不是简单了许多?只是打出来的包要大不少。

三、部署描述文件的编写

下面对一些常用的参数进行解释
1、首先是 lib_dirs,文档中说是系统依赖库的位置,实际上你也应该把项目路径的父目录填在这里,这点很重要,否则就搜索不到你的系统咯。比如这里,项目client所在的父目录是/home/arksea,可以填写相对路径比如../server
2、文件包含规则有一系列的参数,这些参数都支持正则表达式
incl_sys_filters
excl_sys_filters
incl_app_filters
excl_app_filters
incl_archive_filters
excl_archive_filters

这里说说所谓“sys”、“app”、“archive”的概念
  • sys是指erlang安装目录下的文件(除了lib目录),如果你配置了root_dir则为你指定的目录;
  • app是指lib_dirs参数指定目录下的文件,以及root_dir/lib下的文件
  • archive则指出了app中哪些文件将被打包到.ez中


强调一点,这里的文件名都是相对路径哟,写正则表达式的时候要注意
  • sys的起始位置是root_dir
  • app的起始位置是root_dir/lib/appname和lib_dirs/appname
举个例子
root_dir/lib/mnesia-4.4.11/doc将被表示为
    doc
root_dir/lib/mnesia-4.4.11/examples/bench将被表示为
    examples/bench
所以要剔除这些文件应该这样写正则表达式:
{excl_app_filters, ["^doc","^examples/bench"]}


3、rel参数用于生成rel、script、boot文件,请参考systool文档。rel参数非常的简单,只要为系统起一个名字与版本号,然后列出本系统所直接依赖的app,连版本号都不要写,reltool会自动根据root_dir与lib_dirs中的erlang与各app版本生成rel文件

4、每个app可以有自己的filter参数,如果你写了它将覆盖sys层的filter参数。需要注意的一点是,app的名字必须与其文件夹的名字相同,比如这里的app名是client,则其文件夹应为lib_dirs/client












.
分享到:
评论
2 楼 arksea 2009-11-21  
就像你说的记录是最好的记忆,在整理资料的同时不仅记住了,还能把思路梳理清楚
1 楼 mryufeng 2009-11-20  
星爷也开始分享了 赞下。。。

相关推荐

    工业机器人reLTOOL坐标方向-【ABB】ABB机器人旋转姿态的左乘与右乘.pdf

    ⼯业机器⼈reLTOOL坐标⽅向_【ABB】ABB机器⼈旋转姿态 的左乘与右乘 1.现场ABB机器⼈若希望绕当前tcp坐标系旋转,可以使⽤reltool函数,例如 2. ptmp1:=reltool(phome1,0,0,0\x:=30,\z:=30)表⽰沿当前⼯具坐标系xyz...

    ABB机器人指令教程

    换键选择所用函数 Offs() 或 RelTool() 。 •Offs(p1,100,50,0) 代表一个距离 p1 点 X 轴偏差量为 100mm,Y 轴偏差量为 50mm,Z 轴偏差量为 0 的点。 •函数 Offs() 座标方向与机器人 World 座 标系一致。

    工业机器人reLTOOL坐标方向-工业机器人工具坐标系(TCF)标定的六点法原理.pdf

    ⼯业机器⼈reLTOOL坐标⽅向_⼯业机器⼈⼯具坐标系 (TCF)标定的六点法原理 ⼀、基本步骤 (1)在机器⼈动作范围内找⼀个⾮常精确的固定点作为参考点; (2)在⼯具上确定⼀个参考点(最好是⼯具中⼼点Tool Center Point,...

    压铸岛ABB程序指令翻译.docx

    MoveL RelTool(pExtract,0,200,0), v2500, fine, toGripper; (横行进入第一个点) MoveL RelTool(pExtract,0,100,0), v1000, fine, toGripper; (横行进入第二个点) MoveL pExtract, v600, fine, toGripper; ...

    ABB机器人常用指令.pdf

    ABB机器⼈常⽤指令 ABB机器⼈常⽤指令 1、机器⼈运动指令 2、例⾏程序内的逻辑控制 For(根据指定的次数,重复执⾏...8、功能函数 offs(对机器⼈位置进⾏偏移) RelTool(对⼯具的位置和姿态进⾏偏移) 升级版: 升级版:

Global site tag (gtag.js) - Google Analytics