reltool
reltool
模块
reltool
模块摘要
RelTool应用程序的主要API
描述
这是RelTool应用程序的接口模块。
Reltool
是一个发布管理工具。它分析给定的Erlang / OTP安装并确定应用程序之间的各种依赖关系。该graphical
前端描绘的依赖,使目标系统的交互定制。后端提供了batch
用于生成定制目标系统的界面。
该工具使用安装的Erlang / OTP系统作为输入。root_dir
是分析系统的根目录,它默认为执行Reltool的系统。应用程序也可能位于外部root_dir
。lib_dirs
定义其他应用程序可能驻留的库目录,并且它默认为操作系统环境变量列出的目录ERL_LIBS
。有关code
更多信息,请参阅模块。
目录AppDir
下存在的应用程序目录可以被识别AppDir/ebin
。如果不存在,Reltool AppDir
在寻找应用程序时根本不会考虑。
建议将应用程序目录命名为应用程序,可能后跟破折号和版本号。例如myapp
或myapp-1.1
。
最后,可以从Escript读取单个模块和整个应用程序。
一些配置参数控制着系统(sys
)级别的Reltool的行为。其他人在应用程序(app
)级别上提供控制,而其他人在模块(mod
)级别上。模块级参数覆盖应用程序级参数,应用程序级参数覆盖系统级参数。Escript escript
级别参数覆盖系统级别参数。
以下最高级别options
得到支持:
config
这是主要选项,它控制Reltool的配置。它可以是sys
元组或file
包含sys
元组的名称。
trap_exit
此选项控制RelTool的错误处理行为。默认情况下,窗口进程会捕获退出,但此行为可以通过设置trap_exit
到false
...
wx_debug
此选项控制wx
它的名称表明它只对调试有用。见wx:debug/1
想了解更多信息。
除了已经提到的源参数root_dir
和lib_dirs
,下面的系统(sys
)级别选项的支持:
erts
ERTS的特定配置。请参见下面的应用程序级别选项。
escript
Escript特定的配置。escript有一个强制性的文件名和escript级别选项,下面将对其进行介绍。
app
特定于应用程序的配置。应用程序具有以下描述的强制性名称和应用程序级选项。
mod_cond
该参数控制模块包含策略。它默认为all
这意味着,如果包含应用程序(显式或隐式)应用程序中的所有模块都将包含在内。这意味着ebin
应用程序目录中存在的两个模块以及app
文件中命名的模块都将包含在内。如果参数设置为ebin
,ebin
则包含目录和派生模块中的两个模块。如果参数设置为app
,app
则包含文件和派生模块中的两个模块。derived
意味着仅包含其他包含模块使用的模块。mod_cond
系统级别的设置被用作所有应用程序的默认设置。
incl_cond
该参数控制应用程序和escript包含策略。它默认为derived
这意味着没有任何显式incl_cond
设置的应用程序只有在任何其他应用程序(显式或隐式包含)使用它时才会被包含。该值include
意味着将包括所有不具有任何明确incl_cond
设置的应用程序和脚本。exclude
意味着所有没有任何明确incl_cond
设置的应用程序和脚本将被排除。
boot_rel
目标系统可能有几个版本,但给定的版本如下boot_rel
系统启动时,将用作默认设置。
rel
发布特定的配置。每个版本映射到rel
,script
和boot
文件。有关systools
详细信息,请参阅模块了解更多信息。每个发行版都有一个名称,一个版本和一组应用程序,以及一些特定于发行版的参数,例如类型和包含的应用程序。
relocatable
此参数控制erl
目标系统中的可执行文件是否应自动确定它的安装位置,还是应该使用硬编码路径来安装。在后一种情况下,目标系统必须先安装好reltool:install/2
才能使用。如果系统可重新定位,则可以将包含目标系统的文件树移动到另一个位置,而无需重新安装。默认是true
。
profile
目标系统规范的创建分两步进行。在第一步中,生成一个完整的规范。它可能包含比您感兴趣的定制目标系统更多的文件。在第二步中,规范将根据您的过滤器进行过滤。您可以在每个应用程序以及系统范围的过滤器中指定过滤器。您也可以profile
为您的系统选择一个。根据profile
不同的默认过滤器将被使用。有三种不同的配置文件可供选择:development
,embedded
和standalone
。development
是默认的。那些受影响的参数profile
有:incl_sys_filters
,excl_sys_filters
,incl_app_filters
和excl_app_filters
。
app_file
此参数控制app
生成目标系统时文件的默认处理。它缺省keep
意味着app
文件被复制到目标系统,并且它们的内容保持原样。strip
意味着app
从原始app
文件的内容中生成一个新文件,其中未包含的模块将从文件中删除。all
也意味着app
从原始app
文件的内容生成新文件,不同之处在于所有包含的模块都被添加到文件中。如果应用程序没有任何app
文件的文件会为创建all
而不是keep
和strip
。
debug_info
该debug_info
参数控制当文件复制到目标系统时,光束文件中的调试信息是保留(keep
)还是剥离strip
。
excl_lib
警告
这一选择是实验性的。
如果excl_lib
选项设置为otp_root
reltool,则不会将Erlang / OTP安装($ OTP_ROOT)中的任何内容复制到目标结构中。目标是创建一个“苗条”版本,可以与现有的Erlang / OTP安装一起使用。因此,目标结构只包含一个包含lib
在$ OTP_ROOT之外找到的应用程序(通常是您自己的应用程序)的releases
目录,以及一个包含生成的.rel,
.script
和.boot
文件的目录。
启动此版本时,必须指定以下三项内容:
其中释放要使用的目录提示释放处理程序在我们的目标结构中使用releases目录而不是$ OTP_ROOT / releases。 这是通过从命令行(-sasl releases_dir <target-dir> / releases)或sys.config中设置SASL环境变量releases_dir来完成的。要使用的引导文件默认引导文件是$ OTP_ROOT / bin / start, 但在这种情况下,我们需要从目标结构中指定一个引导文件,通常为<target-dir> / releases / <vsn> / <RelName>。 这是通过-boot命令行选项完成的,以便erl我们的应用程序的位置生成的.script(和.boot)文件使用环境变量$ RELTOOL_EXT_LIB作为所有应用程序路径的前缀。 erl的-boot_var选项可用于指定此变量的值,通常为-boot_var RELTOOL_EXT_LIB <target-dir> / lib
例子:
erl -sasl releases_dir \"mytarget/releases\" -boot mytarget/releases/1.0/myrel\
-boot_var RELTOOL_EXT_LIB mytarget/lib
incl_sys_filters
该参数通常包含一个正则表达式列表,用于控制应包含系统中的哪些文件。目标系统中的每个文件必须至少与所列正则表达式中的一个匹配才能包含在内。此外,这些文件可能与任何过滤器不匹配excl_sys_filters
以便包含在内。应该包含哪些应用程序文件由参数incl_app_filters
和excl_app_filters
。该参数默认为[".*"]
。
excl_sys_filters
此参数通常包含正则表达式列表,用于控制系统中的哪些文件不应包含在目标系统中。为了被包含在内,文件必须与某个过滤器匹配,incl_sys_filters
但不包含任何过滤器excl_sys_filters
。该参数默认为[]
。
incl_app_filters
此参数通常包含一个正则表达式列表,用于控制应包含哪些应用程序特定文件。应用程序中的每个文件必须至少与所列正则表达式中的一个匹配才能包含在内。此外,这些文件可能与任何过滤器不匹配excl_app_filters
以便包含在内。该参数默认为[".*"]
。
excl_app_filters
此参数通常包含正则表达式列表,用于控制哪些应用程序特定的文件不应包含在目标系统中。为了被包含在内,文件必须与某个过滤器匹配,incl_app_filters
但不包含任何过滤器excl_app_filters
。该参数默认为[]
。
incl_archive_filters
此参数通常包含一个正则表达式列表,用于控制应用程序中哪些顶级目录应包含在归档文件中(而不是作为归档之外的常规目录包含在内)。应用程序中的每个顶层目录必须至少与所列正则表达式中的一个匹配才能包含在内。此外,这些文件可能与任何过滤器不匹配excl_app_filters
以便包含在内。该参数默认为[".*"]
。
excl_archive_filters
此参数通常包含一个正则表达式列表,用于控制应用程序中哪些顶级目录不应包含在归档文件中。为了包含在应用程序归档中,顶级目录必须与某个过滤器匹配,incl_archive_filters
但不包含任何过滤器excl_archive_filters
。该参数默认为["^include$","^priv$"]
。
archive_opts
此参数包含zip:create/3
应用程序特定文件打包到档案时给出的选项列表。仅支持一部分选项。在这种情况下最有用的选项是控制哪种类型的文件应该被压缩的选项。该参数默认为[]
。
在应用程序(escript
)级别,支持以下选项:
incl_cond
此参数的值将重写系统级别上同名的参数。
在应用程序(app
)级别,支持以下选项:
vsn
应用程序的版本。在已安装的系统中,可能存在多个版本的应用程序。该vsn
参数控制将选择哪个版本的应用程序。
这个参数是互斥的lib_dir
。如果vsn
和lib_dir
两者均被省略,则会选择最新版本。
请注意,为了reltool到应用程序版本进行排序,从而能够选择最新,要求该版本ID为唯一整数点的应用consits,例如1
,2.0
或3.17.1
。
lib_dir
从中读取应用程序的目录。这个参数可以用来指出一个特定的位置来从中获取应用程序。例如,如果父目录出于某种原因不适合作为系统级库目录。
这个参数与vsn
互斥。如果vsn
和lib_dir
两者均被省略,则会选择最新版本。
请注意,为了reltool到应用程序版本进行排序,从而能够选择最新,要求该版本ID为唯一整数点的应用consits,例如1
,2.0
或3.17.1
。
mod
模块特定配置。模块具有以下描述的强制性名称和模块级选项。
mod_cond
此参数的值将重写系统级别上同名的参数。
incl_cond
此参数的值将重写系统级别上同名的参数。
app_file
此参数的值将重写系统级别上同名的参数。
debug_info
此参数的值将重写系统级别上同名的参数。
incl_app_filters
此参数的值将重写系统级别上同名的参数。
excl_app_filters
此参数的值将重写系统级别上同名的参数。
incl_archive_filters
此参数的值将重写系统级别上同名的参数。
excl_archive_filters
此参数的值将重写系统级别上同名的参数。
archive_opts
此参数的值将重写系统级别上同名的参数。
在模块(mod
)级别,支持以下选项:
incl_cond
该参数控制是否包含模块。 默认情况下,应用程序和系统级别的mod_cond参数将用于控制是否包含模块。 incl_cond的值将覆盖模块包含策略。 包含意味着包含该模块,而排除意味着该模块不包含在内。 派生意味着如果模块被任何其他包含的模块使用,则包含该模块。
debug_info
此参数的值在应用程序级别上覆盖具有相同名称的参数。
数据类型
options() = [option()]
option() = {config, config() | file()}
| {trap_exit, bool()}
| {wx_debug, term()}
config() = {sys, [sys()]}
sys() = {root_dir, root_dir()}
| {lib_dirs, [lib_dir()]}
| {profile, profile()}
| {erts, app()}
| {escript, escript_file(), [escript()]}
| {app, app_name(), [app()]}
| {mod_cond, mod_cond()}
| {incl_cond, incl_cond()}
| {boot_rel, boot_rel()}
| {rel, rel_name(), rel_vsn(), [rel_app()]}
| {relocatable, relocatable()}
| {app_file, app_file()}
| {debug_info, debug_info()}
| {incl_sys_filters, incl_sys_filters()}
| {excl_sys_filters, excl_sys_filters()}
| {incl_app_filters, incl_app_filters()}
| {excl_app_filters, excl_app_filters()}
| {incl_archive_filters, incl_archive_filters()}
| {excl_archive_filters, excl_archive_filters()}
| {archive_opts, [archive_opt()]}
app() = {vsn, app_vsn()}
| {lib_dir, lib_dir()}
| {mod, mod_name(), [mod()]}
| {mod_cond, mod_cond()}
| {incl_cond, incl_cond()}
| {debug_info, debug_info()}
| {app_file, app_file()}
| {excl_lib, excl_lib()}
| {incl_sys_filters, incl_sys_filters()}
| {excl_sys_filters, excl_sys_filters()}
| {incl_app_filters, incl_app_filters()}
| {excl_app_filters, excl_app_filters()}
| {incl_archive_filters, incl_archive_filters()}
| {excl_archive_filters, excl_archive_filters()}
| {archive_opts, [archive_opt()]}
mod() = {incl_cond, incl_cond()}
| {debug_info, debug_info()}
rel_app() = app_name()
| {app_name(), app_type()}
| {app_name(), [incl_app()]}
| {app_name(), app_type(), [incl_app()]}
app_name() = atom()
app_type() = permanent | transient | temporary | load | none
app_vsn() = string()
archive_opt = zip_create_opt()
boot_rel() = rel_name()
app_file() = keep | strip | all
debug_info() = keep | strip
dir() = string()
escript() = {incl_cond, incl_cond()}
escript_file() = file()
excl_app_filters() = regexps()
excl_archive_filters() = regexps()
excl_lib() = otp_root
excl_sys_filters() = regexps()
file() = string()
incl_app() = app_name()
incl_app_filters() = regexps()
incl_archive_filters() = regexps()
incl_cond() = include | exclude | derived
incl_sys_filters() = regexps()
lib_dir() = dir()
mod_cond() = all | app | ebin | derived | none
mod_name() = atom()
profile() = development | embedded | standalone
re_regexp() = string()
reason() = string()
regexps() = [re_regexp()]
| {add, [re_regexp()]}
| {del, [re_regexp()]}
rel_file() = term()
rel_name() = string()
rel_vsn() = string()
relocatable = boolean()
root_dir() = dir()
script_file() = term()
server() = server_pid() | options()
server_pid() = pid()
target_dir() = file()
window_pid() = pid()
base_dir() = dir()
base_file() = file()
top_dir() = file()
top_file() = file()
target_spec() = [target_spec()]
| {create_dir, base_dir(), [target_spec()]}
| {create_dir, base_dir(), top_dir(), [target_spec()]}
| {archive, base_file(), [archive_opt()], [target_spec()]}
| {copy_file, base_file()}
| {copy_file, base_file(), top_file()}
| {write_file, base_file(), iolist()}
| {strip_beam_file, base_file()}
输出
create_target(Server, TargetDir) -> ok | {error, Reason}
类型
创建一个目标系统。给出的结果与{ok,TargetSpec}=reltool:get_target_spec(Server)
和reltool:eval_target_spec(TargetSpec,RootDir,TargetDir)
类似
eval_target_spec(TargetSpec, RootDir, TargetDir) -> ok | {error, Reason}
类型
根据reltool生成的规范创建实际的目标系统:get_target_spec / 1。 目标系统规范的创建分两步进行。 在第一步中将生成一个完整的规范。 它可能包含比您感兴趣的目标系统更多的文件。 在第二步中,规范将根据您的过滤器进行过滤。 您可以在每个应用程序以及系统范围的过滤器中指定过滤器。 您也可以为您的系统选择一个配置文件。 根据配置文件,将使用不同的默认过滤器。
顶级目录bin
,releases
和lib
与其他文件的处理方式不同。所有其他文件默认复制到目标系统。该releases
目录包含生成的rel
,script
和boot
文件。该lib
目录包含应用程序。包含哪些应用程序以及是否应该定制它们(存档,从调试信息等中除去)由各种配置参数指定。目录中的bin
文件是从目录复制的erts-vsn/bin
,但仅包含原始包含在bin
源系统目录中的文件。
如果配置参数relocatable
设置为true
无需安装目标系统,reltool:install/2
则可以启动它。在这种情况下,可以移动包含目标系统的文件树而无需重新安装。
在大多数情况下,RootDir
参数应设置为与root_dir
调用中使用的配置参数相同reltool:get_target_spec/1
(或者code:root_dir()
如果未设置配置参数)。在某些情况下,对不同的根目录评估相同的目标规范可能会有用。但是,应该非常小心地使用它,因为它需要所有根目录下的等效文件结构。
get_config(Server) -> {ok, Config} | {error, Reason}
类型
获取reltool配置。速记reltool:get_config(Server,false,false)
。
get_config(Server, InclDefaults, InclDerived) -> {ok, Config} | {error, Reason}
类型
获取reltool配置。通常情况下,只有具有不同于其默认值的显式配置参数才是函数的。但是内置的默认值可以通过设置返回InclDefaults
到true
。所导出的配置可通过设置返回InclDerived
到true
。
get_rel(Server, Relname) -> {ok, RelFile} | {error, Reason}
类型
获取发布文件的内容。查看rel(4)
更多细节。
get_script(Server, Relname) -> {ok, ScriptFile | {error, Reason}
类型
获取启动脚本文件的内容。查看script(4)
更多细节。
get_status(Server) -> {ok, [Warning]} | {error, Reason}
类型
获取配置的状态
get_server(WindowPid) -> {ok, ServerPid} | {error, Reason}
类型
返回服务器进程的进程标识符。
get_target_spec(Server) -> {ok, TargetSpec} | {error, Reason}
类型
返回目标系统的规格。实际的目标系统可以使用创建reltool:eval_target_spec/3
。
install(RelName, TargetDir) -> ok | {error, Reason}
类型
安装已创建的目标系统
start() -> {ok, WindowPid} | {error, Reason}
类型
使用默认选项启动主窗口进程
start(Options) -> {ok, WindowPid} | {error, Reason}
类型
使用选项启动主窗口进程
start_link(Options) -> {ok, WindowPid} | {error, Reason}
类型
使用选项启动主窗口进程。这一过程是相互联系的。
start_server(Options) -> {ok, ServerPid} | {error, Reason}
类型
使用选项启动服务器进程。服务器进程标识可以作为API中其他几个函数的参数。
stop(Pid) -> ok | {error, Reason}
类型
停止服务器或窗口进程