kerl
GitHub概要
スター1,633
ウォッチ62
フォーク238
作成日:2011年7月5日
言語:Shell
ライセンス:Other
トピックス
erlanghomebrewkerlotp-releaseshell
スター履歴
データ取得日時: 2025/7/20 03:49
言語バージョン管理ツール
kerl
概要
kerlは、Erlang/OTPインスタンスの簡単なビルドとインストールを可能にする確立されたツールです。シェル非依存のPOSIXシェルスクリプトとして設計され、curlとgit以外に特別な依存関係を必要としません。ダウンロード、ビルド、インストールした各リリースを管理し、完全な再ビルドなしに新しい場所への簡単インストールや、Erlang/OTPインストール間の切り替えを実現します。Erlang公式でも認められたツールとして、多くの開発者に利用されています。
詳細
主な特徴
- 確立された実績: Erlang/OTPコミュニティで長年愛用される信頼性
- シェル非依存: POSIXシェルで動作し、環境に依存しない
- 最小依存: curlとgitのみが必要な軽量ツール
- 豊富なビルドオプション: configure時の詳細カスタマイズ
- 名前付きビルド: 同じバージョンで異なる設定のビルド管理
- インストール再利用: ビルド済みバージョンの複数箇所への展開
- GitHubからのビルド: 特定コミットやブランチからの直接ビルド
アーキテクチャ
kerlは単一のBashスクリプトとして実装され、Erlang/OTPのソースコードをダウンロード、コンパイル、インストールする全工程を管理します。各ビルドは独立して管理され、activateスクリプトを通じて環境の切り替えを行います。
ビルド管理システム
kerlは「ビルド」と「インストール」を分離した設計を採用しています。一度ビルドしたバージョンは、複数の場所にインストール可能で、チーム開発や複数プロジェクトでの効率的な環境管理を実現します。
メリット・デメリット
メリット
- 実証された安定性: 長年の運用実績による信頼性
- シンプルな設計: 単一スクリプトによる分かりやすいアーキテクチャ
- 高い柔軟性: 豊富なビルド設定オプション
- 軽量: 最小限の依存関係とリソース使用
- 再利用性: ビルド済みバイナリの効率的な展開
- 公式支援: Erlang公式ドキュメントでの推奨
- 広い互換性: 様々なUNIX系システムでの動作保証
デメリット
- 長いビルド時間: ソースからのコンパイルによる時間コスト
- 手動操作: 自動化には追加のスクリプト作成が必要
- Windows非対応: UNIX系環境に限定
- 学習コスト: コマンド体系に慣れが必要
- 環境依存: システム依存関係の手動管理
- 単発管理: 複数言語の統一管理は不可
参考ページ
書き方の例
インストール
# 直接ダウンロード(推奨)
curl -O https://raw.githubusercontent.com/kerl/kerl/master/kerl
chmod a+x kerl
sudo mv kerl /usr/local/bin/
# macOSでHomebrewを使用
brew install kerl
# Ubuntu/Debianでaptを使用
sudo apt-get install kerl
# Arch Linuxでpacmanを使用
sudo pacman -S kerl
# バージョン確認
kerl version
システム依存関係のインストール
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y \
build-essential \
autoconf \
m4 \
libncurses5-dev \
libwxgtk3.0-gtk3-dev \
libgl1-mesa-dev \
libglu1-mesa-dev \
libpng-dev \
libssl-dev \
libssh-dev \
unixodbc-dev \
xsltproc \
fop \
libxml2-utils
# CentOS/RHEL/Fedora
sudo yum groupinstall -y "Development Tools"
sudo yum install -y \
autoconf \
ncurses-devel \
openssl-devel \
wxGTK3-devel \
libxml2-devel \
libxslt-devel \
fop
# macOS
xcode-select --install
brew install autoconf [email protected] readline libxslt fop
基本的な使い方
# 利用可能なリリースの更新と表示
kerl update releases
kerl list releases
# 特定バージョンのビルド
kerl build 27.2 erlang-27.2
# ビルド進行状況の確認
kerl status
# ビルド一覧の表示
kerl list builds
# インストールの実行
kerl install erlang-27.2 ~/erlang/27.2
# インストール一覧の表示
kerl list installations
カスタムビルド設定
# ドキュメント付きビルド
export KERL_BUILD_DOCS=yes
kerl build 27.2 erlang-27.2-docs
# SSL設定(macOS)
export KERL_CONFIGURE_OPTIONS="--with-ssl=$(brew --prefix [email protected])"
kerl build 27.2 erlang-27.2-ssl
# GUI無効化(サーバー用)
export KERL_CONFIGURE_OPTIONS="--without-wx --without-observer --without-debugger --without-et"
kerl build 27.2 erlang-27.2-server
# パフォーマンス最適化
export KERL_CONFIGURE_OPTIONS="--enable-kernel-poll --enable-hipe --disable-debug"
kerl build 27.2 erlang-27.2-optimized
# 複数オプションの組み合わせ
export KERL_CONFIGURE_OPTIONS="--with-ssl=$(brew --prefix [email protected]) --without-wx --enable-kernel-poll"
kerl build 27.2 erlang-27.2-custom
環境の切り替え
# Erlang環境をアクティベート
. ~/erlang/27.2/activate
# 現在のアクティブ環境確認
kerl active
# アクティブ環境の詳細表示
kerl status
# 環境のデアクティベート
kerl_deactivate
# 異なるバージョンへの切り替え
. ~/erlang/26.2/activate
ビルドとインストールの管理
# ワンコマンドでビルド&インストール
kerl build-install 27.2 erlang-27.2 ~/erlang/27.2
# 既存ビルドの別場所へのインストール
kerl install erlang-27.2 ~/projects/myapp/erlang
# インストールの削除
kerl delete installation ~/erlang/27.2
# ビルドの削除
kerl delete build erlang-27.2
# 全インストールの表示
kerl list installations
# 特定インストールのパス取得
kerl path erlang-27.2
Gitからの直接ビルド
# 最新のmainブランチからビルド
kerl build git https://github.com/erlang/otp.git main otp-main
# 特定のタグからビルド
kerl build git https://github.com/erlang/otp.git OTP-27.2 otp-27.2-git
# 特定のコミットからビルド
kerl build git https://github.com/erlang/otp.git abc1234 otp-commit
# ローカルリポジトリからビルド
kerl build git /path/to/local/otp.git main local-otp
プロジェクトでの活用
# プロジェクトセットアップスクリプト
#!/bin/bash
# setup-erlang.sh
PROJECT_ROOT=$(pwd)
ERLANG_DIR="$PROJECT_ROOT/.erlang"
# プロジェクト固有のErlangインストール
if [ ! -d "$ERLANG_DIR" ]; then
echo "Installing Erlang 27.2 for this project..."
kerl build 27.2 project-erlang-27.2 2>/dev/null || true
kerl install project-erlang-27.2 "$ERLANG_DIR"
fi
# 環境のアクティベート
. "$ERLANG_DIR/activate"
echo "Erlang environment ready: $(erl -eval 'erlang:system_info(otp_release), halt().')"
自動化スクリプト
# Erlangバージョン自動インストール
#!/bin/bash
# auto-install-erlang.sh
VERSIONS=(
"27.2"
"26.2.5.6"
"25.3.2.14"
)
for VERSION in "${VERSIONS[@]}"; do
BUILD_NAME="erlang-$VERSION"
INSTALL_PATH="$HOME/erlang/$VERSION"
if [ ! -d "$INSTALL_PATH" ]; then
echo "Building and installing Erlang $VERSION..."
kerl build-install "$VERSION" "$BUILD_NAME" "$INSTALL_PATH"
else
echo "Erlang $VERSION already installed at $INSTALL_PATH"
fi
done
echo "All Erlang versions installed successfully!"
CI/CDでの活用
# GitHub Actions例
name: Erlang CI with kerl
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
erlang: ['27.2', '26.2.5.6', '25.3.2.14']
steps:
- uses: actions/checkout@v4
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
build-essential \
autoconf \
libncurses5-dev \
libssl-dev \
curl
- name: Install kerl
run: |
curl -O https://raw.githubusercontent.com/kerl/kerl/master/kerl
chmod a+x kerl
sudo mv kerl /usr/local/bin/
- name: Build and install Erlang
run: |
kerl update releases
kerl build-install ${{ matrix.erlang }} erlang-${{ matrix.erlang }} ~/erlang/${{ matrix.erlang }}
. ~/erlang/${{ matrix.erlang }}/activate
erl -eval 'erlang:system_info(otp_release), halt().'
- name: Run tests
run: |
. ~/erlang/${{ matrix.erlang }}/activate
rebar3 compile
rebar3 eunit
Docker統合
# Dockerfile例
FROM ubuntu:22.04
# システム依存関係のインストール
RUN apt-get update && apt-get install -y \
curl \
git \
build-essential \
autoconf \
libncurses5-dev \
libssl-dev \
&& rm -rf /var/lib/apt/lists/*
# kerlのインストール
RUN curl -O https://raw.githubusercontent.com/kerl/kerl/master/kerl && \
chmod a+x kerl && \
mv kerl /usr/local/bin/
# Erlangのビルドとインストール
ENV KERL_CONFIGURE_OPTIONS="--without-wx --without-observer --disable-debug"
RUN kerl update releases && \
kerl build-install 27.2 erlang-27.2 /opt/erlang/27.2
# 環境変数の設定
ENV PATH="/opt/erlang/27.2/bin:$PATH"
# 作業ディレクトリの設定
WORKDIR /app
# プロジェクトファイルのコピー
COPY . .
# アプリケーションのビルド
RUN . /opt/erlang/27.2/activate && \
rebar3 compile
# アプリケーションの起動
CMD ["/opt/erlang/27.2/bin/erl", "-noshell", "-s", "myapp", "start"]
高度な設定とトラブルシューティング
# 設定ファイルでのデフォルト値設定
# ~/.kerlrc
KERL_CONFIGURE_OPTIONS="--enable-kernel-poll --enable-hipe"
KERL_BUILD_DOCS=yes
KERL_INSTALL_MANPAGES=yes
# 並列ビルドの設定
export MAKEFLAGS="-j$(nproc)"
# ビルドエラー時のデバッグ
kerl build --verbose 27.2 debug-build
# ビルドログの確認
cat ~/.kerl/builds/erlang-27.2/otp_build_27.2.log
# キャッシュのクリア
rm -rf ~/.kerl/builds/*
rm -rf ~/.kerl/archives/*
# インストールの修復
kerl install --force erlang-27.2 ~/erlang/27.2
# アップグレード確認
kerl upgrade
複数プロジェクトでの管理パターン
# プロジェクトA (最新版)
cd ~/projects/project-a
kerl install erlang-27.2 .erlang
echo '. ./.erlang/activate' > activate.sh
# プロジェクトB (安定版)
cd ~/projects/project-b
kerl install erlang-26.2 .erlang
echo '. ./.erlang/activate' > activate.sh
# プロジェクトC (レガシー)
cd ~/projects/project-c
kerl install erlang-25.3 .erlang
echo '. ./.erlang/activate' > activate.sh
# 各プロジェクトでの起動
# cd ~/projects/project-a && source activate.sh
ベンチマークとパフォーマンステスト
# パフォーマンス最適化ビルド
export KERL_CONFIGURE_OPTIONS="--enable-kernel-poll --enable-hipe --enable-smp-support --enable-threads --disable-debug"
kerl build 27.2 erlang-27.2-performance
# ベンチマーク用スクリプト
#!/bin/bash
# benchmark.sh
VERSIONS=("25.3.2.14" "26.2.5.6" "27.2")
for VERSION in "${VERSIONS[@]}"; do
echo "Testing Erlang $VERSION..."
. ~/erlang/$VERSION/activate
time erl -noshell -eval '
lists:seq(1, 1000000),
halt().
'
kerl_deactivate
done