#author("2021-10-30T02:13:50+09:00","ocha","ocha")
#author("2021-10-30T14:40:32+09:00","ocha","ocha")
* Raspberry Piに最新のNode.jsをインストールする方法 [#x93a2b9f]

Raspberry Piに、aptコマンド、

 sudo apt install nodejs

でインストールするとNode.jsのバージョンが古いことがあります。

 node -v

でバージョンがわかります。現時点( 2021/10/19 )ではaptコマンドでVer. 8がインストールされます。
でも、これより新しいNode.jsが要求されることがあります。
例えばHomebridgeを使う場合もそうです。
aptでインストールするバージョンだと、古くて、エラーが出て、Homebridgeをインストールできません。

** aptの設定を変更する方法 (最近のRaspberry Piに有効) [#od2ad20d]

Homebridgeのサイトには、新しいNode.jsをインストールするための準備が書いてあります。

https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Raspbian

他のサイトにも同様の方法が書いてありますが、

 curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -

とすれば、aptでインストールするいつもの方法、

 sudo apt install -y nodejs 

で最新版がインストールできるようです。

** 直接インストールする方法  (古いRaspberry Piでも有効) [#h10b252b]

古いRaspberry Pi (第2世代)でsetup_14.xコマンドを試したところdeb.nodesource.comのコマンドでエラーが出ました。
メッセージによると古いARMのCPUには対応していないらしいです。
その場合、直接インストールすると良いようです。以下のサイトに説明がありました。

https://akirano-blog.com/p/h9xnpdk/

それによると、以下で良いようです。/tmpにダウンロードしていますが、他の場所でも良いと思います。

 cd /tmp
 curl -O https://unofficial-builds.nodejs.org/download/release/v16.13.0/node-v16.13.0-linux-armv6l.tar.gz
 tar xvfz node-v14.18.1-linux-armv6l.tar.gz
 cd node-v14.18.1-linux-armv6l
 rm CHANGELOG.md LICENSE README.md
 sudo cp -R * /usr/local/

ここで、armv6lをダウンロードしているのは、古いRaspberry Piに使われているArm CPUがARMv6だからです。lはリトルエンディアンのlだそうです。シェルコマンドからuname -aすると
ここで、nodeが実行中の場合は、ロックされていて置き換えることができないので、bin/nodeがコピーできなかったというエラーが出ることがあります。
nodeで動いているサーバーがあったら(例えばhomebridge)、

 sudo systemctl stop homebridge.service

のようにして、一時的に停止しておきます。


上で、armv6lをダウンロードしているのは、古いRaspberry Piに使われているArm CPUがARMv6だからです。lはリトルエンディアンのlだそうです。シェルコマンドからuname -aすると

 uname -a
 Linux raspberrypi 4.19.66+ #1253 Thu Aug 15 11:37:30 BST 2019 armv6l GNU/Linux

のように、使用しているCPUがArm V6lであることがわかります。一方、Raspberry Pi 4などでこのコマンドを実行すると、

 uname -a
 Linux pi4 5.10.17-v7l+ #1421 SMP Thu May 27 14:00:13 BST 2021 armv7l GNU/Linux

というように使用しているCPUがArm V7lであることがわかります。実際にはRaspberry Pi 4には、Arm V8が使われているらしいです。V7は32bit CPUでV8は64bit CPUです。でも下位互換性があるので、Raspberry Pi OSではV7として使っているようです。
この方法は、新しいRaspberry Piに対しても有効です。
でも、uname -aしてCPUを確認して、もしもArm V7になっているようならば、

 curl -O  https://builds.nodejs.org/download/release/latest-v16.x/node-v16.13.0-linux-armv7l.tar.gz 

の方が良いかもしれません。なお、arm64という名前のものもあるのですが、これは、64bit Arm V8だと言われるRaspberry Pi 4でも使えませんでした。
これはパソコン用のArmのためのビルトのようです。M1 MacBookAirでなら使えました。
いずれにしても、/usr/local/にコピーする前に、./node -vなどを実行して動作を確認するのが良いです。

14.18.1は、現時点(2021/10/20)でサイトにあるver 14のうちの最新です。
ちなみに偶数バージョンが安定板らしいです。なので次に入れるなら16かな。

**最新nodejsをインストールする(as of 2021/10/28) [#d8274afe]

armv7lのRaspberry Pi OSならば以下で、

 curl -O https://builds.nodejs.org/download/release/latest-v16.x/node-v16.13.0-linux-armv7l.tar.gz 

Intel CPU 搭載のLinux OSならば以下で、

 curl -O https://builds.nodejs.org/download/release/latest-v16.x/node-v16.13.0-linux-x64.tar.gz

Intel CPU 搭載のMacならば以下で、

 curl -O https://builds.nodejs.org/download/release/latest-v16.x/node-v16.13.0-darwin-x64.tar.gz

M1搭載Macならば、以下でダウンロードできます。

 curl -O https://builds.nodejs.org/download/release/latest-v16.x/node-v16.13.0-darwin-arm64.tar.gz

**Homebridgeのこと [#r8d0cccc]

nodejsをあまりに最新版にすると、Homebridgeがエラーを出すことがありました。問題を起こしたnode_modulesのディレクトリに移動して、npm rebuildしたら動きました。

 cd /usr/local/lib/node_modules/npm
 sudo npm rebuild

OSを最新版にしておくのも役に立ちました。

 sudo apt update
 sudo apt upgrade


//npm rebuildの後に、npmを最新版にしろというwarningが出ることもありました。それに従ってアップデートもしました。
//
// sudo npm install -g npm@8.1.2

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS