首页
/ 最完整Kerl使用指南:从入门到精通Erlang/OTP版本管理

最完整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编写,仅依赖curlgit。它通过集中管理源码下载、编译构建和安装部署,实现了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
登录后查看全文
热门项目推荐
相关项目推荐