最稳方式是直接安装官方预编译二进制包;源码编译仅适用于需定制运行时(如hipe、自定义crypto后端)的特殊场景,多数人configure报错或make失败实为依赖缺失或版本不匹配,而非专业度不足。

直接装官方预编译二进制包最稳,源码编译只在必须定制运行时(如 HIPE、自定义 crypto 后端)时才用——多数人卡在 configure 报错或 make 失败,本质是缺依赖或版本不匹配,不是“不够专业”,而是没对齐约束条件。
用 rpm/deb 官方包安装 Erlang(推荐绝大多数场景)
系统自带仓库的 Erlang 版本通常太旧(比如 Ubuntu 22.04 自带 Erlang 24.x),而 RabbitMQ 3.12.x 要求 Erlang 25.3–26.x,硬装会导致 unable to start node 或 crypto application not started 错误。
- 去 erlang.org/downloads 找对应系统的最新稳定版,例如
erlang-26.2.5.2-1.el8.x86_64.rpm(注意el8对应 CentOS 8/RHEL 8,ubuntu-22.04对应 deb 包) - RPM 用户:运行
dnf install -y ./erlang-*.rpm(CentOS 9+/Fedora)或yum install -y ./erlang-*.rpm(CentOS 7/8) - DEB 用户:先
apt install -y ./erlang_*.deb;若提示依赖缺失,再跑一次apt --fix-broken install - 验证:执行
erl -version,输出应含Erlang/OTP 26;再跑erl -eval 'io:format("~p~n", [crypto:version()])' -s init stop -noshell确认 crypto 模块可用
源码编译 Erlang(仅需 HIPE / 自定义 crypto / aarch64 上特殊需求)
编译不是“更可控”,而是代价明确:耗时长、./configure 参数错一个就失败、make install 后路径散乱或权限错,后续很难 clean。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 必须装齐依赖:
yum install -y gcc make ncurses-devel openssl-devel perl xmlto(CentOS)或apt install -y build-essential libncurses5-dev libssl-dev perl xmlto(Ubuntu) -
./configure必须加--prefix=/usr/local/erlang,否则文件会留在源码目录下,which erl找不到 - 报
No curses library functions found?CentOS 8+ 需额外装ncurses-compat-libs和ncurses-c++-libs,不是ncurses-devel - 别盲目加
--enable-hipe:现代 Erlang(25+)默认启用 JIT,HIPE 在 x86_64 上反而拖慢启动,且完全不支持 aarch64
ERL_HOME 和 PATH 配置的致命细节
RabbitMQ 启动脚本硬编码读取 $ERL_HOME,且要求 .erlang.cookie 权限为 600;环境变量配错,erl 能跑但 rabbitmq-server 直接静默退出。
- 统一用
/etc/profile.d/erlang.sh(而非直接改/etc/profile),内容仅两行:export ERL_HOME=/usr/local/erlangexport PATH=$PATH:$ERL_HOME/bin - 执行
source /etc/profile.d/erlang.sh后,检查which erl输出是否为/usr/local/erlang/bin/erl - 若已手动装过 Erlang,确认
/var/lib/rabbitmq/.erlang.cookie权限是600,属主是rabbitmq用户,否则rabbitmqctl status会报Node rabbit@localhost not running
真正容易被忽略的是 RabbitMQ 与 Erlang 的版本锁死关系——查 rabbitmq.com/which-erlang.html 不是走形式,而是救命步骤;装完 Erlang 后不验证 crypto:version(),等于埋了个定时炸弹。










