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
,在UpFrom
和DownTo
.每一对扣减如下:
- 要删除的应用程序,即
Name.rel
但不是在Name2.rel
- 要添加的应用程序,即
Name2.rel
但不是在Name.rel
- 哪些应用程序将被升级/降级,即这两个应用程序中列出的应用程序
Name.rel
和Name2.rel
但是有不同的版本
- 如果需要在升级或降级后重新启动模拟器,即如果ERTS版本在
Name.rel
和Name2.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,并且函数返回ok
或error
。如果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
读取相关应用程序资源文件以确定要加载哪些模块以及是否以及如何启动应用程序。(钥匙modules
和mod
,请参阅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.app
中lib/myapp/ebin
,则此应用程序的路径为"$TEST/myapp-1/ebin"
。如果myapp.app
找到lib/test
,路径是$TEST/test/myapp-1/ebin
。
在生成引导脚本之前执行的检查可以通过指定选项,使用一些交叉引用检查来扩展。exref
这些检查是使用Xref工具执行的。所有应用程序,或{exref,[App]}
,则由Xref检查,并对未定义函数的调用发出警告。
默认情况下,错误和警告将打印到tty,并且函数返回ok
或error
。如果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
读取相关的应用程序资源文件以确定每个应用程序的版本和模块(密钥vsn
和modules
请参阅app(4)
)。
默认情况下,发布包文件位于与Name.rel
即,在当前工作目录中,除非Name
包含路径。中频选项{outdir,Dir}
中的Dir
相反。
如果SASL没有作为应用程序包含在.rel
文件中,则会发出警告,因为这种版本不能用于升级。要关闭此警告,请添加选项no_warn_sasl
。
默认情况下,发行包中包含目录lib/App-Vsn/ebin
和lib/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
一个子目录RelVsn
。RelVsn
是中指定的发行版本Name.rel
。
releases/RelVsn
包含Name.boot
重命名为的引导脚本start.boot
,如果找到,则包含文件relup
和sys.config
。这些文件Name.rel
在与当前工作目录相同的目录中以及使用选项指定的任何目录中进行搜索path
。
如果发行包要包含新的Erlang运行时系统,bin
则指定的运行时系统的目录将{erts,Dir}
被复制到erts-ErtsVsn/bin
。
所有功能检查make_script
在创建发布包之前执行。备选方案src_tests
和exref
在这里也是有效的。
返回值以及错误和警告的处理与所描述的相同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)