DragonBoard 410c(Debian)でNode.jsとPhantom.jsを使えるようにする

DragonBoard 410c(Debian)でNode.jsとPhantom.jsを使えるようにする

※ 結論をお急ぎの方は「まとめ」まで読み飛ばしてください。

先日、「DragonBoard+IoTアプリコンテスト meet up!」というイベントに参加してきました。

algyan.connpass.com

f:id:ueponx:20170521105631j:plain

DragonBoard410cはAndroidLinux、Windows10IoTCoreが動作する素敵系ボードというとだったので、ぜひ触ってみたいと思いました。ハンズオンでは各OSの動作を確認でき、作品制作・発表は必須ということでしたが、ボードがいただけることだったので大満足のイベントです。

f:id:ueponx:20170521105710j:plain

f:id:ueponx:20170521105722j:plain

f:id:ueponx:20170521105729j:plain

自分も、最近はRaspberryPiばかりだったので、いままで作っていたものを移植してみたいなと思っていたのでいい機会でした。

家に持ち帰り、Debianをインストールしようとすると最新版(2017.05.12)が出ているということでしたので17.04をダンロードし、SDカードに書き込んでインストールしました。インストール手順は以下のリンクでOK

Documentation - 96Boards

インストールが完了するとXが起動します。ダウンロード、SDカード作成、インストールまでいれても30分程度で完了するお手軽さがあります。

ネットワーク(WiFi)、キーボード、ロケールタイムゾーンなどを設定すればほぼLinuxとして使えます。

パッケージマネージャーはaptなので定番のコマンドを打ち込みます。

$ sudo apt-get update
$ sudo apt-get upgrade

これで一応OKかと思います。

自分が使いたいのはNode.jsとPhantom.jsなので確認をしてみます。Node.jsは4系がすでにインストールされていたので、少し古いですが、Raspbianにのデフォルト比べればよっぽどいいかとおもいますので、このままにしました。ただ、nodeコマンドではなく、nodejsコマンドになっているので注意(Debianでは恒例?)なのと、npmコマンドはないので新規で入れる必要があります。ただ、apt-get経由ではインストールされないようです。(なぜ?)

以上の点を踏まえて、作業を行います。

$ sudo apt-get install -y nodejs nodejs-legacy
$ wget http://www.npmjs.org/install.sh --no-check-certificate
$ sudo sh install.sh

簡単に説明をすると…

$ sudo apt-get install -y nodejs nodejs-legacy

nodejsコマンドをnodeに変更する処理を行うものです。(Debian系あるあるらしい。)

$ wget http://www.npmjs.org/install.sh --no-check-certificate
$ sudo sh install.sh

こちらの2行で、手動でnpmをインストールします。インストールのshをダウンロードして、実行することになります。

あとは、Phantom.jsのインストールになります。Node.jsのバージョンが微妙かなとなんとなく思い、npmでインストールしようかなと思って以下のように打ち込むと

$ sudo npm install -g phantomjs

エラー発生

ではということで以下を参考に

Build | PhantomJS

ソースからインストールしてみようとしてみたのですが、

$ sudo apt-get install build-essential g++ flex bison gperf ruby perl libsqlite3-dev libfontconfig1-dev libicu-dev libfreetype6 libssl-dev libpng-dev libjpeg-dev python libx11-dev libxext-dev
$ git clone git://github.com/ariya/phantomjs.git
$ cd phantomjs
$ git checkout 2.1.1
$ git submodule init
$ git submodule update
$ python build.py

ビルドをしていると何故か、コンソールが落ちるという現象が発生。(teratermで接続して作業を行っていました。)何回やっても同じ状況になってしまうので、無理ゲーあるいは、負け確定イベントバトルなのかと思っていたら、どうもビルドが落ちているのではなく、OSが数分に一度リブートしている動きをしていました。その後、OSは起動して、数分経つとリブートするループへ。\(^o^)/オワタ

ここまで2日ほど費やしてしまったのですが、aptでパッケージってなかったか?ということを思い出し、試しにやってみました。

$ sudo apt-get install -y phantomjs

あるじゃん。/(^o^)\ナンテコッタイ

とりあえず、数分ごとにリブートはしますが、短時間ならなんとかなる!(無理ゲー臭が漂いますが、なんだかウルトラマンみたいで燃えるシチュエーションだなと思ってきた)

phantom.jsも無事インストールできたので実行してみます。

$ phantomjs
QXcbConnection: Could not connect to display 
PhantomJS has crashed. Please read the bug reporting guide at
<http://phantomjs.org/bug-reporting.html> and file a bug report.
Aborted (core dumped)

んが、core dump。\(^o^)/オワタ

気を取り直して、エラーメッセージを確認します。QXcbConnection: Could not connect to displayとなっているのでdisplay関係のエラー、もしかしたらと思って、X側のコンソールで

$ phantomjs --version
2.1.1
$ phantomjs 
phantomjs>

対話側コンソールが無事に起動しました。原因は(teratermなどの)リモートターミナルで起動していたためのようです。とはいっても、コンソールから動かせないと電子工作系では厳しいことが多いのでなんとかしたいところです。

そこでエラーメッセージからググってみると こんなissuesページがGithubにありました。

github.com

I was able to get phantomjs to start working again by installing xvfb and creating the following script in /etc/profile.d/aliases.sh to ensure the alias takes effect system-wide:

なんとなくxvfbが必要のような記述です。xvfbは仮想フレームバッファのようなので、コンソールからこれを使えば仮想的にディスプレイと接続した状況になるようです。 このissuesの解決方法をつかうことにしました。

$ sudo apt-get install -y xvfb
$ sudo vi /etc/profile.d/aliases.sh

【/etc/profile.d/aliases.sh】を編集

#!/bin/bash
alias phantomjs="xvfb-run phantomjs"
$ source /etc/profile

この作業を簡単にいうと、ログイン時のデフォルトのalias設定にphantomjs="xvfb-run phantomjs"を追加し、設定を読み直したということになります。

phantomjsコマンドのAliasを、phantomjsを起動時に事前にxvfbを起動するというものにしています。

$ /usr/bin/phantomjs
/usr/bin/phantomjs 
QXcbConnection: Could not connect to display 
PhantomJS has crashed. Please read the bug reporting guide at
<http://phantomjs.org/bug-reporting.html> and file a bug report.
Aborted (core dumped)

$ phantomjs --version
2.1.1
$ phantomjs 
phantomjs>

前半部はalias経由しないで実行した場合、後半はalias経由で起動した場合。コンソールでも無事に動作できました。

まとめ

手順1: パッケージインストー

npmがインストールされていない場合

$ sudo apt-get install -y nodejs nodejs-legacy
$ wget http://www.npmjs.org/install.sh --no-check-certificate
$ sudo sh install.sh
$ sudo apt-get install -y xvfb phantomjs

npmがインストールされている場合

$ sudo apt-get install -y nodejs nodejs-legacy
$ sudo apt-get install -y xvfb phantomjs

手順2: phantomjsの設定変更

$ sudo vi /etc/profile.d/aliases.sh

【/etc/profile.d/aliases.sh】を編集し保存

#!/bin/bash
alias phantomjs="xvfb-run phantomjs"
$ source /etc/profile

終わりに

一応、DragonBoard 410cの環境にもNode.jsとPhantom.jsが動作するようになりました。でも、Debianが再起動するのは直ってません。これからどうすれば…。

/* -----codeの行番号----- */