Skip to main content

Glasgow Haskell コンパイラと Cabal のインストール

ソースコードを使用してCardano Nodeをコンパイルするには、アプリケーションとライブラリを構築するためにGlasgow Haskellコンパイラ (GHC) とCabalをインストールする必要があります。

Cardano Nodeがリリースされる毎に、Input-Outputでは特定のバージョンのGHCCabalを使用してバイナリをコンパイルすることを推奨しています。
たとえば、Cardano 開発者ポータルのソースからのcardano-nodecardano-cliのインストールを参照して、現在のCardano Nodeのリリースに必要なGHCCabalのバージョンを確認してください。
表1 に、現在リリースされているCardano NodeのGHCCabalのバージョン要件を示します。

表1 : 現在の Cardano ノード バージョン要件

リリース日Cardano ノード バージョンCardano CLI バージョンGHC バージョンCabal バージョンCNCLI バージョン
2026 年 3 月10.7.010.15.1.09.6.73.12.1.06.7.0

GHCとCabalのインストール

  1. パッケージを最新化します。
sudo apt update && sudo apt upgrade -y
  1. Cardano Nodeのソースコードのダウンロードとコンパイルに必要なパッケージとツールをインストールします。
sudo apt install bc curl htop nano needrestart rsync ufw zstd automake build-essential pkg-config libffi-dev libgmp-dev libssl-dev libncurses-dev libsystemd-dev zlib1g-dev make g++ tmux git jq wget libtool autoconf liblmdb-dev liburing-dev -y
tip

コンピューターにインストールされているすべてのパッケージを一覧表示するには、以下を入力します。

apt list --installed
  1. GHCupインストーラーを使用してGHCCabalをインストールするには、次のように入力します。
cd $HOME
export BOOTSTRAP_HASKELL_NONINTERACTIVE=1
export BOOTSTRAP_HASKELL_NO_UPGRADE=1
export BOOTSTRAP_HASKELL_INSTALL_NO_STACK=yes
export BOOTSTRAP_HASKELL_ADJUST_BASHRC=1
unset BOOTSTRAP_HASKELL_INSTALL_HLS

curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | bash
  1. GHCupGHCCabalのインストールを完了したら、次のコマンドを入力してシェルプロファイルを再読み込みし、GHCupが正しくインストールされたことを確認します。
source $HOME/.bashrc
ghcup --version

The GHCup Haskell installer, version ..*.

  1. Glasgow Haskellコンパイラーを現在リリースされているCardano Nodeのコンパイルに必要なバージョンに設定するには、次のコマンドを入力します。
ghcup install ghc 9.6.7
ghcup set ghc 9.6.7
ghc --version

The Glorious Glasgow Haskell Compilation System, version 9.6.7

  1. Cabalを現在リリースされているCardano Nodeのコンパイルに必要なバージョンに設定するには、次のコマンドを入力します。
ghcup install cabal 3.12.1.0
ghcup set cabal 3.12.1.0
cabal --version

cabal-install version 3.12.1.0
compiled using version 3.12.1.0 of the Cabal library

  1. Cardano Nodeに関連するソース コードとビルドを保存する作業ディレクトリを作成するには、次のコマンドを入力します。
mkdir -p $HOME/git
cd $HOME/git
  1. libsodiumをダウンロード、コンパイル、インストールするには、次のように入力します。
