最完整Kerl使用指南:从入门到精通Erlang/OTP版本管理
2026-01-31 04:23:24作者:戚魁泉Nursing
引言:告别Erlang版本管理的噩梦
你是否还在为不同项目需要不同Erlang/OTP版本而烦恼?手动编译源码时遭遇依赖地狱?切换版本时配置环境变量出错?作为一名资深Erlang开发者,我深知这些痛点。Kerl(Erlang/OTP版本管理器)正是为解决这些问题而生——它能让你在5分钟内完成多个Erlang版本的安装、切换与管理,全程无需手动配置环境变量,支持所有主流shell,甚至能一键部署到远程服务器。
读完本文你将掌握:
- 3种Kerl安装方式(源码/包管理器/自动升级)
- 从下载到激活的完整工作流(含12个核心命令)
- 多版本并行管理技巧(开发/测试/生产环境隔离)
- 高级配置与性能优化(编译加速/磁盘空间管理)
- 跨平台兼容方案(Linux/macOS不同shell适配)
什么是Kerl?
Kerl(发音/ˈkɜːrl/)是一款轻量级的Erlang/OTP版本管理工具,采用POSIX shell编写,仅依赖curl和git。它通过集中管理源码下载、编译构建和安装部署,实现了Erlang多版本的无缝切换。截至2025年9月,最新稳定版4.4.0已支持Erlang/OTP 28.0,兼容从OTP 17到28的所有主流版本。
flowchart LR
A[下载源码] --> B[编译构建]
B --> C[安装到隔离目录]
C --> D[激活使用]
D --> E[切换版本]
E --> F[部署到远程]
style A fill:#f9f,stroke:#333
style B fill:#9f9,stroke:#333
style C fill:#9ff,stroke:#333
安装指南:3种方式快速上手
方式1:直接下载(推荐)
# 下载最新版Kerl脚本
curl -O https://gitcode.com/gh_mirrors/ke/kerl/raw/master/kerl
# 添加执行权限
chmod a+x kerl
# 移动到PATH目录
sudo mv kerl /usr/local/bin/
方式2:Homebrew安装(macOS)
brew install kerl
方式3:自动升级现有版本
kerl upgrade
# 输出示例:
# Local kerl found (/usr/local/bin/kerl) at version 4.3.1.
# Remote kerl found at version 4.4.0.
# Upgrading to 4.4.0...
核心工作流:从版本列表到激活使用
1. 查看可用Erlang版本
# 列出稳定版(默认)
kerl list releases
# 列出所有版本(含RC和旧版本)
kerl list releases all
# 输出示例:
# 26.2.5.12 *
# 27.3.4 *
# 28.0 *
# 注:*表示当前支持的版本
2. 构建指定版本
# 基本构建(使用默认配置)
kerl build 28.0 28.0
# 带文档构建
KERL_BUILD_DOCS=yes kerl build 28.0 28.0-with-docs
# 自定义编译选项
KERL_CONFIGURE_OPTIONS="--without-javac --enable-sctp" kerl build 28.0 28.0-minimal
3. 安装构建版本
# 安装到指定目录
kerl install 28.0 /usr/local/lib/erlang/28.0
# 安装到默认目录(~/.kerl/installations)
kerl install 28.0
4. 激活使用版本
# Bash/Zsh
. /usr/local/lib/erlang/28.0/activate
# Fish
source /usr/local/lib/erlang/28.0/activate.fish
# Csh/Tcsh
source /usr/local/lib/erlang/28.0/activate.csh
# 验证激活
kerl active
# 输出:The current active installation is: /usr/local/lib/erlang/28.0
5. 切换与停用
# 切换版本(先停用当前版本)
kerl_deactivate
. /path/to/another/version/activate
# 查看所有安装
kerl list installations
高级功能:从Git构建到远程部署
从GitHub仓库构建
# 从官方仓库特定tag构建
kerl build git https://github.com/erlang/otp.git OTP-28.0 28.0-git
# 从fork仓库构建
export OTP_GITHUB_URL=https://github.com/your-org/otp
kerl build 28.0-custom 28.0-custom
部署到远程服务器
# 基本部署
kerl deploy user@remotehost /usr/local/lib/erlang/28.0
# 带自定义SSH选项
KERL_DEPLOY_SSH_OPTIONS="-p 2222" kerl deploy user@remotehost /path/to/local/28.0
调试构建问题
# 启用调试日志
KERL_DEBUG=1 kerl build 28.0 28.0-debug
# 查看构建日志
cat ~/.kerl/builds/28.0-debug/otp_build_28.0-debug.log
配置详解:打造个性化Kerl环境
配置文件(~/.kerlrc)
# 基础配置
KERL_BASE_DIR=/data/kerl # 更改工作目录
KERL_BUILD_DIR=/tmp/kerl-builds # 临时构建目录
KERL_DOWNLOAD_DIR=~/downloads/erlang # 源码缓存目录
# 编译选项
KERL_CONFIGURE_OPTIONS="--with-ssl=/usr/local/ssl --enable-kernel-poll"
KERL_CONFIGURE_DISABLE_APPLICATIONS="odbc jinterface"
# 文档设置
KERL_BUILD_DOCS=yes
KERL_DOC_TARGETS="html man chunks"
# 激活设置
KERL_ENABLE_PROMPT=yes # 启用版本提示符
KERL_PROMPT_FORMAT="[%RELEASE%]" # 自定义提示符格式
环境变量优先级
| 配置方式 | 优先级 | 适用场景 |
|---|---|---|
| 命令行参数 | 最高 | 临时覆盖 |
| 环境变量 | 中等 | 当前shell会话 |
| ~/.kerlrc | 最低 | 全局默认配置 |
OpenSSL版本兼容矩阵
| Erlang/OTP版本 | 推荐OpenSSL版本 | 配置示例 |
|---|---|---|
| ≤25.0 | 1.1.x | KERL_CONFIGURE_OPTIONS="--with-ssl=/usr/lib/ssl1.1" |
| ≥25.1 | 3.0.x | KERL_CONFIGURE_OPTIONS="--with-ssl=/usr/lib/ssl3" |
Shell支持:全平台命令补全
Bash补全
# 安装补全脚本
sudo curl -o /etc/bash_completion.d/kerl https://gitcode.com/gh_mirrors/ke/kerl/raw/master/bash_completion/kerl
# 立即生效
source /etc/bash_completion.d/kerl
Zsh补全
# 安装补全脚本
mkdir -p ~/.zsh/completions
curl -o ~/.zsh/completions/_kerl https://gitcode.com/gh_mirrors/ke/kerl/raw/master/zsh_completion/_kerl
# .zshrc中添加
fpath=($HOME/.zsh/completions $fpath)
autoload -Uz compinit && compinit
Fish补全
# 安装补全脚本
mkdir -p ~/.config/fish/completions
curl -o ~/.config/fish/completions/kerl.fish https://gitcode.com/gh_mirrors/ke/kerl/raw/master/fish_completion/kerl.fish
最佳实践:效率与安全并重
多版本并行管理策略
| 环境 | 版本管理方式 | 示例 |
|---|---|---|
| 开发环境 | 按项目隔离 | kerl install 28.0 ~/projects/myapp/erlang |
| 测试环境 | 版本固定 | KERL_DEFAULT_INSTALL_DIR=/opt/erlang kerl install 27.3 |
| 生产环境 | 符号链接 | ln -s /opt/erlang/28.0 /opt/erlang/current |
磁盘空间优化
# 清理构建缓存(保留安装)
kerl cleanup 28.0
# 清理所有未使用构建
kerl cleanup all
# 删除不需要的版本
kerl delete installation 27.3
kerl delete build 27.3
版本切换自动化(Bash示例)
# 在.bashrc中添加版本切换函数
erlang_switch() {
kerl_deactivate
. ~/.kerl/installations/$1/activate
}
# 使用:erlang_switch 28.0
常见问题解决
编译依赖问题
| 错误信息 | 解决方案 |
|---|---|
configure: error: No curses library found |
安装libncurses-dev(Debian/Ubuntu)或ncurses-devel(RHEL/CentOS) |
ld: library not found for -lcrypto |
安装openssl-devel或设置KERL_CONFIGURE_OPTIONS="--with-ssl=/path/to/ssl" |
javac: not found |
安装OpenJDK或添加--without-javac到编译选项 |
版本激活问题
# 问题:激活后PATH未更新
# 解决:检查是否有其他脚本修改PATH,或手动添加:
export PATH=/usr/local/lib/erlang/28.0/bin:$PATH
# 问题:fish shell激活报错
# 解决:确保使用正确的激活脚本:
source /path/to/installation/activate.fish
总结与展望
Kerl作为Erlang生态系统的重要工具,彻底解决了多版本管理的痛点。通过本文介绍的工作流,你可以轻松实现:
- 5分钟内完成从源码到可用的Erlang环境搭建
- 在同一台机器上维护任意多个Erlang版本
- 定制化编译满足不同项目需求
- 一键部署到开发/测试/生产环境
随着Erlang/OTP 28的发布,Kerl也在持续进化,未来版本将支持更多构建后端和自动化测试集成。建议定期通过kerl upgrade保持工具更新,并关注项目仓库获取最新动态。
收藏本文,下次遇到Erlang版本问题时即可快速查阅。如有疑问或使用技巧,欢迎在评论区交流!
附录:命令速查表
| 功能 | 命令 |
|---|---|
| 查看版本 | kerl version |
| 更新版本列表 | kerl update releases |
| 查看构建状态 | kerl status |
| 导出激活脚本 | kerl emit-activate 28.0 /path/to/install sh |
| 查看安装路径 | kerl path 28.0 |
登录后查看全文
热门项目推荐
相关项目推荐
GLM-5智谱 AI 正式发布 GLM-5,旨在应对复杂系统工程和长时域智能体任务。Jinja00
GLM-5-w4a8GLM-5-w4a8基于混合专家架构,专为复杂系统工程与长周期智能体任务设计。支持单/多节点部署,适配Atlas 800T A3,采用w4a8量化技术,结合vLLM推理优化,高效平衡性能与精度,助力智能应用开发Jinja00
jiuwenclawJiuwenClaw 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。Python0194- QQwen3.5-397B-A17BQwen3.5 实现了重大飞跃,整合了多模态学习、架构效率、强化学习规模以及全球可访问性等方面的突破性进展,旨在为开发者和企业赋予前所未有的能力与效率。Jinja00
AtomGit城市坐标计划AtomGit 城市坐标计划开启!让开源有坐标,让城市有星火。致力于与城市合伙人共同构建并长期运营一个健康、活跃的本地开发者生态。01
awesome-zig一个关于 Zig 优秀库及资源的协作列表。Makefile00
项目优选
收起
deepin linux kernel
C
27
12
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
602
4.04 K
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
69
21
Ascend Extension for PyTorch
Python
442
531
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
112
170
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.46 K
825
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
922
770
暂无简介
Dart
847
204
React Native鸿蒙化仓库
JavaScript
321
375
openGauss kernel ~ openGauss is an open source relational database management system
C++
174
249