エックスサーバー等でNode20を無理やり動かす方法: 非公式ビルド
最終更新: 2023-12-11
-
nvm
0.39.7 -
glibc
2.17 - NodeのLTSが 20.10.0
Node16が死んだ。
エックスサーバーといった、安価な共用レンタルサーバーユーザーにとっては、かなりの痛手である。
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
試しに契約しているエックスサーバーでOSバージョンを調べてみた。自分のマシンではCentOS7になっている。
つまり、上記のサーバーではNode18以降が使えない。というのも、ビルドに必要なglibcの要求が2.28以上になってしまったので、上記のマシンはOSの更新が必要ということである。
と思っていたら、ヒーローが現れ、glibc 2.17しかない環境でも動く非公式ビルドが提供されるようになった。Node18以降の要求はglibbc2.28なのに対し、実際は2.17でもコンパイルできるらしい。
つまり、こちらに列挙されている中で、バージョンの末尾のアーキテクチャ部分が linux-x64-glibc-217
となっているビルドは、CentOS7環境でも動く。当然非公式なので完全な動作の保証はない。
以下自己責任ゾーン
ということで、2023年12月11日時点のLTS node-v20.10.0-linux-x64-glibc-217.tar.xz
を、nvmで入手して、エックスサーバーで動かしてみる。
NVM_NODEJS_ORG_MIRROR=https://unofficial-builds.nodejs.org/download/release
を指定すれば、非公式ビルドにサーバーを変更できる。だが、ここで問題発生。nvm 0.39.7
時点では非公式ビルドのバリエーションなんか知らんので、非公式ビルドのうちlinux-x64
を探してしまい404になる。
そこでnvm.shを直接編集する。 すまんがパッチを作ってる余裕がねえ。誰かがレンタルサーバーのnvmを上書きしない限り永続するという前提。
つまり nvm_get_download_slug
関数の返り値に -glibc-217
を無理やりつける。
vi +2225 ~/.nvm/nvm.sh
- nvm_echo "${FLAVOR}-${VERSION}-${NVM_OS}-${NVM_ARCH}"
+ nvm_echo "${FLAVOR}-${VERSION}-${NVM_OS}-${NVM_ARCH}-glibc-217"
決してARCH変数に手を加えてはいけない。あくまでスラッグ部分だけを編集する。こうすることで、後続の処理に影響が出ないようにする。
source .bash_profile
NVM_NODEJS_ORG_MIRROR=https://unofficial-builds.nodejs.org/download/release nvm install v20.10.0
nvm use v20.10.0
これで使えるはず。
そもそも、マシンに応じて各種非公式ビルドに自動で切り替えるようになったら、めちゃくちゃ楽。
上記のリクエストでは、RISC-V用のビルドを無視してコンパイルしやがるからめんどいと言われている。そこらへんもnvmが判断するようになれば、この記事の手順は不要になる。
更新履歴
- 2023/11/04 master更新されてたのでv0.39.5との比較URL追記
- 2023/12/01 埋め込んだソースコードをv0.39.7に更新
Discussion