Alpine Linux on WSL2 と nodenv と Node.js

nodenvを使ってAlpine Linux on WSL2にnodeをインストールする方法。

バイナリでは動かない

事前にanyenvのインストールと、anyenv経由でnodenvをインストールしておく。

nodenv install 18.17.1

上記コマンドを実行してnodeをインストールしnode -vを実行してみるものの

/home/username/.anyenv/envs/nodenv/versions/18.17.1/bin/node: fcntl64: symbol not found

このようなエラーになってしまって動かない・・・。

glibcではなくmusl libcを使う

Alpine Linuxはmusl libcを使っているので、glibcコンパイルされたnodeのバイナリは動かないのだった。Alpine Linuxを常用したことがなかったので、今まで気にしたことがなかった。

知見が得られたことはよかったが、ちょっと恥ずかしい。

ソースからコンパイルする

nodenvはソースコードをダウンロードしてコンパイルすることも可能なようだ。ただコンパイルに必要なコンパイラやパッケージがなにも入っていないので、それらを事前にインストールしてからコンパイルを行う。

sudo apk add gcc g++ make linux-headers python3 --no-cache
nodenv install -c 18.17.1

およそ30分ほどかかってコンパイルとインストールが完了する。

node -v
v18.17.1

今度は無事に動く。