🌟
glibc 2.17の古いサーバーでNode22以上を使う方法 (nvm)
この記事の対象となるサーバーの環境
CentOSを想定しています。このようにglibcバージョンを検証してください。
$ yum list installed | grep glibc
Failed to set locale, defaulting to C
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
glibc.x86_64 2.17-326.el7_9 @updates
glibc-common.x86_64 2.17-326.el7_9 @updates
glibc-devel.x86_64 2.17-326.el7_9 @updates
glibc-headers.x86_64 2.17-326.el7_9 @updates
上記のようにglibc 2.17が表示される場合、エックスサーバーなら2024年6月4日以前の旧環境です。
レンタルサーバーはCentOSを採用している事が多く、その他の業者でも同様の状況はあると思います。
この記事で行うこと
現在のNode.js LTSは、ビルドに必要なglibcの要求が2.28以上になってしまったので、本来ならglibcの更新が必要になります。
ただ、rootなしでこういったライブラリを更新するのは大変面倒なので、nodejsだけ新しいバイナリをダウンロードします。
幸い、glibc 2.17しかない環境でも動く非公式ビルドがあります。該当ビルドは、ファイル末尾のアーキテクチャ部分が linux-x64-glibc-217 となっています。
nvmのオプションについて
今回は簡単に改造できるnvmを使用します。
nvmは NVM_NODEJS_ORG_MIRROR 変数を与えるとミラーサーバーを指定できます。
ただ、nvm 0.40.3 時点ではダウンロードするファイル名を指定できないので、非公式ビルドのうちlinux-x64を探してしまいます。そこで、今回は nvm.shを直接編集して改造します。
nvmの改造
nvm.shを編集し、nvm_get_download_slug 関数の返り値に -glibc-217を無理やりつけてください。vimで行数を指定すると早いです。
vi +2375 ~/.nvm/nvm.sh
- nvm_echo "${FLAVOR}-${VERSION}-${NVM_OS}-${NVM_ARCH}"
+ nvm_echo "${FLAVOR}-${VERSION}-${NVM_OS}-${NVM_ARCH}-glibc-217"
変数を直接編集しないことで、後続の処理に影響が出ないようにしています。
LTSのインストール
nvm.shを編集したら、下記のようにミラーサーバーを指定しつつダウンロードしてください。
NODE_VERSION=v22.20.0
NVM_NODEJS_ORG_MIRROR=https://unofficial-builds.nodejs.org/download/release nvm install $NODE_VERSION
nvm use $NODE_VERSION
更新履歴
- 2025/07/07 エックスサーバーの新環境について追記、nvm0.40.3に更新
- 2025/10/04 ダウンロード例をv22.20.0に変更
Discussion