Raspberry Pi × hubot × Slackでbot運用
家でのうのうと過ごしているラズパイに仕事をさせるため、Hubotいれてみました。
macからssh接続で作業してます。参考にしたのは下記サイト。
www.tapun.net
ラズパイのセットアップ
まずはnpmのアップデートから。
sudo npm install -g npm
続いてnodejsのアップデートのためにnというnodejsのバージョン管理ソフトをインストール。
sudo npm install -g n
そしてnodejsの安定版をインストール。
#安定版インストール n stable #最新版インストール n latest
ここからはhubot関係をインストールします。
yoとgenerator-hubotとcoffee-scriptを入れます。
sudo npm install -g yo generator-hubot coffee-script
続いてbotの作成です。任意の場所にディレクトリを作成し、その中でbotを管理します。
mkdir mybot cd mybot yo hubot
うまく動くと下の画像が表示されます。
色々聞かれるので適当に入力。ただし、Bot adapterは必ずslackと答えること。
ローカルで動作確認のために、mybotディレクトリで以下の入力。
bin/hubot
もしかしたら、nodejsとかnpmとかのバージョンが古い的なことを言われるかもしれません。その場合は上記のアップデートをすれば突破できるはず。
pingとなげればPONGと帰ってこれば正常に動作しています。正常な動作が確認できれば、control+cで一旦hubot終了。次はSlack側の設定です。
Slackの設定
Webでもデスクトップアプリでもどっちでもよいですが、追加したいチームの「Apps&Integrations」をクリック。Slackのページに飛びます。
そこの左側のFeatured>Brilliant Botsをクリック。一番上にHubotが出てきているはずなのでHubotをクリック。
Add ConfigurationボタンをクリックしてBotの情報を入力していきます。Botの名前を入力すると、API Tokenが表示されるのでそれをコピーしておきます。
再びラズパイへ戻ります。
BotをSlackで動作させる
設定ファイルを編集します。
vim bin/hubot
すると下記が表示されるはずなのでAPI Tokenを記入します。
#!/bin/sh set -e npm install export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH" #ここに先ほどWebページで取得したAPI Tokenを書きます。 export HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxxxxxxx(自分のものを入力) exec node_modules/.bin/hubot --name "mybot" "$@"
Slackで動作させる準備が整ったので、下記を実行します。
bin/hubot -a slack
Slack上でBotがオンラインになれば動作しています。先程と同様にpingを投げるとPONGが返ってくるはずです。
動作させたいScriptは、mybot/scriptsのなかに.coffeeでかけば勝手に読み込んでくれます。複数ファイル置いておいても全て読み込んで実行してくれます。
書き方は下記サイトが参考になりました。
blog.fumiz.me
Hubotのデーモン化(バックグラウンド動作)
現在の状態のままだと、MacのSSH接続を解除してしまうとHubotも停止してしまいますので、ラズパイのバックグラウンドで動作させるためにHubotのデーモン化を行います。
nodeをデーモンとして動かすためのソフトforeverをインストール。
sudo npm install -g forever
Hubotを動かすために叩いているbin/hubotを以下のように書き換えます(execをコメントアウト、foreverを追加)。
#!/bin/sh set -e npm install export PATH="node_modules/.bin:node_modules/hubot/node_modules/.bin:$PATH" forever start -w -c coffee node_modules/.bin/hubot -a slack # exec node_modules/.bin/hubot --name "mybot" "$@"
これでBotが起動していればデーモン化完了です。
まとめ
思っていたよりも簡単に導入できてビックリしました。いろんなとこで少しずつつまずいてちょっと時間かかりましたけど。
ここからはコードをバリバリかいて自分だけの便利Botを作っていくだけですね。
おわり。
Raspberry Piを自宅Webサーバー化するための設定
前回のラズパイ初期設定記事はこちら。
キーボードもマウスも使わずにsshでRaspberry Pi Model Bを使えるようにした for Mac OSX - ぽじてぃぶしんきんぐ
ラズパイを自宅Webサーバー化したので備忘録として書きました。
参考にしたサイト様
ぐぐったらたくさん出てきましたが、こちらを主に参考にしてやりました。
shutosg.hatenadiary.com
IPアドレスの固定
ラズパイのIPを固定します。Jessieの場合は少し違うようで、こちらを参考にしてやりました。
qiita.com
/etc/dhcpcd.confに以下のように追記してreboot。
interface eth0 static ip_address=192.168.10.15/24 static routers=192.168.10.1 static domain_name_servers=192.168.10.1
192.168.0.*の部分はご自身の環境にあわせて変えてください。Atermの場合はこれでいけるとおもいます。
Apache2の導入
以下のコマンドで導入します。
sudo apt-get install apache2 #apacheの導入
導入できたら、Macとかのブラウザに先ほど設定したIP(例では192.168.10.15)にアクセスできるようになっているはずです。It works!とか出てたらバッチリ。
設定はめんどくさいのでとりあえず初期設定のままで。
ルータの設定
これが非常に苦労しました。
ポートマッピング自体は簡単でした。ポート80(Http)を開放して、ルータのWAN側のアドレス(グローバルIP)にアクセスされれば、ラズパイのプライベートIP(192.168.10.15)のポート80番へ飛ばすようにすればいいだけです。
ただ、Aterm特有なのかもしれませんが、ローカルIP(例だと192.168.10.*)からグローバルIP経由でラズパイにアクセスできません。タイムアウトするのです。外部サイト(ポートチェック【外部からポート開放確認】)を使ってアクセスするとできましたので、ルータが悪いことはわかっていましたが、なかなか解決できません。LTE回線使うとラズパイにアクセスできますので、まあいいっちゃいいんですが。
この部分は未解決です。とりあえず外部からラズパイが見えるようになったのでOKとしました。
ドメインの取得
僕はこちらを使いました。
www.dot.tk
ddclientの導入に、DotTKに登録したメールアドレスとパスワードが必要になりますので、Facebookで登録するのではなく、メールアドレスで登録するようにしましょう。
こちらが参考になります。
qapla.blog52.fc2.com
キーボードもマウスも使わずにsshでRaspberry Pi Model Bを使えるようにした for Mac OSX
久しぶりの更新です。
今回はRaspberry Pi Model Bを購入したので、これを使って遊ぶための準備を整えました。
Raspberry Pi 2 Model B (2015年2月発売品)
- 出版社/メーカー: きばん本舗
- メディア: エレクトロニクス
- この商品を含むブログを見る
初期導入にあたって、有線キーボードやマウスが必要だよという話を聞いていました。しかし、当方キーボードを持ちあわせていません。ですので、それでもできないのかと調べてみたところ、様々な記事が見つかったので、そのへんを参考にして進めていきました。
qiita.com
labs.torques.jp
ちなみに準備出来たものはこちらです。
- RasPi本体
- microUSBとアダプタ
- 有線LANケーブル
- HDMIケーブル
- 外部ディスプレイ
- マウス
- microSDカード32GB
SDカードにRaspbianデータを焼く
まず、こちらからファイルをダウンロードします。
www.raspberrypi.org
ここで気をつけたいのは、
- NOOBSの方は、GUIでRaspbianをインストールするためのファイル群であり、画面やキーボード・マウスが必要
- RASPBIANの方は、SDにOSを直接焼いちゃうので、そのままいきなり使いはじめることができるファイル群
ということです。ですので、今回はRASPBIANをダウンロードしました。
ここで躓いたのが、ZIPでダウンロードしたのですが、解凍ができない。「エラー2-ファイルまたはディレクトリがありません。」と出ていました。いろいろいろいろ試してみたのですが、どうやっても解凍できない。
ふと思ったのは、ZIPファイルが破損している原因はダウンロード時に問題があったでは?ということ。
ということでTorrentからダウンロードしてみました。そのときに使ったクライアントソフトはこちら。
Transmission
軽そうだったのでこれにしました。
ダウンロード後、解凍・・・・・できた!!!!!Jessieというimgファイルが出てきたと思います。やっとSDカードに焼きます。
その前に、ディスクユーティリティからSDカードをMS−FAT形式でフォーマットしておきます。このとき、SDカードに適当な名前(僕はRASPBIANにしました)をつけます。
その後、ターミナルを起動して、SDカードのパスを探します。
diskutil list
これで、SDカードがあるパスがわかります。今回は/dev/disk3s1だったとします。
次に、SDカードをアンマウントします。
sudo diskutil unmountDisk /dev/disk3
(注)SDカードはまだ抜いてはいけません。
そしてSDカードにimgを書き込みます。まず、imgファイルがあるディレクトリまでcdでいきましょう。その後、
sudo dd bs=1ms if=xxxx-xx-xx-raspbian-jessie.img of=/dev/rdisk3
のコマンドでSDカードに書き込みます。これはSDカードの性能に左右されますが、数分から小1時間はかかります。このddコマンドは途中経過が表示されませんので、フリーズしたのかと勘違いしました。途中経過を知りたい方は、ターミナルをフォアグラウンドに持ってきて、「command+T」を押してみてください。途中経過を見ることが出来ます。
この処理が終わると、SDカードに焼く作業が終了したことになります。
RasPiの起動からのssh接続
本体に、LANケーブル、HDMIケーブル、マウス、microSDを差し込み、最後に電源であるmicroUSBを差し込むとRasPiが起動します。この際に、黒い画面でコマンドの羅列が表示されていきますが、最後にkernel panicで終了している場合は、imgファイルが正常に書き込めていないか、SDカードとRasPiの相性の問題があります。再度書き込むか別のSDカードを使う必要があります。
無事起動すると、灰色の画面にRaspberryのマークが表示されている、GUIの画面になります。マウスで右上の画面が2つ重なっているマークにマウスオーバーするとRasPiのIPアドレスが分かります。例えば、192.168.0.10だったとします。
ターミナルから
ssh pi@192.168.0.10
でssh接続します。初期設定ではpiのパスワードはraspberryに設定されているので、それでログインすると無事ssh接続が完了しました。
あとはrootのパスワードやらpiのパスワード変更、ユーザーの追加を行いますが、こちらを参考にして行いました。
wings2fly.jp
このRasPiを使っていろいろ遊んでいきたいと思います!