DragonBoard 410c(Debian)でNode.jsとPhantom.jsを使えるようにする
※ 結論をお急ぎの方は「まとめ」まで読み飛ばしてください。
先日、「DragonBoard+IoTアプリコンテスト meet up!」というイベントに参加してきました。
DragonBoard410cはAndroid、Linux、Windows10IoTCoreが動作する素敵系ボードというとだったので、ぜひ触ってみたいと思いました。ハンズオンでは各OSの動作を確認でき、作品制作・発表は必須ということでしたが、ボードがいただけることだったので大満足のイベントです。
自分も、最近はRaspberryPiばかりだったので、いままで作っていたものを移植してみたいなと思っていたのでいい機会でした。
家に持ち帰り、Debianをインストールしようとすると最新版(2017.05.12)が出ているということでしたので17.04をダンロードし、SDカードに書き込んでインストールしました。インストール手順は以下のリンクでOK
インストールが完了すると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
エラー発生
ではということで以下を参考に
ソースからインストールしてみようとしてみたのですが、
$ 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にありました。
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が再起動するのは直ってません。これからどうすれば…。