RaspberryPi 2にNodejs をインストール

最近、RaspberryPi2 に node.js をインストールする必要が出たのですが、CPUがARM、しかもv6（古い）であるためかWebに情報が少なく苦労しました。
同じ苦労をする人が１人でも減れば、と普段助けられている Qiita に初の投稿をしてみようと思います。

まず、ラズパイへのNode.js のインストールには以下の方法があるようです。

| 方法 | 備考／個人的な感想 |
| ---- | ---- |
| 公式スクリプト        | ARMv7, ARMv8（RaspberryPi3以降）が対象|
| バイナリをダウンロード | 公式がコンパイルしたバイナリを利用 |
|  nvm               | 却ってややこしいような？ |
|  apt               | 一番手軽に見えて、実は一番厄介らしい|

色々試しましたが、aptは上手く行かない、nvm は Node.js に不慣れな自分には分かりにくい…。
結果的にはRaspberryPi2、又はzeroには**バイナリをダウンロード**が一番良い方法なように思いましたので、そのまとめの記事です。

# 背景
そもそも、「RaspberryPi4が発売されて何年たったと思ってるんだ」とツッコまれそう…。
4年ほど前の何も分かっていない頃に3B+と間違えて購入したRaspberryPi2（笑）ですが、使用電流量が少ない事が判明して以来、我が家では限界までこき使われている訳です。

我が家のメインサーバーRaspberryPi2
![DSCN3003.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3092759/f24e7bc3-65e1-c75e-1d1b-239d87aaf76a.jpeg)

# 環境
機体：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が１つもなかったので、なんとなくLTSのある v10系最後の[10.24.1](https://nodejs.org/download/release/v10.24.1/node-v10.24.1-linux-armv6l.tar.xz)を選ぶ事にしました。

ちなみにRaspberryPiのARMバージョンは以下のコマンド（どちらでも）確認可能なようです。
```bash
# [ terminal ]
cat /proc/version
uname -a
```



# インストール

ダウンロードからインストールまでの手順。
ホームディレクトリ（/home/pi/など）で実行しているものとをします。

```bash
# [ 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/
```

:::note 
補足１：
インストールのディレクトリ構成は以下のような感じにする必要があるようです。上記「公式スクリプト」によるインストール状況を参考にしました。
>target_dir/bin
├ node
├ npm
:::


:::note
補足２
配置先を/usr/local/にした理由は、上記「公式スクリプト」での配置先であった事、また/usr/local/bin は環境変数PATHに予め登録されている場所だったので都合が良かったのです。
:::

参考：各方式ごとのインストール先
| nodeの配置先 | 参考元 |
| --- | --- |
|/usr/local/bin/ | 公式スクリプト |
| ~/.nvm/versions/node/{ver}/bin/ | nvmでのインストール |
| /usr/bin/ | aptでのインストール |

# ラズパイの起動時のforever

上記手順でインストールが上手く行った！　と、思ったのも束の間、ラズパイの起動時に `forever start app.js` を実行したかったのですが、これに結構手こずりました…。

こんな感じにしたかった

```bash
# 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
```


あとは実行と自動起動設定
```bash
#[ terminal ]
sudo systemctl start foreversample
sudo systemctl enable foreversample
```

これで無事に動作させる事が出来ました！！


# 公式スクリプト
ついでに公式スクリプトを用いた方法も備忘録的に残したいと思います。
こちらはRaspberryPi3B+ にてインストール成功しました。

```bash
#[ terminal ]
curl -sL https://deb.nodesource.com/setup_18.x | bash -
$ sudo apt install -y nodejs
```

公式Github

https://github.com/nodesource/distributions/blob/master/README.md

# 最後に
Webの情報を見ると、RaspberryPi へのNode.jsのインストールは苦労している方が多いようです。今までQiitaの記事に助けられてきましたが、この記事が１人でもそんな人の助けになると良いな、と思います。



# 参考にしたサイト

公式バイナリを利用したNode.jsのインストール

https://zenn.dev/tmitsuoka0423/articles/nodejs-raspberry-pi-setup

https://qiita.com/mininobu/items/c07f59a8210e8c71280e


公式スクリプトを使ったNode.jsのインストール

https://www.ultra-noob.com/blog/2020/164/#結論サクッとインストールするなら

起動時のforever の実行

https://qiita.com/fernet/items/2bce98291b05a9d30386