最完整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 |
登录后查看全文
热门项目推荐
相关项目推荐
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00
GLM-4.7-FlashGLM-4.7-Flash 是一款 30B-A3B MoE 模型。作为 30B 级别中的佼佼者,GLM-4.7-Flash 为追求性能与效率平衡的轻量化部署提供了全新选择。Jinja00
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
compass-metrics-modelMetrics model project for the OSS CompassPython00
项目优选
收起
deepin linux kernel
C
27
11
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
522
3.71 K
Ascend Extension for PyTorch
Python
327
384
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
875
576
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
334
161
暂无简介
Dart
762
184
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.32 K
744
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
React Native鸿蒙化仓库
JavaScript
302
349
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
112
134