Glasgow Haskell コンパイラと Cabal のインストール
ソースコードを使用してCardano Nodeをコンパイルするには、アプリケーションとライブラリを構築するためにGlasgow Haskellコンパイラ (GHC) とCabalをインストールする必要があります。
Cardano Nodeがリリースされる毎に、Input-Outputでは特定のバージョンのGHCとCabalを使用してバイナリをコンパイルすることを推奨しています。
たとえば、Cardano 開発者ポータルのソースからのcardano-nodeとcardano-cliのインストールを参照して、現在のCardano Nodeのリリースに必要なGHCとCabalのバージョンを確認してください。
表1 に、現在リリースされているCardano NodeのGHCとCabalのバージョン要件を示します。
表1 : 現在の Cardano ノード バージョン要件
| リリース日 | Cardano ノード バージョン | Cardano CLI バージョン | GHC バージョン | Cabal バージョン | CNCLI バージョン |
|---|---|---|---|---|---|
| 2026 年 3 月 | 10.7.0 | 10.15.1.0 | 9.6.7 | 3.12.1.0 | 6.7.0 |
GHCとCabalのインストール
- パッケージを最新化します。
sudo apt update && sudo apt upgrade -y
- 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
コンピューターにインストールされているすべてのパッケージを一覧表示するには、以下を入力します。
apt list --installed
GHCupインストーラーを使用してGHCとCabalをインストールするには、次のように入力します。
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
GHCupがGHCとCabalのインストールを完了したら、次のコマンドを入力してシェルプロファイルを再読み込みし、GHCupが正しくインストールされたことを確認します。
source $HOME/.bashrc
ghcup --version
The GHCup Haskell installer, version ..*.
- 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
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
- Cardano Nodeに関連するソース コードとビルドを保存する作業ディレクトリを作成するには、次のコマンドを入力します。
mkdir -p $HOME/git
cd $HOME/git
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
Testsuite summary for libsodium 1.0.18
============================================================================
# TOTAL: 82
# PASS: 82
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================
PASS: 82 であること :::
- インストールコマンドを実行します。
sudo make install
libsodiumのバージョン確認
cd $HOME/git/libsodium
git rev-parse --short=8 HEAD
dbb48cce
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
Testsuite summary for libsecp256k1 0.3.2
============================================================================
# TOTAL: 3
# PASS: 3
# SKIP: 0
# XFAIL: 0
# FAIL: 0
# XPASS: 0
# ERROR: 0
============================================================================
PASS: 3 であること :::
- インストールコマンドを実行します。
sudo make install
libsecp256k1のバージョン確認
cd $HOME/git/secp256k1
git tag --points-at HEAD
v0.3.2
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
- 設定ファイルの生成
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
- ファイルをコピーします。
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
- パーミッションを変更します。
sudo chmod u=rw,go=r /usr/local/{lib/{libblst.a,pkgconfig/libblst.pc},include/{blst.{h,hpp},blst_aux.h}}
blstライブラリのバージョン確認
cat /usr/local/lib/pkgconfig/libblst.pc | grep Version
Version: 0.3.14
ノードサーバーの環境変数設定
- 環境変数を設定します。
- コンパイラーがコンピューター上の
libsodiumを見つけられるようにするため - Cardano Nodeの設定ファイルやスクリプトへの
PATHを指定するため - ノードが実行されるCardano ネットワーククラスターを指定するため
- Mainnet
- Preview
- PreProd
- SanchoNet
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
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=preview >> $HOME/.bashrc
echo export NODE_NETWORK='"--testnet-magic 2"' >> $HOME/.bashrc
echo export NODE_NETWORK_ID=2 >> $HOME/.bashrc
source $HOME/.bashrc
一度上記を有効にするためシェルプロファイルをリロードします。
echo export CARDANO_NODE_SOCKET_PATH="${NODE_HOME}/db/socket" >> $HOME/.bashrc
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=preprod >> $HOME/.bashrc
echo export NODE_NETWORK='"--testnet-magic 1"' >> $HOME/.bashrc
echo export NODE_NETWORK_ID=1 >> $HOME/.bashrc
source $HOME/.bashrc
一度上記を有効にするためシェルプロファイルをリロードします。
echo export CARDANO_NODE_SOCKET_PATH="${NODE_HOME}/db/socket" >> $HOME/.bashrc
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=sanchonet >> $HOME/.bashrc
echo export NODE_NETWORK='"--testnet-magic 4"' >> $HOME/.bashrc
echo export NODE_NETWORK_ID=4 >> $HOME/.bashrc
source $HOME/.bashrc
一度上記を有効にするためシェルプロファイルをリロードします。
echo export CARDANO_NODE_SOCKET_PATH="${NODE_HOME}/db/socket" >> $HOME/.bashrc
- シェルプロファイルをリロードします。
source $HOME/.bashrc
$HOME/.bashrcファイルにNODE_HOME環境変数のフォルダーセットを作成するには、次のように入力します。
mkdir -p $NODE_HOME
エアギャップの環境変数設定
以下はエアギャップにて実施します。
- 環境変数を設定します。
- Mainnet
- Preview
- PreProd
- SanchoNet
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}
echo 'export NODE_HOME="$HOME/cnode"' >> $HOME/.bashrc
echo 'export NODE_NETWORK="--testnet-magic 2"' >> $HOME/.bashrc
echo 'export CARDANO_NODE_NETWORK_ID=2' >> $HOME/.bashrc
source $HOME/.bashrc
mkdir -p ${NODE_HOME}
echo 'export NODE_HOME="$HOME/cnode"' >> $HOME/.bashrc
echo 'export NODE_NETWORK="--testnet-magic 1"' >> $HOME/.bashrc
echo 'export CARDANO_NODE_NETWORK_ID=1' >> $HOME/.bashrc
source $HOME/.bashrc
mkdir -p ${NODE_HOME}
echo 'export NODE_HOME="$HOME/cnode"' >> $HOME/.bashrc
echo 'export NODE_NETWORK="--testnet-magic 4"' >> $HOME/.bashrc
echo 'export CARDANO_NODE_NETWORK_ID=4' >> $HOME/.bashrc
source $HOME/.bashrc
mkdir -p ${NODE_HOME}
- 反映確認
echo "NODE_HOME=${NODE_HOME}"
echo "NODE_NETWORK=${NODE_NETWORK}"
echo "CARDANO_NODE_NETWORK_ID=${CARDANO_NODE_NETWORK_ID}"
エアギャップマシン一台での環境変数設定
以下はエアギャップにて実施します。
- 環境変数を設定します。
以下の設定を行います。
- Mainnet-1
- Mainnet-2
- Preview
- PreProd
- SanchoNet
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"
POOL_NAME="mainnet_pool_b"
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"
POOL_NAME="preview_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="--testnet-magic 2"
export CARDANO_NODE_NETWORK_ID="2"
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"
POOL_NAME="preprod_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="--testnet-magic 1"
export CARDANO_NODE_NETWORK_ID="1"
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"
POOL_NAME="sanchonet_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="--testnet-magic 4"
export CARDANO_NODE_NETWORK_ID="4"
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"
- エイリアス設定 上記すべて実行後
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
- 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