🥧

ARMv6のRaspberry Pi(Gen1, Zero)でも最新版のNode.jsが使いたい! ~nを使って入れてみる~

2021/04/25に公開

Raspberry Pi Zeroは安価にコンパクトなRaspberry Piの環境を手に入れることができ、大変重宝します。しかし、最新のRaspberry Pi(Raspberry Pi 3から、ARMv8/arm64です)と比べてアーキテクチャのバージョンがARMv6と古く、Node.jsのメインサポートから外れてしまっています。

ARMv7までしかダウンロードページに存在しない様子
ARMv7までしかダウンロードページに存在しない

ARMv6で最も新しくダウンロードできるのは、2021/04/25現在v10.24.1のようです。ちゃんとセキュリティパッチは当たっているようですが、v10のEOLは今月で終わりですし、機能面の意味を考えても、極力新しいバージョンを使っていきたいですよね。

https://nodejs.org/en/blog/release/v10.24.1/

「メインサポート」とわざわざ明記したのは...そうです。非公式で実験的なプロジェクトとしてビルドされた成果物が https://unofficial-builds.nodejs.org/ にてホストされており、これを使うことができます! このプロジェクトで扱っているアーキテクチャでビルドできなかったり、テストが通らなかったとしても、Node.js本体のリリースのブロッカーにはならない扱いになるのが特徴です。(なお、コントリビューションは受け付けているようです)

普通にインストールしてもよいのですが、今回はtj/nを使ってこの非公式ビルドをインストールしてみたいと思います。

tj/n - Node version management

n は Node.jsのバージョン管理ツールです。他にもasdf-vmnodenvnvmなどあると思いますが、今回はnを利用します。(他のツールでも同様のことができるのかは知らないので、知っている人は教えてください。)

カスタムソース機能を活用する

nには異なるホストサーバーからNode.jsのリソースを取得できる機能があります。

https://github.com/tj/n#custom-source

N_NODE_MIRRORにhttps://nodejs.org/dist/ と同じようなレイアウトのURLを渡せばよいので、次のように使います。

$ N_NODE_MIRROR=https://unofficial-builds.nodejs.org/download/release/ n ls-remote
Listing remote... Displaying 20 matches (use --all to see all).
15.14.0
15.13.0
15.12.0
15.11.0
15.10.0
15.9.0
15.8.0
15.7.0
15.6.0
15.5.1
15.5.0
15.4.0
15.3.0
15.2.1
15.2.0
15.1.0
15.0.1
15.0.0
14.16.1
14.16.0

この記事を書いている2021/04/25現在、v16.0.0はまだビルドできていないようですね。v16.0.0のディレクトリはあるのですが、armv6のビルド成果物が存在しませんでした。

いちいち N_NODE_MIRROR=https://unofficial-builds.nodejs.org/download/release/ を書くのは面倒なので、 .bashrc あたりに設定を書いてしまいます。

.bashrc
export N_NODE_MIRROR=https://unofficial-builds.nodejs.org/download/release/ # 追加
export N_PREFIX="$HOME/.n"; [[ :$PATH: == *":$N_PREFIX/bin:"* ]] || PATH+=":$N_PREFIX/bin"  # Added by n-install (see http://git.io/n-install-repo).

設定したあとは、 . ~/.bashrc など実施して、再読み込みするのを忘れないようにしてください。

このあとは、好きなコマンドを打ってNode.jsをインストールします。

$ n lts # LTS版を入れる

以上です。

参考文献リスト

Discussion