2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Slack経由でRaspberryPiにC/C++のソースをビルドさせる

Posted at

Slack経由でRaspberryPiにC/C++のソースをビルドさせる

1. はじめに

どうもISAOXです。
今回もSlack経由でRaspberryPiに何かやらせるシリーズです。
以下の投稿記事でSlack上でBOTに命令を出せば遠隔のRaspberryPi(以下RPi)のスクリプトを実行できるようになりました。
この記事の環境もこれをベースにしてます。参考下さい。

今回は遠隔のRPiにC/C++のソースをビルドしてもらいます。
PC上でRPi向けのソースコードを修正し、ちょっとコンパイルが通るか確認したいことがあります。
これができれば、RPiに直接接続しなくてもRPi上でコンパイルが通るくらいは確認できます。
出先などRPiと離れた所にいてもSlackさえ使えればコンパイルができるわけです。

2. 前提条件

この記事の前提条件は以下です。

  • インターネットに接続したRaspberryPi(Raspbian)がある。
  • RPi上でHUBOTを起動できる環境にしている
  • Slackを利用している + Slack上でHUBOT用のBOTを追加している。

3. RPiにC/C++のソースをビルドさせる道具の準備

RPi上でC/C++のソースをビルドさせるのはMakefileを使う前提とします。
Makefileがあるディレクトリでコマンドmakeを実行してビルドします。
make

なので、Makefileがあるディレクトリに移動してmakeを実行するShellスクリプトを用意してRPi上に配置します。
第1引き数にMakefileがあるディレクトリパスを指定する仕様です。

make_bin.sh
#!/bin/sh

cd $1
make clean
make

4. RPi上のHUBOTがShellスクリプトを呼ぶ準備

RPi上のHUBOTが読み込むcoffeeスクリプトに『make』という文字列が来たら上記Shellスクリプトを呼び出す命令を追記します。
追記したらRPiを再起動するなどしてHUBOTが最新のcoffeeスクリプトを読み込んでおくようにしておきましょう。

test.coffee
  robot.respond /make (.*)/i, (msg) ->
    target = msg.match[1]
    @exec = require('child_process').exec
    command = "sudo -u pi sh /home/pi/GitHub/StudyRPi/Hubot/iotbot/my_exec/make_bin.sh #{target}"
    msg.send "Command: #{command}"
    @exec command, (error, stdout, stderr) ->
    msg.send error if error?
    msg.send stdout if stdout?
    msg.send stderr if stderr?

5. Slack上のBOTにC/C++のソースをビルドしてもらうように命令する

Slack上でBOTに以下のようにしてC/C++のソースをビルドしてもらうように命令します。
するとBOTが反応しRPiのShellスクリプトを実行してくれました!
Picture
※上のスクリーンショットはSlack上の『DIRECT MESSAGES』上で入力しているので頭に指定するBOT名は省略してます。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?