在许多企业的生产环境中,由于稳定性和兼容性要求,依然保留着运行多年的经典系统,CentOS 6.5 便是其中之一,当需要在这类陈旧但可靠的系统上部署特定版本的应用,例如安装 Erlang 19 来支撑 RabbitMQ 或某些自研的分布式服务时,会遇到一系列挑战,本文将详细阐述在 CentOS 6.5 系统上从源代码编译安装 Erlang 19 的完整流程,涵盖准备工作、依赖解决、编译步骤以及常见问题的排查,旨在为系统管理员和开发人员提供一份清晰、可执行的指南。
面临的挑战:为何选择源码编译?
直接通过 yum
在 CentOS 6.5 上安装 Erlang 通常会遇到两个核心问题,官方源及 EPEL 源提供的 Erlang 版本非常陈旧,远低于 Erlang 19,无法满足新软件的版本依赖,Erlang 19 对编译工具链和系统库(如 GCC、ncurses、OpenSSL 等)有更高的要求,而 CentOS 6.5 自带的默认版本往往过低,直接尝试安装新版本的 RPM 包会因依赖冲突而失败,从源代码编译安装是解决版本兼容性和依赖问题的最可靠、最灵活的途径,它允许我们精确控制编译选项,并针对当前系统环境进行优化。
第一步:系统准备与依赖安装
在开始编译之前,必须确保系统具备基本的编译环境和所有必需的开发库,这一步是成功编译的关键,任何缺失的依赖都可能导致 ./configure
或 make
过程中断。
更新系统到最新状态并安装“开发工具”包组,这将包含 GCC、Make 等核心编译工具。
sudo yum update -y sudo yum groupinstall -y "Development Tools"
安装 Erlang 19 编译所依赖的具体库文件,这些库涵盖了终端控制、加密、图形界面(可选)、ODBC 连接等多个方面,以下是一个较为全面的依赖列表,建议一次性安装完毕以避免后续中断。
sudo yum install -y \ ncurses-devel \ openssl-devel \ unixODBC-devel \ wxBase.x86_64 \ wxGTK.x86_64 \ wxGTK-gl.x86_64 \ wxGTK-devel.x86_64 \ fop \ java-1.7.0-openjdk-devel \ libxslt-devel \ perl-ExtUtils-MakeMaker
核心依赖说明表
依赖包名称 | 功能说明 | 是否必须 |
---|---|---|
ncurses-devel | 提供终端字符界面处理能力,Erlang Shell 依赖它。 | 是 |
openssl-devel | 提供 SSL/TLS 加密通信支持,如 ssl 应用。 | 是 |
unixODBC-devel | 提供数据库连接支持,用于 odbc 应用。 | 按需 |
wxGTK-devel | 提供图形用户界面支持,用于 observer 等可视化工具。 | 按需 |
java-1.7.0-openjdk-devel | 提供 JInterface 支持,用于与 Java 程序交互。 | 按需 |
libxslt-devel | 用于处理文档转换,编译文档时需要。 | 否 |
第二步:下载并解压 Erlang 19 源码
依赖安装完成后,从 Erlang 官方网站下载指定版本的源代码包,这里以 Erlang/OTP 19.3 为例。
cd /usr/local/src wget http://erlang.org/download/otp_src_19.3.tar.gz
下载完成后,使用 tar
命令解压源码包,并进入解压后的目录。
tar -xzf otp_src_19.3.tar.gz cd otp_src_19.3
第三步:配置编译选项
运行 configure
脚本是编译前的核心步骤,它会检测系统环境,并生成相应的 Makefile,对于 CentOS 6.5,我们可以添加一些选项来优化编译过程或禁用不需要的功能,以减少潜在的编译错误。
./configure \ --prefix=/usr/local/erlang \ --enable-smp-support \ --enable-threads \ --enable-sctp \ --enable-kernel-poll \ --enable-hipe \ --without-javac
配置选项解释:
--prefix=/usr/local/erlang
: 指定 Erlang 的安装目录,便于管理和卸载。--enable-smp-support
: 启用对称多处理器支持,充分利用多核 CPU。--enable-threads
: 启用线程支持。--without-javac
: 如果不打算使用 JInterface 或系统中 Java 环境配置复杂,可以使用此选项跳过 Java 相关组件的编译,能规避一些问题。
configure
过程顺利结束,将会看到一系列的配置摘要,如果报错,请仔细阅读错误信息,通常是缺少某个 -devel
包,根据提示使用 yum
安装即可。
第四步:编译与安装
配置成功后,便可以开始编译,这个过程会消耗较多的 CPU 资源和时间,具体时长取决于服务器的性能。
make
编译过程没有任何错误提示后,执行安装命令,将编译好的文件复制到 --prefix
指定的目录中。
sudo make install
第五步:配置环境变量与验证
为了能在系统任何地方直接使用 erl
、erlc
等命令,需要将 Erlang 的 bin
目录添加到系统的 PATH
环境变量中,编辑 /etc/profile
文件,在末尾添加以下内容:
export ERLANG_HOME=/usr/local/erlang export PATH=$PATH:$ERLANG_HOME/bin
保存文件后,执行 source /etc/profile
使配置立即生效,或者重新登录终端。
验证安装是否成功,在终端中输入 erl
,如果看到带有 Erlang/OTP 19.3 版本信息的 Shell 启动画面,即表示安装成功。
erl Erlang/OTP 19 [erts-8.3] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] Eshell V8.3 (abort with ^G) 1>
输入 halt().
即可退出 Erlang Shell。
相关问答 (FAQs)
问题1:为什么我不能直接使用 yum install erlang
来安装?这样做有什么风险?
答: 直接使用 yum
在 CentOS 6.5 上安装 Erlang 存在两个主要问题,第一,版本过低,CentOS 6 的官方源和 EPEL 源提供的 Erlang 版本通常是 R14B 或 R16B 等非常旧的版本,这些版本缺少许多现代特性和安全修复,无法满足如新版本 RabbitMQ 等应用的最低要求,第二,强行安装第三方为 CentOS 6 构建的新版本 RPM 包,极易引发“依赖地狱”,即该 RPM 包需要的系统库(如 glibc
, openssl
)版本高于系统自带,导致安装失败或系统不稳定,源码编译是在旧系统上获取新版本软件最稳妥的方法。
问题2:如果将来我想卸载这个从源码安装的 Erlang 19,应该如何操作?
答: 从源码安装的软件无法通过 yum remove
卸载,卸载方法取决于在安装目录(/usr/local/erlang
)下是否还保留着编译时的文件,最规范的卸载方式是,如果源码目录 otp_src_19.3
未被删除,Makefile
文件仍然存在,可以重新进入该目录,执行 sudo make uninstall
命令,这个命令会读取 Makefile 中的安装记录,并删除所有已安装的文件,如果源码目录已被删除,那么只能手动删除安装目录了,即执行 sudo rm -rf /usr/local/erlang
,同时别忘了从 /etc/profile
中移除之前添加的环境变量配置。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复