GLIBC_2.28 エラーの解決方法
Node.js を実行する際に「GLIBC_2.28 not found」というエラーが発生する場合、システムのGLIBCバージョンとNode.jsバージョンの互換性の問題です。この記事では、この問題の原因と効果的な解決策を解説します。
問題の原因
このエラーは、Node.js 18以降のバージョンがGLIBC(GNU C Library)バージョン2.28以上を必要とする一方で、Ubuntu 18.04などの古いLinuxディストリビューションではGLIBC 2.27までしか提供されていないために発生します。
node: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28' not found (required by node)
システムのGLIBCバージョンは次のコマンドで確認できます:
ldd --version
解決方法
方法1: Node.jsのバージョンダウングレード(推奨)
最も簡単で安全な解決策は、互換性のあるNode.jsバージョンを使用することです。
# Node.js 16のインストール(LTSで安定版)
nvm install 16
nvm use 16
# デフォルトバージョンとして設定
nvm alias default 16
sudo npm install -g n
sudo n 16
sudo apt-get install --reinstall nodejs-legacy
TIP
Node.js 16は2023年9月まで長期サポート(LTS)が提供されており、安定性と互換性のバランスが取れています。
方法2: システムのアップグレード
本格的な解決策として、OS自体をアップグレードする方法があります。
Ubuntu 18.04 → 20.04 アップグレード
# システム更新
sudo apt update
sudo apt upgrade -y
# アップグレードツールのインストール
sudo apt install update-manager-core
# システムアップグレードの実行
sudo do-release-upgrade
WARNING
システムアップグレードの前に必ずバックアップを取得してください。WSL環境では以下のコマンドでバックアップ可能です:
wsl --export Ubuntu-18.04 C:\wsl-backup\ubuntu-18.04.tar
方法3: 非公式ビルドの利用
Ubuntu 18.04環境を変更したくない場合、GLIBC 2.17と互換性のある非公式ビルドを利用できます:
https://unofficial-builds.nodejs.org/download/
方法4: Dockerコンテナの利用
Node.jsをDockerコンテナ内で実行することで、システム環境に影響を与えずに最新バージョンを使用できます。
# Node.js 20でyarn installを実行
sudo docker run -ti --rm -v $(pwd):/workdir --workdir /workdir \
--entrypoint "yarn" node:20 install
# 開発サーバー起動(ポート3000を使用)
sudo docker run -ti --rm -p 3000:3000 -v $(pwd):/workdir \
--workdir /workdir --entrypoint "npm" node:20 exec -c "yarn dev"
トラブルシューティング
NVMがインストールされていない場合
# NVMのインストール
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
# .bashrcの再読み込み
source ~/.bashrc
# インストール確認
nvm -v
特定の環境での注意点
Raspberry Piの場合
Raspberry Piでは、追加の依存関係の問題が発生する可能性があります:
# 利用可能なGLIBCXXバージョンの確認
strings /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 | grep GLIBCXX
GitHub Actions Runnerの場合
セルフホストRunnerでは、実行ファイルを互換性のあるバージョンに置き換える必要がある場合があります。
根本原因と技術的詳細
Node.js 18以降は以下のライブラリバージョンを必要とします:
- GLIBC ≥ 2.28
- GLIBCXX ≥ 3.4.26 (GCC 9+)
Ubuntu 18.04の標準リポジトリでは以下のバージョンまでしか提供されていません:
- GLIBC: 2.27
- GCC: 8.3.0 (GLIBCXX 3.4.25まで)
結論
「GLIBC_2.28 not found」エラーの解決には、以下のいずれかの方法を推奨します:
- 簡単な解決: Node.js 16へのダウングレード
- 恒久的な解決: Ubuntu 20.04以降へのアップグレード
- 分離環境: Dockerコンテナの利用
プロジェクトの要件や環境に応じて最適な解決策を選択してください。新しいプロジェクトでは、互換性問題を避けるためにサポートされているOSとNode.js LTSバージョンの使用をお勧めします。