ARMv6のRaspberry Pi(Gen1, Zero)でも最新版のNode.jsが使いたい! ~nを使って入れてみる~
Raspberry Pi Zeroは安価にコンパクトなRaspberry Piの環境を手に入れることができ、大変重宝します。しかし、最新のRaspberry Pi(Raspberry Pi 3から、ARMv8/arm64です)と比べてアーキテクチャのバージョンがARMv6と古く、Node.jsのメインサポートから外れてしまっています。
ARMv7までしかダウンロードページに存在しない
ARMv6で最も新しくダウンロードできるのは、2021/04/25現在v10.24.1
のようです。ちゃんとセキュリティパッチは当たっているようですが、v10のEOLは今月で終わりですし、機能面の意味を考えても、極力新しいバージョンを使っていきたいですよね。
「メインサポート」とわざわざ明記したのは...そうです。非公式で実験的なプロジェクトとしてビルドされた成果物が https://unofficial-builds.nodejs.org/ にてホストされており、これを使うことができます! このプロジェクトで扱っているアーキテクチャでビルドできなかったり、テストが通らなかったとしても、Node.js本体のリリースのブロッカーにはならない扱いになるのが特徴です。(なお、コントリビューションは受け付けているようです)
普通にインストールしてもよいのですが、今回はtj/n
を使ってこの非公式ビルドをインストールしてみたいと思います。
tj/n - Node version management
n
は Node.jsのバージョン管理ツールです。他にもasdf-vm
やnodenv
、nvm
などあると思いますが、今回はn
を利用します。(他のツールでも同様のことができるのかは知らないので、知っている人は教えてください。)
カスタムソース機能を活用する
n
には異なるホストサーバーからNode.jsのリソースを取得できる機能があります。
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
あたりに設定を書いてしまいます。
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版を入れる
以上です。
参考文献リスト
-
node/BUILDING.md at master · nodejs/node
- nodeがサポートしているプラットフォームのリストがあります
-
RFC: Consider retiring the PI1s ARMv6 (downgrading support to "experimental") · Issue #1677 · nodejs/build
- ARMv6のサポートを廃止にしたい、という流れになりそうでしたが、コミュニティのフィードバックによって非公式でも実験的なサポートに落ち着いたという、素敵なIssueです
-
Node.js Unofficial Builds Project
- 今回紹介した非公式ビルドプロジェクトのWebサイトです
-
tj/n: Node version management #Custom Source
-
tj/n
のCustom Source機能について紹介しているセクションへのリンクです
-
Discussion