5  修补 OTP 应用程序

5  修补 OTP 应用程序

本文档介绍了使用一个或多个比已安装版本更新的 Erlang/OTP 应用程序来修补现有 OTP 安装的过程。工具 otp_patch_apply 可用于此特定目的。它位于 Erlang/OTP 源代码树的顶层目录中。

otp_patch_apply 工具利用 runtime_dependencies 标签,该标签位于 应用程序资源文件 中。此信息用于确定是否可以在给定的 Erlang/OTP 安装目录中安装补丁。

阅读更多关于在 Erlang/OTP 版本 17 中引入的 版本处理,其中还描述了如何确定安装是否包含一个或多个修补的应用程序。

如果要应用多个位于不同 OTP 版本中的 OTP 应用程序的补丁,则必须分多个步骤应用这些补丁。一次只能应用来自同一 OTP 版本的多个 OTP 应用程序。

假定读者熟悉 构建和安装 Erlang/OTP。要能够修补应用程序,必须存在以下内容:

  • 一个 Erlang/OTP 安装。

  • 一个包含要修补到现有 Erlang/OTP 安装中的更新应用程序的 Erlang/OTP 源代码树。

警告

修补应用程序是一个单向过程。在继续之前,请创建 OTP 安装目录的备份。

首先,构建位于 $ERL_TOP 中的包含更新应用程序的 OTP 源代码树。

注意

在应用补丁之前,您需要在源代码目录中执行 OTP 的完整构建。

配置并构建 OTP 中的所有应用程序

$ configure
$ make

$ ./otp_build configure
$ ./otp_build boot -a

如果您已在 OTP 安装中安装文档,也请构建文档

$ make docs

构建成功后,就可以开始修补了。将源代码树目录、安装目录和要修补的应用程序作为参数传递给 otp_patch_apply。每个应用程序的依赖项将针对安装中的应用程序以及作为参数给出的其他应用程序进行验证。如果检测到依赖项错误,脚本将中止。

otp_patch_apply 语法

$ otp_patch_apply -s <Dir> -i <Dir> [-l <Dir>] [-c] [-f] [-h] \
      [-n] [-v] <App1> [... <AppN>]

-s <Dir>  -- OTP source directory that contains build results.
-i <Dir>  -- OTP installation directory to patch.
-l <Dir>  -- Alternative OTP source library directory path(s)
             containing build results of OTP applications.
             Multiple paths should be colon separated.
-c        -- Cleanup (remove) old versions of applications
             patched in the installation.
-f        -- Force patch of application(s) even though
             dependencies are not fulfilled (should only be
             considered in a test environment).
-h        -- Print help then exit.
-n        -- Do not install documentation.
-v        -- Print version then exit.
<AppX>    -- Application to patch.

Environment Variable:
  ERL_LIBS  -- Alternative OTP source library directory path(s)
               containing build results of OTP applications.
               Multiple paths should be colon separated.
注意

运行 otp_patch_apply 时需要完整的构建环境。

注意

-s-l 标识的所有源代码目录应包含 OTP 应用程序的构建结果。

例如,如果用户想将构建在 /home/me/git/otp 中的 mnesiassl 的修补版本安装到位于 /opt/erlang/my_otp 中的 OTP 安装中,则输入

$ otp_patch_apply -s /home/me/git/otp -i /opt/erlang/my_otp \
  mnesia ssl
注意

如果应用程序列表包含核心应用程序,例如 ertskernelstdlibsasl,则必须重新运行修补的 Erlang/OTP 安装中的 Install 脚本。

修补的应用程序将追加到已安装应用程序列表中。请查看 <InstallDir>/releases/OTP-REL/installed_application_versions

可以使用 Erlang shell 检查应用程序依赖项。应用程序依赖项由 otp_patch_apply 在已安装的应用程序之间进行验证,但这些并不一定是实际加载的依赖项。通过调用 system_information:sanity_check(),可以验证实际加载的应用程序之间的依赖项。

1> system_information:sanity_check().
    ok

有关更多信息,请查看 sanity_check() 的参考文档。