简介:Erlang是一种专为并发、分布式和容错系统设计的编程语言,广泛应用于电信、金融和Web服务等领域。本文详细介绍了在Linux CentOS系统上安装Erlang所需的依赖包,并演示了如何对提供的 otp_src_19.2
源码进行编译与安装。内容涵盖系统更新、依赖安装、源码配置、编译安装流程,以及安装后的验证方法。同时提供了版本建议与官方文档参考,适合初学者和开发者快速部署Erlang运行环境。
1. Erlang语言概述与应用场景
1.1 Erlang的基本特性
Erlang 是一种函数式编程语言,专为构建高并发、分布式和容错系统而设计。其核心特性包括:
- 轻量级进程 :Erlang 的进程是用户态线程,资源消耗极低,单台机器可轻松运行数十万个并发进程。
- 消息传递机制 :进程之间通过异步消息传递进行通信,避免了锁竞争问题,提升了系统安全性。
- 热代码升级 :支持在不中断服务的情况下更新代码,适用于需要持续运行的系统。
- 分布透明性 :Erlang 节点之间通信简单高效,开发人员无需关心底层网络细节。
这些特性使 Erlang 成为电信、金融、即时通讯、Web 后端等对高并发和高可用性有强需求领域的首选语言。
2. Erlang安装前的系统准备
在正式开始安装Erlang之前,系统环境的准备至关重要。一个稳定、安全且具备必要开发工具的操作系统环境,是确保Erlang顺利编译和运行的基础。本章将围绕CentOS系统展开,详细介绍安装Erlang前的系统准备工作,包括系统更新、基础开发环境的构建,以及用户权限与目录结构的规划。
2.1 CentOS系统更新操作
在开始安装任何软件之前,保持系统软件包和内核的最新状态,可以有效避免兼容性问题,并提高系统的安全性与稳定性。
2.1.1 使用yum更新系统软件包
CentOS系统使用 yum
作为默认的包管理器。更新系统软件包可以确保我们安装的依赖库和开发工具是最新的。
执行以下命令进行系统软件包更新:
sudo yum update -y
命令说明:
参数 | 含义 |
---|---|
sudo | 以管理员权限执行命令 |
yum update | 更新所有已安装的软件包 |
-y | 自动确认操作,避免交互式提示 |
执行逻辑说明:
- 系统首先连接到默认的镜像源,获取最新的软件包列表。
- 对比本地已安装的软件包版本与源中版本。
- 如果存在新版本,自动下载并安装更新。
建议 :定期运行
yum update
以保持系统安全与功能完整性。
2.1.2 系统内核与安全补丁更新策略
除了软件包的更新,系统内核也需要保持最新,尤其是当系统用于生产环境时。内核更新通常通过 yum
完成。
更新内核的命令如下:
sudo yum upgrade kernel -y
内核更新流程图:
graph TD
A[执行yum upgrade kernel命令] --> B[下载最新内核包]
B --> C[安装新内核]
C --> D[重启系统以应用新内核]
D --> E[确认当前内核版本]
验证当前内核版本:
uname -r
输出示例:
3.10.0-1160.el7.x86_64
注意 :更新内核后务必重启系统,否则新内核不会生效。
2.2 基础开发环境的构建
Erlang的编译过程依赖于一系列基础开发工具和库文件。构建一个完整的开发环境是编译源码的前提条件。
2.2.1 开发工具组的安装(Development Tools)
开发工具组包含编译器、调试器、make工具等关键组件。在CentOS中,可以通过安装 @development
工具组快速部署。
sudo yum groupinstall "Development Tools" -y
安装内容包括:
工具 | 用途 |
---|---|
gcc | C语言编译器 |
g++ | C++语言编译器 |
make | 构建工具 |
autoconf | 自动生成配置脚本 |
automake | 辅助生成Makefile |
gdb | 调试工具 |
binutils | 汇编与链接工具 |
提示 :这些工具是Erlang源码编译过程中不可或缺的依赖。
2.2.2 系统依赖库的安装检查
Erlang依赖一些系统级库文件,例如 OpenSSL、NCURSES、Zlib 等。为避免编译失败,需提前安装相关开发库。
安装常用依赖库命令如下:
sudo yum install -y openssl-devel ncurses-devel zlib-devel
各依赖库作用说明:
库名称 | 用途 |
---|---|
openssl-devel | 支持SSL/TLS加密通信 |
ncurses-devel | 提供终端文本界面支持 |
zlib-devel | 数据压缩与解压支持 |
检查是否安装成功:
rpm -q openssl-devel ncurses-devel zlib-devel
输出示例:
openssl-devel-1.1.1k-2.el7.x86_64
ncurses-devel-6.2-3.20200523.el7.x86_64
zlib-devel-1.2.11-17.el7.x86_64
注意 :如果某项未安装,可通过
yum install 包名
单独安装。
2.3 用户权限与目录结构规划
为了确保安装过程的安全性与可维护性,合理的用户权限管理与目录结构规划显得尤为重要。
2.3.1 使用sudo管理安装权限
虽然可以使用root用户进行安装,但出于安全考虑,推荐使用普通用户配合 sudo
权限执行安装操作。
添加用户并赋予sudo权限:
sudo useradd erlang_user
sudo passwd erlang_user
sudo usermod -aG wheel erlang_user
验证sudo权限:
切换到新用户:
su - erlang_user
执行以下命令验证:
sudo whoami
输出应为:
root
说明 :
wheel
组的用户默认拥有sudo
权限。
2.3.2 Erlang安装路径的选择与建议
Erlang通常安装在 /usr/local/erlang
或 /opt/erlang
目录下。选择安装路径时应考虑以下因素:
- 系统分区容量
- 多版本管理需求
- 权限控制与访问便利性
推荐目录结构如下:
路径 | 用途 |
---|---|
/opt/erlang/ | 主安装目录 |
/opt/erlang/26.0/ | 不同版本的独立安装目录 |
/opt/erlang/current | 软链接指向当前使用的版本 |
创建目录并设置权限:
sudo mkdir -p /opt/erlang
sudo chown -R erlang_user:erlang_user /opt/erlang
创建软链接示例:
cd /opt/erlang
ln -s 26.0 current
技巧 :通过软链接方式可以方便地切换不同版本的Erlang,避免环境变量频繁修改。
上下文衔接提示 :在完成系统准备后,下一步是安装Erlang所需的依赖组件(如GCC、Make、OpenSSL等),这些将在下一章《第三章:Erlang依赖组件的安装与配置》中详细讲解。合理的系统准备不仅为编译过程提供支持,也为后续的版本管理打下坚实基础。
3. Erlang依赖组件的安装与配置
Erlang的安装与编译过程依赖于多个基础组件,这些组件不仅保障了编译流程的顺利进行,还为Erlang在系统层面的功能扩展提供了底层支持。本章将详细介绍Erlang安装前所需的四个核心依赖组件:GCC编译器、GNU Make工具、OpenSSL开发库和NCURSES库。通过本章内容,您将掌握这些依赖组件的安装、配置与版本管理方法,并理解它们在Erlang编译与运行中的作用。
3.1 GCC编译器的安装与使用
GCC(GNU Compiler Collection)是Erlang源码编译的核心工具。Erlang源码通过GCC进行C语言部分的编译,生成可执行的BEAM虚拟机和相关运行时库。
3.1.1 GCC的安装步骤
在CentOS系统上,安装GCC可以通过 yum
包管理器完成。以下是标准安装流程:
sudo yum install -y gcc
安装完成后,验证GCC是否安装成功:
gcc --version
输出示例:
gcc (GCC) 8.5.0
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
参数说明:
-
yum install -y gcc
:-y
参数表示自动确认安装,避免交互提示。 -
gcc --version
:用于查看当前系统中GCC的版本信息。
3.1.2 多版本GCC的切换与管理
在某些情况下,可能需要使用不同版本的GCC进行编译。例如,某些Erlang版本可能要求使用GCC 7或更早版本。此时可以通过 update-alternatives
命令进行版本切换。
安装多个版本的GCC:
sudo yum install -y centos-release-scl
sudo yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++
启用特定版本:
scl enable devtoolset-7 bash
验证当前GCC版本:
gcc --version
说明 :上述命令中,
devtoolset-7
是SCL(Software Collections)提供的一个软件集合,包含GCC 7.x版本。通过scl enable
命令可以临时切换当前Shell会话的环境变量,使用指定版本的GCC。
3.2 GNU Make工具的配置
GNU Make是自动化构建工具,用于解析Makefile并执行编译任务。Erlang源码的编译过程依赖Make来驱动各个模块的构建。
3.2.1 Make的安装与版本验证
安装Make工具:
sudo yum install -y make
验证Make版本:
make --version
输出示例:
GNU Make 4.2.1
Built for x86_64-redhat-linux-gnu
Copyright (C) 1988-2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
参数说明:
-
make --version
:查看当前Make版本,确认是否满足Erlang编译需求。
3.2.2 Makefile基础与构建流程说明
Erlang源码中的Makefile结构如下:
Makefile
├── configure
├── erlang.mk
├── erts/
│ └── Makefile
├── lib/
│ └── Makefile
└── applications/
└── Makefile
每个子目录中的Makefile定义了该模块的编译规则。Erlang项目通过顶层Makefile调用各子模块的构建流程。
Makefile示例片段:
all:
$(MAKE) -C erts
$(MAKE) -C lib
$(MAKE) -C applications
代码逻辑分析:
-
all
:默认目标,表示构建所有模块。 -
$(MAKE) -C dir
:进入dir
目录并执行该目录下的Makefile。
构建流程图:
graph TD
A[开始 make all] --> B[进入 erts 目录]
B --> C[编译 BEAM VM]
C --> D[返回顶层]
D --> E[进入 lib 目录]
E --> F[编译核心库]
F --> G[返回顶层]
G --> H[进入 applications 目录]
H --> I[编译应用模块]
I --> J[构建完成]
3.3 OpenSSL开发库的部署
OpenSSL是Erlang实现SSL/TLS通信的基础依赖库。Erlang的 ssl
模块依赖OpenSSL库进行加密通信。
3.3.1 OpenSSL的安装方法
安装OpenSSL开发库:
sudo yum install -y openssl openssl-devel
验证安装是否成功:
openssl version
输出示例:
OpenSSL 1.1.1k FIPS 25 Mar 2021
参数说明:
-
openssl-devel
:包含开发头文件,用于编译时链接。 -
openssl version
:查看当前安装的OpenSSL版本。
3.3.2 Erlang对SSL/TLS功能的依赖说明
Erlang的SSL模块依赖OpenSSL库实现以下功能:
- 安全通信(HTTPS、FTPS等)
- 证书管理与验证
- 加密算法支持(如AES、RSA)
配置Erlang启用SSL模块:
在执行 ./configure
脚本时需添加以下参数:
./configure --with-ssl=/usr
该参数告诉Erlang编译系统OpenSSL的安装路径,确保链接成功。
依赖关系表:
Erlang模块 | 依赖库 | 功能说明 |
---|---|---|
ssl | OpenSSL | 实现SSL/TLS通信 |
crypto | OpenSSL | 提供加密函数 |
public_key | OpenSSL | 处理公钥操作 |
3.4 NCURSES库的安装与Shell支持
NCURSES库是Erlang交互式Shell(erl)正常运行所必需的组件,它负责终端界面的渲染与用户输入的处理。
3.4.1 NCURSES库的编译安装
在某些系统中,NCURSES可能未被默认安装。可以通过以下命令安装:
sudo yum install -y ncurses ncurses-devel
验证安装:
pkg-config --modversion ncurses
输出示例:
6.2
参数说明:
-
ncurses-devel
:提供开发头文件和静态库。 -
pkg-config
:查询已安装库的版本信息。
3.4.2 支持Erlang交互式Shell的关键配置
Erlang Shell依赖NCURSES库提供以下功能:
- 命令行编辑(上下键、历史记录)
- 自动补全(Tab键)
- 清屏与颜色高亮
验证Erlang Shell是否启用NCURSES:
启动Erlang Shell:
erl
在Shell中执行以下命令:
application:start(sasl).
如果Shell界面支持上下键和Tab补全,说明NCURSES已正确集成。
配置建议:
在Erlang编译时启用NCURSES支持:
./configure --enable-termcap
该选项启用终端处理功能,确保Shell界面交互良好。
本章总结与后续章节引导
本章详细介绍了Erlang安装所依赖的四个关键组件:GCC编译器、GNU Make工具、OpenSSL开发库和NCURSES库。我们不仅演示了它们的安装步骤与版本切换方法,还深入解析了这些组件在Erlang编译与运行中的作用机制。通过本章的学习,您已经具备了进行Erlang源码编译的全部依赖环境准备能力。
在下一章《第四章:Erlang源码的获取与预处理》中,我们将进一步介绍如何从官方渠道下载Erlang源码,并进行完整性校验、解压与目录结构组织等操作,为正式编译做好准备。
4. Erlang源码的获取与预处理
Erlang源码的获取与预处理是构建开发环境的关键步骤。这一阶段直接影响后续的编译与安装流程。本章将详细介绍如何从官方渠道下载Erlang源码、如何校验其完整性、使用压缩解压工具处理源码包,以及如何设置源码目录的权限和用户环境变量。
4.1 源码包的下载与校验
在进行Erlang源码编译之前,首先需要获取官方发布的源码包。Erlang/OTP源码可在其官方GitHub仓库或官方网站下载。
4.1.1 从官方渠道获取Erlang源码
Erlang官方推荐使用GitHub仓库获取源码,以确保代码的可追溯性和安全性。以下是以 Erlang/OTP 25.3 版本为例的获取步骤:
# 安装git工具
sudo yum install -y git
# 克隆Erlang/OTP仓库
git clone https://github.com/erlang/otp.git
# 切换到指定版本分支(例如OTP-25.3)
cd otp
git checkout OTP-25.3
代码逻辑分析:
-
git clone
:将Erlang官方仓库完整克隆到本地,保留所有历史版本。 -
git checkout OTP-25.3
:切换到特定版本的标签,确保获取的是官方发布的稳定版本。
参数说明:
-
OTP-25.3
:表示Erlang/OTP的发布版本号,版本号结构为OTP-X.Y.Z
,其中X表示主版本号,Y为次版本号,Z为补丁版本号。
4.1.2 使用SHA256校验文件完整性
下载完成后,建议使用SHA256哈希值验证文件的完整性,确保没有被篡改或下载不完整。以下是使用 sha256sum
命令进行校验的示例:
# 下载源码包
wget https://github.com/erlang/otp/archive/refs/tags/OTP-25.3.tar.gz -O otp-25.3.tar.gz
# 获取官方提供的SHA256哈希值(可从官网文档中找到)
echo "9a9f3c01234567890abcdef1234567890abcdef1234567890abcdef123456789 otp-25.3.tar.gz" > otp-25.3.tar.gz.sha256
# 执行校验
sha256sum -c otp-25.3.tar.gz.sha256
代码逻辑分析:
-
sha256sum -c
:使用指定的哈希文件对下载的源码包进行完整性校验。 - 若输出为
otp-25.3.tar.gz: OK
,则表示文件未被篡改。
参数说明:
-
otp-25.3.tar.gz.sha256
:包含SHA256哈希值的文本文件,通常由官方提供用于验证。
4.2 压缩解压工具的使用
在获取源码后,通常需要使用压缩工具进行解压,以便进行后续的编译操作。
4.2.1 tar、gzip、zip命令的常用方式
Linux系统中常用的压缩工具包括 tar
、 gzip
、 zip
,以下是常见使用方式:
# 解压tar.gz格式的源码包
tar -zxvf otp-25.3.tar.gz
# 解压zip格式的源码包
unzip otp-25.3.zip
# 查看tar包内容而不解压
tar -ztvf otp-25.3.tar.gz
代码逻辑分析:
-
-z
:表示使用gzip压缩。 -
-x
:提取文件。 -
-v
:显示解压过程。 -
-f
:指定文件名。
参数说明:
-
.tar.gz
:常用压缩格式,结合了tar打包和gzip压缩。 -
.zip
:跨平台兼容性较好的压缩格式。
4.2.2 解压源码包并组织目录结构
解压后,源码通常会被解压到一个以版本号命名的目录中。建议将源码统一组织到一个集中目录中,例如 /usr/local/src/erlang/
:
# 创建统一的源码存放目录
sudo mkdir -p /usr/local/src/erlang/
# 移动并重命名解压后的目录
sudo mv otp-OTP-25.3 /usr/local/src/erlang/25.3
# 查看目录结构
ls -la /usr/local/src/erlang/
代码逻辑分析:
-
mkdir -p
:递归创建目录,即使路径中某些目录不存在也不会报错。 -
mv
:移动并重命名目录,便于后续版本管理。
目录结构建议:
路径 | 用途说明 |
---|---|
/usr/local/src/erlang/ | 存放不同版本的Erlang源码 |
/usr/local/src/erlang/25.3/ | 版本号命名,便于识别和切换 |
4.3 源码目录的移动与权限设置
为了确保后续编译过程中不会因权限问题导致失败,需要合理设置源码目录的归属权限,并配置用户的环境变量。
4.3.1 更改源码目录归属权限
默认情况下, /usr/local/src/
目录可能由root用户拥有。为便于普通用户操作,建议更改目录归属:
# 更改目录归属为当前用户(假设用户名为developer)
sudo chown -R developer:developer /usr/local/src/erlang/
代码逻辑分析:
-
chown -R
:递归更改目录及其子目录的所有者和所属组。 -
developer:developer
:表示所有者为developer,组也为developer。
权限说明:
- 避免编译时出现
Permission denied
错误。 - 保证后续操作中用户可自由读写源码文件。
4.3.2 配置用户环境变量(PATH等)
为了方便后续编译和使用Erlang,建议将Erlang的安装路径添加到系统的 PATH
环境变量中。编辑当前用户的 ~/.bashrc
或 ~/.zshrc
文件:
# 编辑环境变量配置文件
nano ~/.bashrc
# 添加以下内容到文件末尾
export PATH=/usr/local/erlang/25.3/bin:$PATH
# 使配置生效
source ~/.bashrc
代码逻辑分析:
-
export PATH
:将Erlang的bin目录添加到系统路径中,使得可以在任意目录下执行erl
等命令。 -
source
:立即应用配置更改,而无需重新登录。
环境变量说明:
变量名 | 作用说明 |
---|---|
PATH | 系统查找可执行程序的路径列表 |
ERL_HOME (可选) | 可用于指定Erlang安装根目录,部分工具依赖该变量 |
流程图:Erlang源码获取与预处理流程
graph TD
A[开始] --> B[从GitHub克隆Erlang源码]
B --> C[使用SHA256校验文件完整性]
C --> D[使用tar或zip解压源码]
D --> E[将源码移至统一目录结构]
E --> F[更改目录归属权限]
F --> G[配置用户环境变量]
G --> H[完成源码预处理]
此流程图清晰地展示了从源码获取到环境配置的全过程,便于开发者理解整个预处理阶段的操作顺序与依赖关系。
小结:
- Erlang源码的获取应优先从官方GitHub仓库下载,确保版本的稳定性与安全性。
- 使用SHA256哈希值进行文件校验是保障系统安全的重要步骤。
- 熟练掌握tar、gzip、zip等压缩工具是处理源码包的基础技能。
- 合理组织源码目录结构并配置环境变量,有助于后续的编译与使用。
通过本章的详细讲解与示例操作,开发者可以顺利进入下一阶段的Erlang源码配置与编译过程。
5. Erlang源码的配置与编译
Erlang的源码安装流程主要包括配置(configure)、编译(make)和安装(install)三个主要阶段。本章将重点讲解如何正确配置Erlang源码,进行高效编译,并完成最终的安装操作。通过本章的学习,读者将掌握完整的Erlang源码编译流程,具备独立完成Erlang部署的能力。
5.1 源码配置阶段(./configure)
Erlang源码的配置阶段是整个安装流程的起点,它决定了编译器将如何处理源代码,以及最终生成的可执行文件将如何适应当前系统的环境。
5.1.1 配置脚本的执行与参数说明
在Erlang源码目录下,执行 ./configure
脚本即可开始配置过程。该脚本会自动检测系统环境,检查依赖库是否满足编译要求,并生成相应的Makefile文件。
cd /usr/local/src/otp_src_26.0
./configure
上述命令执行后,系统会输出一系列检测信息,包括编译器版本、操作系统类型、可用库文件等。
常见配置参数说明:
参数 | 说明 |
---|---|
--prefix=/usr/local/erlang | 设置安装路径,默认为 /usr/local |
--enable-smp-support | 启用多核CPU支持(适用于SMP系统) |
--enable-threads | 启用线程支持 |
--enable-dynamic-ssl-lib | 动态链接SSL库,便于后续版本升级 |
--with-ssl=/usr/local/ssl | 指定SSL库路径 |
--enable-kernel-poll | 使用epoll/kqueue等高效IO多路复用机制 |
--enable-hipe | 启用HiPE(High Performance Erlang)优化编译器 |
示例: 启用多线程支持和动态SSL链接库:
./configure --prefix=/usr/local/erlang --enable-threads --enable-dynamic-ssl-lib --with-ssl=/usr/local/ssl
逻辑分析:
-
--prefix
:指定安装路径,便于后期管理。 -
--enable-threads
:启用线程支持,提升并发性能。 -
--enable-dynamic-ssl-lib
:使用动态链接SSL库,避免因SSL版本升级导致重新编译。 -
--with-ssl
:指定OpenSSL的安装路径,确保Erlang能正确找到SSL库文件。
配置流程图:
graph TD
A[开始配置] --> B[执行 ./configure 命令]
B --> C{是否指定自定义参数?}
C -->|是| D[设置参数: --prefix, --enable-threads 等]
C -->|否| E[使用默认配置]
D --> F[检查系统依赖与环境]
E --> F
F --> G{配置是否成功?}
G -->|是| H[生成Makefile]
G -->|否| I[输出错误信息并退出]
5.1.2 常见配置错误与解决方案
错误1:缺少依赖库
现象:
configure: error: No curses library functions found
解决方案:
安装 ncurses-devel
库:
sudo yum install ncurses-devel
错误2:找不到OpenSSL开发库
现象:
configure: error: Could not find OpenSSL development libraries
解决方案:
安装OpenSSL开发包:
sudo yum install openssl-devel
错误3:GCC版本不兼容
现象:
configure: error: C compiler cannot create executables
解决方案:
检查GCC版本是否过低,安装或切换至更高版本:
gcc --version
sudo yum install gcc
错误4:权限不足导致无法写入目录
现象:
configure: error: cannot create regular file /usr/local/erlang/bin/erl: Permission denied
解决方案:
使用 sudo
提升权限运行配置命令:
sudo ./configure --prefix=/usr/local/erlang
5.2 源码编译阶段(make)
一旦配置阶段成功完成,就可以使用 make
命令开始源码编译。
5.2.1 编译过程的监控与日志查看
Erlang源码编译过程可能持续几分钟到十几分钟,具体时间取决于系统性能。编译过程中可以查看日志输出以监控进度:
make
编译输出示例片段:
GEN x86_64-unknown-linux-gnu/Makefile
CC beam/erl_vm.obj
CC beam/erl_process.obj
CC beam/erl_message.obj
...
每一行代表一个模块的编译状态。如果编译失败,日志会输出错误信息,便于定位问题。
日志文件查看:
编译日志通常会保存在 make.log
中,可使用以下命令查看:
make > make.log 2>&1
tail -f make.log
5.2.2 并行编译加速与资源控制
为了加快编译速度,可以使用 -j
参数指定并行任务数,通常设置为CPU核心数加1:
make -j4
逻辑分析:
-
-j4
:表示同时运行4个编译任务,适用于4核CPU系统。 - 若系统资源有限,可适当减少任务数,避免系统卡顿。
- 并行编译时,注意观察内存使用情况,避免因内存不足导致编译失败。
编译资源控制建议:
CPU核心数 | 推荐并行数(-j) |
---|---|
2核 | -j2 |
4核 | -j4 |
8核 | -j8 |
16核 | -j16 |
编译流程图:
graph TD
A[开始编译] --> B[执行 make 命令]
B --> C{是否启用并行编译?}
C -->|是| D[设置 -j 参数]
C -->|否| E[单线程编译]
D --> F[监控编译进度与资源使用]
E --> F
F --> G{编译是否成功?}
G -->|是| H[生成可执行文件]
G -->|否| I[输出错误信息并定位问题]
5.3 安装操作(sudo make install)
编译完成后,最后一步是将生成的可执行文件、库文件和文档安装到指定目录。
5.3.1 安装路径的确认与验证
在执行安装命令前,应确认 ./configure
时指定的安装路径是否有效。例如,若配置时使用:
./configure --prefix=/usr/local/erlang
则安装后的Erlang二进制文件将在 /usr/local/erlang/bin
目录下。
执行安装命令:
sudo make install
安装完成后,验证安装路径是否存在并包含必要的可执行文件:
ls /usr/local/erlang/bin
预期输出:
erl erlc epmd dialyzer escript ...
5.3.2 安装后的环境变量配置
为了让系统识别Erlang命令,需要将安装路径添加到 PATH
环境变量中。
临时添加:
export PATH=/usr/local/erlang/bin:$PATH
永久添加(推荐):
编辑 ~/.bashrc
或 /etc/profile
文件,添加以下行:
export PATH=/usr/local/erlang/bin:$PATH
然后执行:
source ~/.bashrc
验证安装:
erl -version
预期输出:
Erlang/OTP 26 [erts-14.0] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]
安装流程图:
graph TD
A[开始安装] --> B[执行 sudo make install 命令]
B --> C{是否指定安装路径?}
C -->|是| D[验证路径文件是否存在]
C -->|否| E[使用默认路径安装]
D --> F[设置环境变量 PATH]
E --> F
F --> G[验证 erl 命令是否可用]
G --> H[安装完成]
代码说明与逻辑分析:
-
sudo make install
:将编译生成的文件复制到配置阶段指定的安装路径。 -
export PATH=...
:将Erlang的bin目录添加到系统路径中,确保终端能识别erl
等命令。 -
erl -version
:验证Erlang是否安装成功,并输出版本信息。
通过本章的深入讲解,我们从配置脚本的执行与参数设置,到编译过程的并行优化与资源控制,再到安装路径的配置与验证,完整地梳理了Erlang源码安装的核心流程。下一章我们将重点讲解如何验证Erlang安装是否成功,并进行版本管理和环境适配。
6. Erlang安装验证与版本管理
Erlang的安装并不是以“编译完成”为终点,真正的关键在于安装后的验证与版本管理。只有通过系统的验证机制,我们才能确保其运行环境的完整性与稳定性;而良好的版本管理策略,则是保障系统长期维护与升级的基础。
6.1 Erlang运行环境的验证
Erlang安装完成后,我们首先需要验证其基本运行环境是否正常。
6.1.1 启动Erlang Shell(erl命令)
在终端中输入以下命令即可启动Erlang的交互式Shell:
erl
启动成功后,你会看到类似如下输出:
Erlang/OTP 25 [erts-13.2.4] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]
Eshell V12.3.4 (abort with ^G)
1>
这表明Erlang虚拟机已经正常启动。
我们可以执行一些简单的表达式进行验证:
1> 2 + 2.
4
2> lists:reverse([1,2,3,4]).
[4,3,2,1]
这些基本操作验证了Erlang运行时环境的完整性。
6.1.2 验证模块加载与网络通信功能
Erlang的分布式特性依赖于其网络通信机制。我们可以通过以下方式验证节点间的通信:
- 启动两个Erlang节点,分别指定不同的名称:
erl -name node1@localhost
erl -name node2@localhost
- 在其中一个节点中执行:
(node1@localhost)1> net_adm:ping(node2@localhost).
pong
返回 pong
表示节点间通信正常;若返回 ping
,则表示通信失败,需检查主机名、DNS配置、Erlang Cookie是否一致等问题。
6.2 Java支持的可选安装
Erlang通过JInterface库可以与Java进行交互,这对于构建混合架构系统(如Erlang后端 + Java前端)非常有用。
6.2.1 JDK的安装与版本选择
建议安装OpenJDK 11或以上版本:
sudo yum install java-11-openjdk-devel
安装完成后验证Java版本:
java -version
输出应类似如下:
openjdk version "11.0.17" 2022-10-18
OpenJDK Runtime Environment 18.9 (build 11.0.17+8)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.17+8, mixed mode, sharing)
6.2.2 Erlang与Java桥接功能的启用
JInterface位于Erlang安装目录下的 lib/jinterface
子目录中。使用Java程序连接Erlang节点的示例代码如下:
import com.ericsson.otp.erlang.*;
public class ErlangJavaBridge {
public static void main(String[] args) throws Exception {
OtpNode node = new OtpNode("java_node");
OtpMbox mbox = node.createMbox("mbox");
mbox.send("erlang_node@localhost", "mbox", new OtpErlangString("Hello from Java"));
node.close();
}
}
确保Erlang节点启动时指定 -name
并设置 .erlang.cookie
文件权限为600。
6.3 Erlang版本选择与官方文档参考
选择合适的Erlang版本对于项目的稳定性与兼容性至关重要。
6.3.1 不同版本间的兼容性说明
Erlang/OTP版本 | ERTS版本 | 兼容性说明 |
---|---|---|
OTP 24 | 12.0.x | 支持TLS 1.3 |
OTP 25 | 13.0.x | 新增对IPv6的支持 |
OTP 26 | 14.0.x | 性能优化,新增支持WebAssembly |
建议根据项目需求选择长期支持版本(LTS),如OTP 25或OTP 26。
6.3.2 官方文档的查阅与社区资源推荐
Erlang官方文档地址:
社区资源推荐:
- Erlang Solutions :提供培训、咨询和商业支持。
- Erlang Central :开发者社区,包含教程与最佳实践。
- Stack Overflow Erlang标签 :活跃的问题讨论平台。
6.4 OTP框架简介与开发支持说明
6.4.1 OTP库的核心模块与架构优势
OTP(Open Telecom Platform)是Erlang最核心的框架之一,提供了一整套构建高并发、分布式系统的开发工具和行为模式。
模块 | 功能说明 |
---|---|
supervisor | 实现进程监督树,自动重启失败进程 |
gen_server | 构建通用服务器行为 |
gen_fsm | 实现有限状态机 |
application | 应用打包与启动管理 |
使用 gen_server
的一个简单示例如下:
-module(my_server).
-behaviour(gen_server).
-export([start_link/0, init/1, handle_call/3, handle_cast/2]).
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
init([]) ->
{ok, 0}.
handle_call(increment, _From, State) ->
{reply, State + 1, State + 1}.
handle_cast({add, N}, State) ->
{noreply, State + N}.
6.4.2 构建高可用Erlang应用的开发建议
- 使用
supervisor
构建监督树,确保进程异常时自动重启; - 将业务逻辑封装到
gen_server
中,提高模块化与可维护性; - 利用
sys.config
进行配置管理,支持不同环境配置; - 使用
rebar3
作为构建工具,提升项目自动化程度; - 启用日志系统(如
logger
模块)以增强调试与监控能力。
下一章节将深入探讨Erlang项目的构建工具与自动化部署策略,进一步提升开发效率与系统稳定性。
简介:Erlang是一种专为并发、分布式和容错系统设计的编程语言,广泛应用于电信、金融和Web服务等领域。本文详细介绍了在Linux CentOS系统上安装Erlang所需的依赖包,并演示了如何对提供的 otp_src_19.2
源码进行编译与安装。内容涵盖系统更新、依赖安装、源码配置、编译安装流程,以及安装后的验证方法。同时提供了版本建议与官方文档参考,适合初学者和开发者快速部署Erlang运行环境。