有人在 Raspberry Pi 3 上安装过 Mule ESB 社区版吗?

Has anyone installed Mule ESB community version on Raspberry Pi 3?

我知道 Mule ESB 企业版可以安装在 Raspberry Pi 上,因为它支持基于 arm 的处理器。不幸的是,社区版没有它。这使得我很难在 pi 上长时间使用 Mule ESB,因为我没有企业许可证(它用于个人项目,企业试用期在 30 天内结束)。我想知道,为什么社区版没有这个支持?在 pi 上使用社区版有什么限制吗?可以将支持添加到社区版吗?有人做过并用过吗?

是的,可以在 Raspberry PI 3(以及扩展到任何 armhf/armel 机器)上安装 运行 Mule。您必须调整安装以确保 Mule 使用 Linux armhf 32-bit Java Service Wrapper(或相关的 OS/architecture Wrapper)。详细步骤:

安装 Mule CE

像在任何其他机器上一样安装 Mule Standalone:

  1. 下载Mule CE Runtime
  2. 在某处解压内容,例如 /opt/mule(即 MULE_HOME=/opt/mule)并将内容的所有者更改为 Mule 用户(例如 mule:mule
  3. 可选,perform some hardening

您应该能够 运行 Mule 使用 $MULE_HOME/bin/mule start|stop|restart

配置Java服务包装器

您需要为您的 OS 和处理器架构手动添加 Java Service Wrapper 支持,对于 Raspberry PI 3 它将是 Linux armhf 32 位。

  1. 下载Linux armhf 32-bit Community Tanuki Java Service Wrapper并解压
  2. 将包装器 lib/libwrapper.so 复制到 $MULE_HOME/lib/boot/libwrapper-linux-armhf-32.so,确保它已读取+执行权限并且是 Mule 用户拥有的
  3. 将 Wrapper lib/wrapper.jar 复制到 $MULE_HOME/lib/boot/wrapper-{version}.jar(替换{version} 由你的 Wrapper 版本决定),确保它是 Mule 用户拥有的并删除或备份以前的 wrapper-{oldVersion}.jar
  4. 将Wrapper bin/wrapper复制到$MULE_HOME/lib/boot/exec/wrapper-linux-armhf-32,确保它有读+执行权限并且是Mule 用户拥有
  5. 这个有点棘手,你必须更新 $MULE_HOME/bin/mule 启动脚本。寻找case "$PROC_ARCH" in行,如:

    'x86_64') DIST_ARCH="x86" DIST_BITS="64" break;; 每个案例都匹配一个特定的硬件名称来定义 DIST_ARCH 和 DIST_BITS 变量,从而允许使用正确的 Wrapper 文件。添加一个新机箱来处理您的 Raspberry PI 硬件。对于 Raspberry 3,它应该类似于 armv71(如果需要,请检查 uname -m):

    'armv71') DIST_ARCH="armhf" DIST_BITS="32" break;;

  6. 您可能需要更新 $MULE_HOME/conf/wrapper.conf 以避免与内存相关的问题。我通常必须使用以下属性:

    wrapper.java.initmemory=512 wrapper.java.maxmemory=512 wrapper.java.additional.X=-XX:PermSize=256m wrapper.java.additional.Y=-XX:MaxPermSize=256m wrapper.java.additional.Z=-XX:NewSize=512m wrapper.java.additional.V=-XX:MaxNewSize=512m

当 Mule 在 armv71 硬件上 运行 时,它现在将使用 wrapper-{OS}-{DIST_ARCH}-{DIST_BITS},在我们的例子中是 wrapper-linux-armhf-32。您应该能够 运行 Mule 像往常一样 - 检查日志中是否有任何启动错误。

此方法已通过 Raspberry PI 2 和 3 的 Mule CE 3.7 和 3.8 测试(它应该适用于以前的版本)。这可能有点棘手,如果您有任何问题 post 发表评论,我会更新此 post 以添加详细信息。

顺便说一句,只要Java Service Wrapper 支持,此方法可用于添加对任何体系结构和OS 的支持。

I wonder, why community edition does not have this support?

我不知道,Mule CE 暂时不支持 ARM 架构。 CE 仅支持有限的平台和架构列表(即启动脚本过滤架构类型)。也许他们只是没有花时间(~钱)来添加支持,或者他们故意阻止 ARM 支持以支持 Mule EE。考虑到 Mule CE 是开源的,理论上有人可以为添加这样的支持做出贡献......(只是说!:)