the glue

やってみたことで忘れそうなこと、役立ちそうなことなどをまとめています。たまに何気ない日常の話もします。

Raspberry Pi に node.js をインストールする

経緯

タイトル通りですが、Raspberry Pi(Raspbian)にnode.jsをインストールするときに結構面倒くさかったのでメモ。
nodebrewでバイナリをインストールする記事を書きましたが、ARMv7向けにビルドされているようで、ARMv6であるRaspberry Pi Model B+以前では使えませんでした。修正
nodebrewでソースからビルドすると--without-snapshotオプションをつけるのが面倒くさいので、結局自分でビルドします。
と、思ったのですが、自分でビルドしても状況が全く変わらなかったので、v0.12.0のraspberry pi向けビルド済みバイナリを拾ってきて入れてしまいました。

こんな感じで頑張ったけどダメだった

$ nodebrew install-binary v0.11.10
$ nodebrew use v0.11.10
$ node -v
v0.11.10
# よしnodejs動いてるぞ!

$ node
zsh: illegal hardware instruction  node
# あれ?

$ npm
zsh: illegal hardware instruction  npm
# あれ???

$ node --v8-options | grep ARM
ARMv7=1 VFP3=0 VFP32DREGS=0 NEON=0 SUDIV=0 UNALIGNED_ACCESSES=1 MOVW_MOVT_IMMEDIATE_LOADS=0 USE_EABI_HARDFLOAT=1
  --enable_armv7 (enable use of ARMv7 instructions if available (ARM only))
  --enable_neon (enable use of NEON instructions if available (ARM only))
  --enable_sudiv (enable use of SDIV and UDIV instructions if available (ARM only))
  --enable_movw_movt (enable loading 32-bit constant by means of movw/movt instruction pairs (ARM only))
  --enable_unaligned_accesses (enable unaligned accesses for ARMv7 (ARM only))
  --enable_32dregs (enable use of d16-d31 registers on ARM - this requires VFP3)
  --enable_vldr_imm (enable use of constant pools for double immediate (ARM only))
  --check_icache (Check icache flushes in ARM and MIPS simulator)
# ARMv7=1...? オイ!!!!

$ cat /proc/cpuinfo
processor       : 0
model name      : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 2.00
Features        : half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : BCM2708
Revision        : 000d
Serial          : 00000000c3b79743
# (*^^*)

# よーしビルドだー
$ wget https://nodejs.org/dist/v0.12.7/node-v0.12.7.tar.gz
$ tar zxf node-v0.12.7.tar.gz
$ cd node-v0.12.7
$ ./configure --without-snapshot
$ make && sudo make install
$ node -v
v0.12.7
$ node
zsh: illegal hardware instruction  node
# !!!!!!

結局こうした

conoroneill.net

$ wget https://s3-eu-west-1.amazonaws.com/conoroneill.net/wp-content/uploads/2015/02/node-v0.12.0-linux-arm-pi.tar.gz
$ tar -zxvf node-v0.12.0-linux-arm-pi.tar.gz
$ cd node-v0.12.0-linux-arm-pi
$ sudo cp -R * /usr/local/

$ node -v
v0.12.0
$ npm -v
2.5.1

参考

https://www.raspberrypi.org/forums/viewtopic.php?f=33&t=102074

github.com

raspberrypi.stackexchange.com