RaspberryPI に Hubot を入れてみる (その1)

Hubot とやらを最近知りました。これいいかも。
https://hubot.github.com/


ちょっと試してみたいなと思ったら
目の前にRasberryPIがあるじゃないですか。

RasberryPI 最近触っていなかったんですが、
Hubotをインストールしてロボット化してみることにしてみました。

■Node.js install
参考
http://yattemita-log.hateblo.jp/entry/nodejs-express-coffee

# apt-get install python-software-properties
# add-apt-repository ppa:chris-lea/node.js
# apt-get update
# apt-get install nodejs
# apt-get install npm

$ nodejs -v
v0.6.19

$ npm -v
1.1.4

微妙にバージョンが低いですが、とりあえず無視して行ってみます。

■hubot install

# npm install hubot
npm http GET https://registry.npmjs.org/hubot

npm ERR! Error: failed to fetch from registry: hubot
npm ERR!     at /usr/share/npm/lib/utils/npm-registry-client/get.js:139:12
npm ERR!     at cb (/usr/share/npm/lib/utils/npm-registry-client/request.js:31:9)
npm ERR!     at Request._callback (/usr/share/npm/lib/utils/npm-registry-client/request.js:136:18)
npm ERR!     at Request.callback (/usr/lib/nodejs/request/main.js:119:22)
npm ERR!     at Request.<anonymous> (/usr/lib/nodejs/request/main.js:212:58)
npm ERR!     at Request.emit (events.js:88:20)
npm ERR!     at ClientRequest.<anonymous> (/usr/lib/nodejs/request/main.js:412:12)
npm ERR!     at ClientRequest.g (events.js:156:14)
npm ERR!     at ClientRequest.emit (events.js:67:17)
npm ERR!     at HTTPParser.parserOnIncomingClient [as onIncoming] (http.js:1256:7)
npm ERR! You may report this log at:
npm ERR!     <http://bugs.debian.org/npm>
npm ERR! or use
npm ERR!     reportbug --attach /root/whisper/npm-debug.log npm
npm ERR!
npm ERR! System Linux 3.12.28+
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" "hubot"
npm ERR! cwd /root/whisper
npm ERR! node -v v0.6.19
npm ERR! npm -v 1.1.4アpt−ゲt
npm ERR! message failed to fetch from registry: hubot
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /root/whisper/npm-debug.log
npm not ok

あらら失敗。

■解決策を探す
http://stackoverflow.com/questions/21359456/npm-installation-error

# npm config set registry http://registry.npmjs.org/


■再度インストール

# npm install hubot
# npm install coffee-script

ホームディレクトリ配下に以下ディレクトリが作られました。
node_modules/huboot
node_modules/coffee-script

■うまくいったようなので起動してみる

# cd node_modules/hubot
# bun/hubot
/usr/bin/env: coffee: そのようなファイルやディレクトリはありません

またもや失敗。

■再度解決策を。
http://bokukoko.hatenablog.com/entries/2012/11/11

# /usr/sbin/visudo
Defaults !env_reset

# coffee-script/bin/coffee -v
/usr/bin/env: node: そのようなファイルやディレクトリはありません

うぬぬ。だめだぞ。
※nanoエディタとか初めて。かなり迷った。Ctl+x で q なのね。。。

■仕切り直し。
Node.jsのバージョンが低すぎるのが問題なのかな?
以下のサイトを調べてみるとどうもNode.jsはほかにも簡単にインストールできる方法があるらしい

参考
http://shokai.org/blog/archives/8583

node.js のサイトを確認してみたところ、最新はv0.10.35
ビルド済みのアーカイブは最新のものは無いみたい。

どうせ暇だし。ソースからビルドすることにしよう。

■ごみの片づけ
いままで散らかした分をお掃除

# npm remove hubot
# npm remove coffee-script
# apt-get autoremove nodejs
# apt-get --purge remove nodejs-dev

■nodejsビルド
参考
http://d.hatena.ne.jp/C_6B4A2B/20130321/1363801633

# cd /usr/local/src 
# wget http://nodejs.org/dist/v0.10.35/node-v0.10.35.tar.gz
# tar zxvf node-v0.10.35.tar.gz
# cd node-v0.10.35
# ./configure --prefix=/usr/local/node-v0.10.35
{ 'target_defaults': { 'cflags': [],
                       'default_configuration': 'Release',
                       'defines': [],
                       'include_dirs': [],
                       'libraries': []},
  'variables': { 'arm_fpu': 'vfpv2',
                 'arm_neon': 0,
                 'armv7': 0,
                 'clang': 0,
                 'gcc_version': 46,
                 'host_arch': 'arm',
                 'node_install_npm': 'true',
                 'node_prefix': '/usr/local/node-v0.10.35',
                 'node_shared_cares': 'false',
                 'node_shared_http_parser': 'false',
                 'node_shared_libuv': 'false',
                 'node_shared_openssl': 'false',
                 'node_shared_v8': 'false',
                 'node_shared_zlib': 'false',
                 'node_tag': '',
                 'node_unsafe_optimizations': 0,
                 'node_use_dtrace': 'false',
                 'node_use_etw': 'false',
                 'node_use_openssl': 'true',
                 'node_use_perfctr': 'false',
                 'node_use_systemtap': 'false',
                 'openssl_no_asm': 0,
                 'python': '/usr/bin/python',
                 'target_arch': 'arm',
                 'v8_enable_gdbjit': 0,
                 'v8_no_strict_aliasing': 1,
                 'v8_use_arm_eabi_hardfloat': 'true',
                 'v8_use_snapshot': 'true',
                 'want_separate_host_toolset': 0}}
creating  ./config.gypi
creating  ./config.mk

# make && make install

# cd /usr/local
# ln -s node-v0.10.35 node
# echo '# node.js' >> /etc/bash.bashrc
# echo 'NODEJS_HOME=/usr/local/node' >> /etc/bash.bashrc
# echo 'export PATH=$PATH:$NODEJS_HOME/bin' >> /etc/bash.bashrc
# source /etc/bash.bashrc
# node -v
v0.10.35

やった!成功!

ビルドに2、3時間程度かかりましたがインストールまで成功しました。
Debian系はbashrc じゃなくて bash.bashrcなのね。。。

■(番外)ソースからビルドした場合、どうやって消すの?
参考
http://futuremix.org/2009/01/configure-make-uninstall

 $ make -n install
 とすれば、実際のインストールは行なわずにファイルがどこにインストールされるかを表示してくれます。

やべ、make install の前に make -n install してなかった orz
nodejs の configure は uninstall サポートしてるのかな。。。

 $ ./configure --prefix=/usr/local/hoge/
 このようにすれば、そのディレクトリ下に展開されますので、あとで消すときに比較的楽です。
 ただし使う場合はシンボリックリンクを張るなどの工夫をしないと使いづらいのと、
 消すときにシンボリックリンクも忘れずに消す必要があります。

なるほど!
/usr/local/hogehoge 配下にビルドしたプロダクトを集めて
一括で管理するんですねぇ。
先人達の知恵に感謝。




続く。かな?