release_tag=$(curl -s https://api.github.com/repos/IntersectMBO/cardano-node/releases/latest | jq -r .tag_name)
echo "Release tag : ${release_tag}"
iohknix_version=$(curl https://raw.githubusercontent.com/IntersectMBO/cardano-node/${release_tag}/flake.lock | jq -r '.nodes.iohkNix.locked.rev')
echo "iohk-nix version: ${iohknix_version}"
sodium_version=$(curl https://raw.githubusercontent.com/input-output-hk/iohk-nix/${iohknix_version}/flake.lock | jq -r '.nodes.sodium.original.rev')
echo "Using sodium version: ${sodium_version}"
git clone https://github.com/intersectmbo/libsodium
cd libsodium
git checkout ${sodium_version}
./autogen.sh
sleep 1
./configure
make
make check
info

Testsuite summary for libsodium 1.0.18

============================================================================
# TOTAL: 82
# PASS: 82
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================

PASS: 82 であること :::

  1. インストールコマンドを実行します。
sudo make install
  1. libsodiumのバージョン確認
cd $HOME/git/libsodium
git rev-parse --short=8 HEAD

dbb48cce

  1. libsecp256k1をダウンロード、コンパイル、インストールするには、次のように入力します。
release_tag=$(curl -s https://api.github.com/repos/IntersectMBO/cardano-node/releases/latest | jq -r .tag_name)
echo "Release tag : ${release_tag}"
iohknix_version=$(curl https://raw.githubusercontent.com/IntersectMBO/cardano-node/${release_tag}/flake.lock | jq -r '.nodes.iohkNix.locked.rev')
echo "iohk-nix version: ${iohknix_version}"
secp256k1_version=$(curl https://raw.githubusercontent.com/input-output-hk/iohk-nix/${iohknix_version}/flake.lock | jq -r '.nodes.secp256k1.original.ref')
echo "Using secp256k1 version: ${secp256k1_version}"
cd $HOME/git
git clone --depth 1 --branch ${secp256k1_version} https://github.com/bitcoin-core/secp256k1
cd secp256k1
./autogen.sh
sleep 1
./configure --enable-module-schnorrsig --enable-experimental
make
make check
info

Testsuite summary for libsecp256k1 0.3.2

============================================================================
# TOTAL: 3
# PASS: 3
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================

PASS: 3 であること :::

  1. インストールコマンドを実行します。
sudo make install
  1. libsecp256k1のバージョン確認
cd $HOME/git/secp256k1
git tag --points-at HEAD

v0.3.2

  1. blstライブラリをダウンロードしてインストールするには、次のように入力します。
release_tag=$(curl -s https://api.github.com/repos/IntersectMBO/cardano-node/releases/latest | jq -r .tag_name)
echo "Release tag : ${release_tag}"
iohknix_version=$(curl https://raw.githubusercontent.com/IntersectMBO/cardano-node/${release_tag}/flake.lock | jq -r '.nodes.iohkNix.locked.rev')
echo "iohk-nix version: ${iohknix_version}"
blst_version=$(curl https://raw.githubusercontent.com/input-output-hk/iohk-nix/${iohknix_version}/flake.lock | jq -r '.nodes.blst.original.ref')
echo "Using blst version: ${blst_version}"
cd $HOME/git
git clone --depth 1 --branch ${blst_version} https://github.com/supranational/blst
cd blst
./build.sh
  1. 設定ファイルの生成
cat > libblst.pc << EOF
prefix=/usr/local
exec_prefix=\${prefix}
libdir=\${exec_prefix}/lib
includedir=\${prefix}/include

Name: libblst
Description: Multilingual BLS12-381 signature library
URL: https://github.com/supranational/blst
Version: ${blst_version#v}
Cflags: -I\${includedir}
Libs: -L\${libdir} -lblst
EOF
  1. ファイルをコピーします。
sudo cp libblst.pc /usr/local/lib/pkgconfig/
sudo cp bindings/blst_aux.h bindings/blst.h bindings/blst.hpp /usr/local/include/
sudo cp libblst.a /usr/local/lib
  1. パーミッションを変更します。
sudo chmod u=rw,go=r /usr/local/{lib/{libblst.a,pkgconfig/libblst.pc},include/{blst.{h,hpp},blst_aux.h}}
  1. blstライブラリのバージョン確認
cat /usr/local/lib/pkgconfig/libblst.pc | grep Version

Version: 0.3.14

ノードサーバーの環境変数設定

  1. 環境変数を設定します。
  • コンパイラーがコンピューター上のlibsodiumを見つけられるようにするため
  • Cardano Nodeの設定ファイルやスクリプトへのPATHを指定するため
  • ノードが実行されるCardano ネットワーククラスターを指定するため
echo PATH="$HOME/.local/bin:$PATH" >> $HOME/.bashrc
echo export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH" >> $HOME/.bashrc
echo export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH" >> $HOME/.bashrc
echo export NODE_HOME=$HOME/cnode >> $HOME/.bashrc
echo export NODE_CONFIG=mainnet >> $HOME/.bashrc
echo export NODE_NETWORK='"--mainnet"' >> $HOME/.bashrc
echo export NODE_NETWORK_ID=mainnet >> $HOME/.bashrc
source $HOME/.bashrc

一度上記を有効にするためシェルプロファイルをリロードします。

echo export CARDANO_NODE_SOCKET_PATH="${NODE_HOME}/db/socket" >> $HOME/.bashrc
  1. シェルプロファイルをリロードします。
source $HOME/.bashrc
  1. $HOME/.bashrcファイルにNODE_HOME環境変数のフォルダーセットを作成するには、次のように入力します。
mkdir -p $NODE_HOME

エアギャップの環境変数設定

以下はエアギャップにて実施します。

  1. 環境変数を設定します。
echo 'export NODE_HOME="$HOME/cnode"' >> ~/.bashrc
echo 'export NODE_NETWORK="--mainnet"' >> ~/.bashrc
echo 'export CARDANO_NODE_NETWORK_ID=mainnet' >> ~/.bashrc

source ~/.bashrc
mkdir -p ${NODE_HOME}
  1. 反映確認
echo "NODE_HOME=${NODE_HOME}"
echo "NODE_NETWORK=${NODE_NETWORK}"
echo "CARDANO_NODE_NETWORK_ID=${CARDANO_NODE_NETWORK_ID}"

エアギャップマシン一台での環境変数設定

以下はエアギャップにて実施します。

  1. 環境変数を設定します。

以下の設定を行います。

POOL_NAME="mainnet_pool_a"
mkdir -p "$HOME/${POOL_NAME}/"{cnode,cold-keys,cli}
cat > "$HOME/${POOL_NAME}/env.sh" <<EOF
# shellcheck shell=bash

unset NODE_HOME NODE_NETWORK CARDANO_NODE_NETWORK_ID COLD_DIR CLI_DIR CLI_BIN POOL_NAME

POOL_NAME="${POOL_NAME}"

export NODE_HOME="\$HOME/\${POOL_NAME}/cnode"
export NODE_NETWORK="--mainnet"
export CARDANO_NODE_NETWORK_ID="mainnet"

export COLD_DIR="\$HOME/\${POOL_NAME}/cold-keys"
export CLI_DIR="\$HOME/\${POOL_NAME}/cli"
export CLI_BIN="\$CLI_DIR/cardano-cli"
EOF
chmod 700 "$HOME/${POOL_NAME}/env.sh"
source "$HOME/${POOL_NAME}/env.sh"
chmod 700 "$COLD_DIR"
chmod 755 "$CLI_DIR"
  1. エイリアス設定 上記すべて実行後
cp "$HOME/.bashrc" "$HOME/.bashrc.bak.$(date +%Y%m%d%H%M%S)"
grep -q "# Cardano air-gap offline machine aliases" "$HOME/.bashrc" || cat >> "$HOME/.bashrc" <<'EOF'
# Cardano air-gap offline machine aliases
alias mainnet_pool_a='source "$HOME/mainnet_pool_a/env.sh"'
alias mainnet_pool_b='source "$HOME/mainnet_pool_b/env.sh"'
alias preview_pool_a='source "$HOME/preview_pool_a/env.sh"'
alias preprod_pool_a='source "$HOME/preprod_pool_a/env.sh"'
alias sanchonet_pool_a='source "$HOME/sanchonet_pool_a/env.sh"'
show_env () {
echo "NODE_HOME=${NODE_HOME:-<unset>}"
echo "NODE_NETWORK=${NODE_NETWORK:-<unset>}"
echo "CARDANO_NODE_NETWORK_ID=${CARDANO_NODE_NETWORK_ID:-<unset>}"
echo "COLD_DIR=${COLD_DIR:-<unset>}"
echo "CLI_DIR=${CLI_DIR:-<unset>}"
echo "CLI_BIN=${CLI_BIN:-<unset>}"
}
EOF
source $HOME/.bashrc
  1. cardano-cli の配置とバージョン固定(ネットワークごと) ※ cardano-cli は オンライン環境で取得済みのものを対象ネットワークの CLI_DIR にコピーしてから実行してください。

例:まず対象ネットワークに切り替える mainnet_pool_a show_env

CLI をこのネットワークの CLI_DIR にコピー(必須) cp /path/to/cardano-cli "$CLI_DIR/cardano-cli"

CLI_VER="$("$CLI_BIN" version | head -n1 | awk '{print $2}')"
[ -n "$CLI_VER" ] || { echo "ERROR: failed to detect cardano-cli version"; exit 1; }

if [ ! -e "$CLI_DIR/cardano-cli-${CLI_VER}" ]; then
mv "$CLI_BIN" "$CLI_DIR/cardano-cli-${CLI_VER}"
fi

ln -sfn "$CLI_DIR/cardano-cli-${CLI_VER}" "$CLI_BIN"

確認(必要なときだけ)

"$CLI_BIN" version