最近、RaspberryPi2 に node.js をインストールする必要が出たのですが、CPUがARM、しかもv6(古い)であるためかWebに情報が少なく苦労しました。
同じ苦労をする人が1人でも減れば、と普段助けられている Qiita に初の投稿をしてみようと思います。
まず、ラズパイへのNode.js のインストールには以下の方法があるようです。
方法 | 備考/個人的な感想 |
---|---|
公式スクリプト | ARMv7, ARMv8(RaspberryPi3以降)が対象 |
バイナリをダウンロード | 公式がコンパイルしたバイナリを利用 |
nvm | 却ってややこしいような? |
apt | 一番手軽に見えて、実は一番厄介らしい |
色々試しましたが、aptは上手く行かない、nvm は Node.js に不慣れな自分には分かりにくい…。
結果的にはRaspberryPi2、又はzeroにはバイナリをダウンロードが一番良い方法なように思いましたので、そのまとめの記事です。
背景
そもそも、「RaspberryPi4が発売されて何年たったと思ってるんだ」とツッコまれそう…。
4年ほど前の何も分かっていない頃に3B+と間違えて購入したRaspberryPi2(笑)ですが、使用電流量が少ない事が判明して以来、我が家では限界までこき使われている訳です。
環境
機体:Raspberry Pi Model B Plus Rev 1.2(armv6l)
( cat /proc/cpuinfo | grep Model
の結果)
OS: Raspbian GNU/Linux 10 (buster)Release: 10
( lsb_release -a
の結果抜粋)
Node.jsのバージョンを選ぶ
まずはARMv6に対応したNode.jsのバージョンを公式サイトから調べました。
メジャーバージョンごとに「download」をクリックし「linux-armv6l」の表記(リンク)があるか確認しました。
https://nodejs.org/ja/download/releases/
↓
https://nodejs.org/en/about/previous-releases (2024-01-07 ついき)
どうやら v11系がARMv6に対応した最後のバージョンらしいのですが、LTSが1つもなかったので、なんとなくLTSのある v10系最後の10.24.1を選ぶ事にしました。
ちなみにRaspberryPiのARMバージョンは以下のコマンド(どちらでも)確認可能なようです。
# [ terminal ]
cat /proc/version
uname -a
インストール
ダウンロードからインストールまでの手順。
ホームディレクトリ(/home/pi/など)で実行しているものとをします。
# [ terminal ]
# ダウンロード URLは先程のサイトで調べてコピーします。
wget https://nodejs.org/download/release/v10.24.1/node-v10.24.1-linux-armv6l.tar.xz
# 展開
tar xJvf node-v10.24.1-linux-armv6l.tar.xz
# 展開されたファイルを全てコピー
sudo cp -r node-v10.24.1-linux-armv6l/* /usr/local/
# 下記コマンドが成功したらOK
node -v
npm -v
# 不要なファイルを削除しておく(任意)
rm node-v10.24.1-linux-armv6l.tar.xz
rm -r node-v10.24.1-linux-armv6l/
補足1:
インストールのディレクトリ構成は以下のような感じにする必要があるようです。上記「公式スクリプト」によるインストール状況を参考にしました。
target_dir/bin
├ node
├ npm
補足2
配置先を/usr/local/にした理由は、上記「公式スクリプト」での配置先であった事、また/usr/local/bin は環境変数PATHに予め登録されている場所だったので都合が良かったのです。
参考:各方式ごとのインストール先
nodeの配置先 | 参考元 |
---|---|
/usr/local/bin/ | 公式スクリプト |
~/.nvm/versions/node/{ver}/bin/ | nvmでのインストール |
/usr/bin/ | aptでのインストール |
ラズパイの起動時のforever
上記手順でインストールが上手く行った! と、思ったのも束の間、ラズパイの起動時に forever start app.js
を実行したかったのですが、これに結構手こずりました…。
こんな感じにしたかった
# crontab -e
@reboot forever start /home/pi/sample/app.js
~/.profile でもダメ。systemd のサービス化も上手く行かず…。
途方に暮れていたら、Webの情報で systemdでforever start app.js
を実行するのでは無く、systemd で直接 app.jsを実行すると良いとあったのでやってみました。
[ Unitファイルの例 ]
# /etc/systemd/system/foreversample.service
[Unit]
Description=sample service for Node.js forever
[Service]
Type=simple
User=pi
ExecStart=node /home/pi/sample/app.js
[Install]
WantedBy=multi-user.target
あとは実行と自動起動設定
#[ terminal ]
sudo systemctl start foreversample
sudo systemctl enable foreversample
これで無事に動作させる事が出来ました!!
公式スクリプト
ついでに公式スクリプトを用いた方法も備忘録的に残したいと思います。
こちらはRaspberryPi3B+ にてインストール成功しました。
#[ terminal ]
curl -sL https://deb.nodesource.com/setup_18.x | bash -
$ sudo apt install -y nodejs
公式Github
最後に
Webの情報を見ると、RaspberryPi へのNode.jsのインストールは苦労している方が多いようです。今までQiitaの記事に助けられてきましたが、この記事が1人でもそんな人の助けになると良いな、と思います。
参考にしたサイト
公式バイナリを利用したNode.jsのインストール
公式スクリプトを使ったNode.jsのインストール
起動時のforever の実行