Raspberry Piでdockerを動かしたらstandard_init_linux.go:178: exec user process caused "exec format error"と言われる

問題

Raspberry Pi上でdocker buildしたら

standard_init_linux.go:178: exec user process caused "exec format error"
The command '/bin/sh hogehugapiyo' returned a non-zero code: 1

と言われる

原因

Raspberry PiカーネルはARMなのでWindowsMacのdocker imageをそのまま使うことができないから

解決策

ARM用にする。 rpi- から始まるimageを元に作れば良さそう

botをdockerを使って作ってみようとwindowsでしていて、自宅のRaspberry Piでホストさせようとして、このページを参考にしながらdockerをインストール

buildで上記のエラーを吐いて、1時間以上悩んでようやく原因が分かった

botを動かす環境でdockerが直接動くんじゃなかったら使うメリットないよな…. dockerの仕様上、仕方ないんだけどさ….

参考

github.com stackoverflow.com dr-asa.hatenablog.com dev.classmethod.jp

研究室に誰がいるかをslackから確認するシステムを作った

作ったもの


概要

  • 10分に1回ラズパイからローカルipに向かってpingし、arpMacアドレスを取得してユーザーを特定しデータベースに登録を行う。

f:id:matatsuna:20170417120424p:plain
f:id:matatsuna:20170417120429p:plain

  • slackのスラッシュコマンドでデータベースから最新の情報を取ってきて返す。

f:id:matatsuna:20170417120008p:plain
f:id:matatsuna:20170417120014p:plain

使ったもの

ハードウェア
ソフトウェア

技術的なこと

raspberry pi

10分間に1回プログラムを実行する

cronを使いました。
クーロン(cron)をさわってみるお - Qiita

arpコマンドでMacアドレスを取得する

まず、Macアドレスは端末が必ず持っていてほぼユニークなアドレスで同じネットワーク内の端末からは、ipアドレスと一緒に知ることができます。Wifiにつながってる状態であれば、ロック画面やスリープに入ったとしても知ることができます。arpテーブルというipアドレスMacアドレスの一覧の表が存在しarpコマンドで参照します。

$ arp

ただ、リアルタイムでarpテーブルを更新するためには、pingを飛ばす必要があります。

$ sudo ping -c 1 -W 1 192.168.xxx.xxx
$ arp -a 192.168.xxx.xxx

これを10分に1回100ipほどに行い、同じネットワーク内にある端末のMacアドレスを取得します。
ネットワークに負荷がかかるので、本当はこんなことしたくない....

hoge.localにアクセスすると登録できるようにする

Raspberry Piにホスト名の設定をしたメモ – 1ft-seabass.jp.MEMO
この設定を行い、index.phpを/var/www/html/に配置して登録フォームを設けました。
なお、ブラウザからhoge.localでアクセスできるのはMac,iOSのみで、windowsAndroidはip直打ちです。

slack 側

スラッシュコマンドを作る

f:id:matatsuna:20170415183405p:plain
これじつは作れます。https://ほげふが.slack.com/apps/manage/custom-integrations
しかも仕組みは簡単で、

 /コマンド名 引数 

この引数をそのままテキストでGETかPOSTを好きなアドレスに対して送ることができます。httpのサイトへも可能です。jsonで返してあげると結果をslackに投稿してくれます。
Slash Commands | Slack
データベースの最新情報を返すだけのphpにスラッシュコマンドからリクエストを送るようにしました。

まとめ

研究室にいることをわざわざカードをかざしたり、カメラを設置して監視するのは、なんか嫌だなーって思っていて、普段通りの生活を送ってる中でなにかトラックングできないか考えたらこの方法を思いつきました。さり気なく監視してる感が余計に怖いですが。
10分間に1回ごとの情報がデータベースに貯まるので、研究室に来てない人がわかったりするので、M1,B4の先輩たちからすごく嫌がられましたw

老害とは何かを考えてみる

早いもので、2016年度が終わります。大学生活も1/2か1/3かが終わりました。
そろそろ本格的に意識しようとしてるのが老害にはなりたくないなということです。
まとまらずに思うがままに書きます。殴り書きです。

老害とは

google先生に聞いてみた

自分が老いたのに気づかず(気をとめず)、まわりの若手の活躍を妨げて生ずる害悪。

なるほど。確かにそういう印象の単語だなと。

どうしたら若手=後輩を妨げないか

ここでの若手は後輩とする

やってることに口出ししない

これが一番大事な気がする。せっかく頑張って作ったり発表したり、計画しているのに、それを途中で折られたらたまったもんじゃないはず。
やる気をなくす原因になりそう。でも口出しを願う後輩もいるので難しいところ。明らかに助言を求められてから話すようにしたい。
注意すべき場所:Twitter

意見を素直に受け取る

「これをやりたいんです!」と言われ、その実装がめんどくさいということがあったとする。そのときに、それはめんどくさいからと諦めるように言うのは、せっかく挑戦しようとしてるのに、自分の経験則から妨げてしまうことになるのかなと思う。めんどくさいけど、一緒に考えてあげるとかしたほうがいいのかも。
注意すべき場所:プログラミング課題

ぶっ飛んで本人がわからない話をしない

自分がわかってるからどこまで、後輩が知っているかわからなくなるときが多くある。そのときに、後輩がわからなくても沢山の話を続けるのは避けたい。
注意すべき場所:対面

後輩が先輩の助けを借りたいときに借りれるような感じになりたいですよね。

そもそも一番は、プログラミングのスキルは壁にぶち当たりながら頑張って成長してほしい。

これを書くことが老害かもな