🌟

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を採用している事が多く、その他の業者でも同様の状況はあると思います。

この記事で行うこと

https://github.com/nodejs/node/blob/main/BUILDING.md#platform-list

現在のNode.js LTSは、ビルドに必要なglibcの要求が2.28以上になってしまったので、本来ならglibcの更新が必要になります。

ただ、rootなしでこういったライブラリを更新するのは大変面倒なので、nodejsだけ新しいバイナリをダウンロードします。

https://github.com/nodejs/unofficial-builds/pull/69

https://unofficial-builds.nodejs.org/download/release/

幸い、glibc 2.17しかない環境でも動く非公式ビルドがあります。該当ビルドは、ファイル末尾のアーキテクチャ部分が linux-x64-glibc-217 となっています。

nvmのオプションについて

今回は簡単に改造できるnvmを使用します。

https://github.com/nvm-sh/nvm?tab=readme-ov-file#use-a-mirror-of-node-binaries

nvmは NVM_NODEJS_ORG_MIRROR 変数を与えるとミラーサーバーを指定できます。

https://unofficial-builds.nodejs.org/download/release/v22.20.0/

ただ、nvm 0.40.3 時点ではダウンロードするファイル名を指定できないので、非公式ビルドのうちlinux-x64を探してしまいます。そこで、今回は nvm.shを直接編集して改造します。

nvmの改造

https://github.com/nvm-sh/nvm/blob/v0.40.3/nvm.sh#L2373-L2380

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