# 在运行时安装 EMQX 补丁包
如果一个 Bug 修复只更新了少数几个 module,在已经知道需要更新的 module 列表的情况下,可以使用补丁包方式升级 EMQX。
注意:如果可以使用版本热升级的方式,则首选版本热升级。只有版本热升级不可用,并且你了解在生产环境中 安装补丁包的后果的情况下,才可以使用此方式解决问题。
# 安装 EMQX 补丁包的步骤
从 EMQX 开发者那里获取本次需要更新的 modules 列表。比如:
emqx.beam emqx_rule_engine.beam
1
2从 EMQX 官网,或者 EMQX 开发者那里获取本次更新对应的软件包。
访问 开源版下载地址 (opens new window) 或者 企业版下载地址 (opens new window),下载对应版本的 zip 软件包。
注意选择正确的软件版本号、OTP 版本号、以及操作系统类型,并且选择 "zip" 包类型。
解压下载的 zip 包,并找到要更新的 modules:
$ unzip -q emqx-ee-4.4.1-otp24.1.5-3-ubuntu20.04-amd64.zip
1假设我们要更新 emqx.beam 和 emqx_rule_engine.beam,则在解压目录下寻找他们:
$ find ./emqx -name "emqx.beam" ./emqx/lib/emqx-4.4.1/ebin/emqx.beam $ find ./emqx -name "emqx_rule_engine.beam" ./emqx/lib/emqx_rule_engine-4.4.1/ebin/emqx_rule_engine.beam
1
2
3
4
5确保 EMQX 是已经启动的状态:
$ emqx_ctl status Node 'emqx@127.0.0.1' 4.4.1 is started
1
2找到 beam 文件的对应位置,备份并替换原 beam 文件:
找到 EMQX 的安装目录:
$ emqx root_dir "/usr/lib/emqx"
1
2在安装目录下的 lib 目录下查找原 beam 文件的路径:
$ find /usr/lib/emqx/lib -name "emqx.beam" /usr/lib/emqx/lib/emqx-4.4.0/ebin/emqx.beam $ find /usr/lib/emqx/lib -name "emqx_rule_engine.beam" /usr/lib/emqx/lib/emqx_rule_engine-4.4.0/ebin/emqx_rule_engine.beam
1
2
3
4
5备份原 beam 文件到
/tmp
目录:$ cp /usr/lib/emqx/lib/emqx-4.4.0/ebin/emqx.beam \ /usr/lib/emqx/lib/emqx_rule_engine-4.4.0/ebin/emqx_rule_engine.beam /tmp
1
2使用新 beam 文件覆盖到对应位置:
$ cp -f ./emqx/lib/emqx-4.4.1/ebin/emqx.beam /usr/lib/emqx/lib/emqx-4.4.0/ebin/ $ cp -f ./emqx/lib/emqx_rule_engine-4.4.1/ebin/emqx_rule_engine.beam /usr/lib/emqx/lib/emqx_rule_engine-4.4.0/ebin/
1
2加载新的 beam 文件:
$ emqx eval 'c:lm().' [{module, emqx}, {module, emqx_rule_engine}]
1
2
3
# 回滚补丁包
把安装补丁包时备份好的文件复制回原来的目录:
$ cp -f /tmp/emqx.beam /usr/lib/emqx/lib/emqx-4.4.0/ebin/ $ cp -f /tmp/emqx_rule_engine.beam /usr/lib/emqx/lib/emqx_rule_engine-4.4.0/ebin/
1
2重新加载 beam 文件:
$ emqx eval 'c:lm().' [{module, emqx}, {module, emqx_rule_engine}]
1
2
3