ARMマシンでNode.js

Node.jsを使ってのアプリの書き方に少し慣れてきたので、最終的なターゲットであるARMマシンでも動かしてみようかと思ったら、少しハマッた。

nvmを使ってインストール

x86マシンと同様に、単純に nvm installすればインストールはされる。一応、安定版と呼ばれているv0.10.xの最新版を入れることにする。

# nvm install v0.10.16

"バイナリが無いからソースからインストールするよ"的なメッセージが表示され、Node.js自体のコンパイルが始まる。

 

コンパイル自身は特に問題なく終了し、nodeコマンドがインストールされるが、実行しようとすると、Segmentation fault で落ちてしまう。どうも、v0.10.xはARMマシンではうまく動かないらしい。ちなみに、試した環境は Debian wheezy armhf 環境。

pcDuino Segmentation fault · Issue #4946 · joyent/node · GitHub

↑のリンク先では、v.0.11.2-preだと動くよと書いてある気がするので、v0.11.xの最新版v0.11.6で試してみたら、うまく動いてくれた。

ちょっと気になったRaspberry Pi対応

nvmでは、Raspberry Pi用のバイナリが用意されているらしく、Ras Piの場合はそれをインストールしようとする。ただ、その判定処理がちょっとイケてない。

 

~/nvm/nvm.shの一部

  # Try to figure out the os and arch for binary fetching

  local uname="$(uname -a)"

  local os=

  local arch="$(uname -m)"

  case "$uname" in

    Linux\ *) os=linux ;;

    Darwin\ *) os=darwin ;;

    SunOS\ *) os=sunos ;;

    FreeBSD\ *) os=freebsd ;;

  esac

  case "$uname" in

    *x86_64*) arch=x64 ;;

    *i*86*) arch=x86 ;;

    *armv6l*) arch=arm-pi ;;

  esac

 

この処理だと、ARM11等armv6アーキテクチャのCPUを積んでるボードはRas Piだと誤認識されるんじゃないかな。せめて、uname -nで判別すればいいのに。と思ったが、v0.10.xやv0.11.xはそもそもRas Pi用のバイナリが用意されてないようなので、結局ソースから入れることになるので、あんまり関係ないなと思ったり。