systools

systools

模块

收缩素

模块摘要

一组发布处理工具

描述

此模块包含用于生成启动脚本(.boot.script),发行版升级文件(relup)和发行包的功能。

出口

make_relup(Name, UpFrom, DownTo) -> Resultmake_relup(Name, UpFrom, DownTo, [Opt]) -> Result

类型

生成发布升级文件。relup包含从一个或多个以前版本升级或降级到一个或多个版本的说明。这些指令是由release_handler在运行时安装发行版的新版本时。

默认情况下,relup文件位于当前工作目录中。中频选项{outdir,Dir}指定,则relup文件位于Dir相反。

发布资源文件Name.rel与所有发布资源文件进行比较。Name2.rel,在UpFromDownTo.每一对扣减如下:

  • 要删除的应用程序,即Name.rel但不是在Name2.rel

  • 要添加的应用程序,即Name2.rel但不是在Name.rel

  • 哪些应用程序将被升级/降级,即这两个应用程序中列出的应用程序Name.relName2.rel但是有不同的版本

  • 如果需要在升级或降级后重新启动模拟器,即如果ERTS版本在Name.relName2.rel

有关此操作的说明将添加到relup按上述顺序归档。在应用程序版本之间升级或降级的说明是从相关的应用程序升级文件中获取的。App.appup,按与生成引导脚本相同的顺序排序,请参见make_script/1,2将高级指令转换为低级指令,并将结果打印到relup档案。

任选Descr参数中包含“如实”。relup文件,见relup(4)默认为空列表。

在代码路径中搜索所有文件。假设.app.appup应用程序的文件位于同一个目录中。

如果{path,[Dir]}指定了选项,则将此路径附加到当前路径。*例如,通配符扩展到所有匹配的目录lib/*/ebin

中频选项restart_emulator指定后,将重新启动模拟器的低级指令追加到relup档案。这将确保在系统升级或降级时完成系统的完全重新启动。

如果升级包括从OTP R15之前的仿真器更改为OTP R15或更高版本,pre_R15_emulator_upgrade则会发出警告。有关更多信息,请参阅Design Principles系统文档

默认情况下,错误和警告将打印到tty,并且函数返回okerror。如果silent指定了选项,则函数会返回{ok,Relup,Module,Warnings},其中Relup是发行版升级文件,或者{error,Module,Error}。警告和错误可以通过调用Module:format_warning(Warnings)或转换为字符串Module:format_error(Error)

中频选项noexec指定时,该函数返回的值与silent但不是relup文件被创建。

中频选项warnings_as_errors则警告将视为错误。

make_script(Name) -> Resultmake_script(Name, [Opt]) -> Result

类型

生成引导脚本Name.script及其二进制版本,引导文件Name.boot。引导文件指定要加载的代码以及Erlang运行时系统启动时要启动的应用程序。看script(4)

Name.rel读取版本资源文件以确定版本中包含哪些应用程序。然后App.app读取相关应用程序资源文件以确定要加载哪些模块以及是否以及如何启动应用程序。(钥匙modulesmod,请参阅app(4)

默认情况下,引导脚本和引导文件位于与Name.rel即,在当前工作目录中,除非Name包含路径。中频选项{outdir,Dir}中的Dir相反。

每个应用程序的正确性检查如下:

  • 中指定的应用程序的版本。.rel文件与.app档案。

  • 应该没有未定义的应用程序,即对未包含在发行版中的应用程序的依赖性。(重点applications.app的文件)。

  • 应用程序之间不存在循环依赖关系。

  • 不存在重复模块,即同名但属于不同应用程序的模块。

  • 中频选项src_tests如果模块的源代码丢失或比对象代码更新,则会发出警告。

应用程序根据应用程序之间的依赖关系进行排序。在不存在依赖项的情况下,.rel档案是保存的。

如果强制应用程序Kernel和STDLIB不包含在.rel文件中并且具有启动类型permanent(这是默认值),则该函数将失败。

如果SASL没有作为应用程序包含在.rel文件中,则会发出警告,因为这种版本不能用于升级。要关闭此警告,请添加选项no_warn_sasl

在当前路径中搜索所有文件。假设.app.beam应用程序的文件位于同一个目录中。大.erl文件也被假定位于此目录中,除非它是ebin目录,在这种情况下,它们可以位于相应的src目录。

如果{path,[Dir]}指定了选项,则将此路径附加到当前路径。路径中的一个目录可以用通配符指定*,这会扩展到所有匹配的目录。例如:"lib/*/ebin"

在生成的引导脚本中,所有应用程序目录的结构为App-Vsn/ebin.它们被假定位于$ROOT/lib,在哪里$ROOT已安装版本的根目录。中频选项local指定时,将使用找到应用程序的实际目录。这是在本地测试生成的引导脚本的一种有用方法。

