読者です 読者をやめる 読者になる 読者になる

#15 どこでだってRaspberryPiを触りたい! 失敗編

ハーイ、技術部のマコピーです。

この記事はtech.kayac.com Advent Calendar 2014 15日目です。

そんなわけで年の瀬も迫ってきたわけでございますが、こう寒いと、ああ、小さなRaspberry Piのほのかなあたたかみに触れたいと思うこともあるでしょう。

ですがどこへでもRaspberry Piは持っていけるサイズではありますし電源の確保も最近のUSB出力のバッテリーであれば実現できるものですが、時代はクラウド、やはり手ぶらでいきたいと思うところです。

というわけで何やらいろいろ矛盾していますが、DockerでRaspberry Piの開発環境を作る話です。

昨年、Raspberry PiをターゲットにAnsibleでプロビジョニングする話を書いたのですが、実機でOpenCVをビルドするの遅いからエミュレータ使えばいいのにと言われていて、たしかになあと思いつつめんどくさいし動いているからいいやとここまで来たのですが、時代はDockerなわけで、Dockerならそんなめんどくささを解消してくれるかも!

というわけで書いたのが以下のDockerfile

毎回毎回raspbianのイメージをADDで落としていると都度ダウンロードするのでローカルで落とした状態で始めています。また、kernel-qemuも落とした状態でスタートしました。ですが今度はコンテキストの送信が3GB超えになってしまって大変なことに……。

参考1 参考2

FROM ubuntu:latest
MAINTAINER mackee

RUN [ "apt-get", "update" ]
RUN [ "apt-get", "install", "qemu", "-y" ]

WORKDIR /opt/qemu/raspbian
ADD 2014-09-09-wheezy-raspbian.img /opt/qemu/raspbian/
ADD kernel-qemu /opt/qemu/raspbian/

docker buildしたあとに、おもむろに以下のコマンドを実行して起動

docker run -i -t mackee/qemu-raspbian:latest qemu-system-arm \
-M versatilepb -cpu arm1176 -m 256 -hda 2014-09-09-wheezy-raspbian.img \
-nographic -no-reboot -kernel kernel-qemu \
-append "root=/dev/sda2 rootfsinit=/bin/bash panic=1 console=ttyAMA0"

ちなみに-nographicを付けないとビデオドライバを読み込もうとして失敗するようです。

ttyAMA0はRasPiのシリアルコンソールで実機だとGPIOのRXとTXにつなげて後はUSB-UART変換とターミナルなどを使うことでログインすることが出来ます。いわゆるヘッドレスというやつですね。

さてこの時点ではログインシェルは出るのですがraspi-configをしろと言われて怒られて戻ってしまいました。ウッつらい。このあとから進めずにいます。

どなたかDocker上でqemu立ち上げてその上で以下の妄想みたいなことを実行している方いれば手を上げてください!

というわけで以下は妄想です。

Docker上に何か環境を構築してやるという試みはこれまでもされてきているようです。

ScalaでAndroid開発 - Docker編

で、Docker上でRasPi環境を立ち上げていたら何をやろうとしていたかというと、先ほどもお伝えしたとおりOpenCVのビルドやperlやrubyの自前ビルドなどです。これらはRasPi実機でやると非常に重たいのでどこかスペックの良いマシンでやってしまいたいところ。

ですが、スペックの良いRaspberryPiなどこの世にはまだ存在しなく、エミュレータで頑張るしか無いという感じでございます。とはいえエミュレータの環境構築も面倒。そこでDockerだったのです。

さらにDockerでやってしまえばdrone.ioなどに載せてしまうことで自動ビルドも可能になります。これは来たのではと思ったのですが、サクッとこのアイディアを実行するのに知識が足りないようでした。また進展がありましたらお知らせいたします。

さて明日はクライアントワークの新顔、morigoさんの登場です! フレッシュな感じのネタに期待です。