最完整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
请把这个活动推给顶尖程序员😎本次活动专为懂行的顶尖程序员量身打造,聚焦AtomGit首发开源模型的实际应用与深度测评,拒绝大众化浅层体验,邀请具备扎实技术功底、开源经验或模型测评能力的顶尖开发者,深度参与模型体验、性能测评,通过发布技术帖子、提交测评报告、上传实践项目成果等形式,挖掘模型核心价值,共建AtomGit开源模型生态,彰显顶尖程序员的技术洞察力与实践能力。00
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
MiniMax-M2.5MiniMax-M2.5开源模型,经数十万复杂环境强化训练,在代码生成、工具调用、办公自动化等经济价值任务中表现卓越。SWE-Bench Verified得分80.2%,Multi-SWE-Bench达51.3%,BrowseComp获76.3%。推理速度比M2.1快37%,与Claude Opus 4.6相当,每小时仅需0.3-1美元,成本仅为同类模型1/10-1/20,为智能应用开发提供高效经济选择。【此简介由AI生成】Python00
Qwen3.5Qwen3.5 昇腾 vLLM 部署教程。Qwen3.5 是 Qwen 系列最新的旗舰多模态模型,采用 MoE(混合专家)架构,在保持强大模型能力的同时显著降低了推理成本。00- RRing-2.5-1TRing-2.5-1T:全球首个基于混合线性注意力架构的开源万亿参数思考模型。Python00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
567
3.83 K
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
892
667
Ascend Extension for PyTorch
Python
376
445
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
349
200
昇腾LLM分布式训练框架
Python
116
145
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.37 K
778
暂无简介
Dart
798
197
React Native鸿蒙化仓库
JavaScript
308
359
openJiuwen agent-studio提供零码、低码可视化开发和工作流编排,模型、知识库、插件等各资源管理能力
TSX
1.13 K
271