选项variables可用于指定除$ROOT/lib某些应用程序之外的安装目录。如果{VarName,Prefix}指定了变量并在目录中找到Prefix/Rest/App[-Vsn]/ebin应用程序,则此应用程序将VarName/Rest/App-Vsn/ebin在引导脚本中获取路径。如果在目录中找到应用程序Prefix/Rest,则路径为VarName/Rest/App-Vsn/ebin。启动Erlang时,所有变量VarName都使用命令行标志给定值boot_var

示例:如果{variables,[{"TEST","lib"}]}指定了选项,并且位于引导脚本myapp.applib/myapp/ebin,则此应用程序的路径为"$TEST/myapp-1/ebin"。如果myapp.app找到lib/test,路径是$TEST/test/myapp-1/ebin

在生成引导脚本之前执行的检查可以通过指定选项,使用一些交叉引用检查来扩展。exref这些检查是使用Xref工具执行的。所有应用程序,或{exref,[App]},则由Xref检查,并对未定义函数的调用发出警告。

默认情况下,错误和警告将打印到tty,并且函数返回okerror。如果silent指定了选项,则函数返回{ok,Module,Warnings}{error,Module,Error}。警告和错误可以通过调用Module:format_warning(Warnings)或转换为字符串Module:format_error(Error)

中频选项warnings_as_errors则警告将视为错误。

中频选项no_dot_erlang,则为加载.erlang引导期间的文件是包括在内。

make_tar(Name) -> Resultmake_tar(Name, [Opt]) -> Result

类型

创建发布包文件Name.tar.gz必须在目标系统上解压缩和解压缩此文件。release_handler才能安装新版本。

Name.rel读取版本资源文件以确定版本中包含哪些应用程序。然后App.app读取相关的应用程序资源文件以确定每个应用程序的版本和模块(密钥vsnmodules请参阅app(4))。

默认情况下,发布包文件位于与Name.rel即,在当前工作目录中,除非Name包含路径。中频选项{outdir,Dir}中的Dir相反。

如果SASL没有作为应用程序包含在.rel文件中,则会发出警告,因为这种版本不能用于升级。要关闭此警告,请添加选项no_warn_sasl

默认情况下,发行包中包含目录lib/App-Vsn/ebinlib/App-Vsn/priv每个包含的应用程序。如果要包含更多目录,dirs则指定选项,例如{dirs,[src,examples]}

所有这些文件都在当前路径中搜索。如果{path,[Dir]}指定了选项,则将此路径附加到当前路径。通配符*扩展到所有匹配的目录。例如:"lib/*/ebin"

选项variables可用于指定除lib某些应用程序之外的安装目录。如果{VarName,Prefix}指定了变量并且在目录中找到了应用程序Prefix/Rest/App[-Vsn]/ebin,则该应用程序将被打包到一个单独的VarName.tar.gz文件中Rest/App-Vsn/ebin

例子:中频选项{variables,[{"TEST","lib"}]}被指定,并且myapp.app位于lib/myapp-1/ebin、应用myapp包括在TEST.tar.gz*

% tar tf TEST.tar myapp-1/ebin/myapp.app ...

期权{var_tar,VarTar}可用于指定是否存储单独的包以及存储在何处。在这个选项中VarTar为下列之一:

include

ReleaseName.tar.gz文件中包含每个单独的(可变)包。这是默认设置。

ownfile

每个单独的(可变)程序包都作为与该ReleaseName.tar.gz文件相同的目录中的单独文件生成。

omit

没有单独的(可变)包生成。在变量目录下找到的应用程序将被忽略。

releases发行包中还包含一个目录,其中包含Name.rel一个子目录RelVsnRelVsn是中指定的发行版本Name.rel

releases/RelVsn包含Name.boot重命名为的引导脚本start.boot,如果找到,则包含文件relupsys.config。这些文件Name.rel在与当前工作目录相同的目录中以及使用选项指定的任何目录中进行搜索path

如果发行包要包含新的Erlang运行时系统,bin则指定的运行时系统的目录将{erts,Dir}被复制到erts-ErtsVsn/bin

所有功能检查make_script在创建发布包之前执行。备选方案src_testsexref在这里也是有效的。

返回值以及错误和警告的处理与所描述的相同make_script

script2boot(File) -> ok | error

类型

Erlang运行时系统要求用于引导系统的脚本的内容为二进制Erlang术语。此函数转换File.script引导脚本到二进制术语,该二进制项存储在File.boot档案。

使用make_script已经转换为二进制形式。

另见

app(4), appup(4), erl(1), rel(4), release_handler(3), relup(4), script(4)