0
0

More than 3 years have passed since last update.

Node.js on Raspberry Pi Zero WHのはまりどころ

Last updated at Posted at 2021-01-24

概要

Raspberry Pi Zero WH上にNode.jsの実行環境を構築しました。
やりたいことはRaspberry Pi Zero上での形態素解析と画像生成です。

しかしRaspberry Pi Zero WHはARMv6コア、RAM512MBと最小限のアーキテクチャです。
リッチなことをやろうとすると一筋縄ではいきません。
色々工夫して何とか実行環境を構築できました。

その時のはまりどころを情報共有します。

Agenda

主に以下3つではまったので、それぞれを説明します。
1. ARMv6コア起因
2. RAM不足起因
3. ライブラリ不足起因

はまったところ

1. ARMv6コアによるnpmエラー

Raspberry Pi ZeroはARMv6コアを実装しています。
v6コアは2000年代前半のアーキテクチャでちょい古です。
なので、

  • apt/apt-getのインストールしてもnpmがエラーを吐く
  • スクリプトを使わず手動でインストールしようにもNode.js公式のTOPではv7以降しか載っていない

よって過去のdistを掘り当てて手動コピーしないといけませんでした。
手順は以下の通り。

$ wget https://nodejs.org/dist/v11.15.0/node-v11.15.0-linux-armv6l.tar.gz
$ tar zxvf node-v11.15.0-linux-armv6l.tar.gz
$ cd [解凍したディレクトリ]
$ rm CHANGELOG.md LICENSE README.md
$ sudo cp -R * /usr/local/
$ node -v
$ npm -v

v11.15.0を選んだのは、現状ARMv6対応してるlatest versionだからです。
(間違ってたら指摘お願いします…!)

2. メモリ不足によるmecab-ipadic-neologdコンパイル失敗

最適な形態素解析を行うため、mecabの新語辞書インストールの必要がありました。
しかしインストール時のコンパイルで2GBのRAMが要求されます。
Raspberry Pi ZeroはRAM512MBですw /(^o^)\

公式にもあるスワップを使用したメモリ拡張で解決しました。手順は以下。
今のところ全く問題なく、MeCabれてます。

$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=2048  # 2GBのスワップ領域を確保
$ sudo chmod 600 /swapfile1                            # パーミッション設定
$ sudo mkswap /swapfile1                               # スワップ領域を作る
$ sudo swapon /swapfile1                               # スワップ領域を有効化
$ ./bin/install-mecab-ipadic-neologd -n                # インストール
$ sudo swapoff /swapfile1                              # スワップ領域を無効化
$ sudo rm /swapfile1                                   # スワップ領域を削除

3. ライブラリ不足によるnode-canvasのコンパイルエラー

自分はRaspberry Pi OS Liteをインストールしました。
初期ライブラリが少ないからなのか、以下の通り色々はまりました。

  • npm install canvas時にcanvas moduleが見つからない
  • アプリ実行時にjsdom(nodeパッケージ)がimageをロードできない的なエラーを吐く

原因は、単にライブラリが足りてないだけでした。
以下ライブラリをインストール後、エラー関連のパッケージを再インストール&ビルドして解決。

$ sudo apt-get install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev libjpeg8-dev libgif-dev g++
$ npm install canvas --build-from-source

さいごに

本記事で実行しているアプリは、もともとherokuのslug size制限で動かせなかったものです。
こんな小さなボードでこれだけのことができることに驚愕です。
ラズパイゼロ最高。オンプレミス最高。

参考記事

  1. https://www.taneyats.com/entry/install-nodejs-on-raspberrypi-zero
  2. https://github.com/Automattic/node-canvas/wiki/Installation%3A-Ubuntu-and-other-Debian-based-systems
  3. https://girliemac.com/blog/2016/06/13/kittycam-update-with-raspberrypi3/
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0