momo-mruby 開発環境を自動構築する Dockerfile を書いてみた


# はじめに

@GORO_Neko です。ご存知の方ご無沙汰してます。初めての方お初にお目にかかります。

えーっと、先にお断りをば一言。

自分、仕事では一切マイコンボードを利用した業務に携わったことがございません。

以下は、自分が所属する会社の意向を反映したものでもスタンスを示すものでもなく、単なる一個人の趣味の活動から産まれた記述です。

# 開発環境を構築するのって、面倒 … かな？

この間、ある IoT 系の勉強会に出たんですよ。
で、他の受講者さんたちの顔色を見ているうちにふと思ったんですが、ひょっとして
「他の人って、開発環境を構築するのって、面倒に思ってる？」
のかな、って。

自分、日頃 Web だの Cloud 周りだの、ミドルウェアだの言語の実行環境だのをがっちゃんがっちゃん構築することを生業としているので、あまり気にすることがなかったんですが、ひょっとしてそういう作業
「できればしたくないなあ（とほほ）」
「したいのはアプリケーションづくりであって、開発環境の構築とかじゃないんですよ（イライラ）」
てっ人、実はいっぱいいらっしゃいます？

# 開発環境、自動構築できるようにしちゃいましょう！

そういうお悩みのせいで、mruby とかのアプリケーション開発が盛り上がらないのだとしたらとってもとっても
「もったいないなぁ。」
そう思います。

思った以上は改善あるのみ。
その改善策として、開発環境入りの Docker コンテナ（と言いますか、コンテナの元ネタのイメージ）を、自動的に作っちゃう Dockerfile を作ってみました。

こいつを Docker 上で "Docker build" "docker run" してやれば、momo-mruby 開発環境入りのコンテナが作り放題・壊し放題になります。

少なくとも自宅の OS: Ubunto 18.04 な PC 上に入れた Docker（ version 18.09.0-rc1, build 6e632f7 ）との組み合わせでは、しっかり意図通りに動いてくれています。

過去記事になりますが、この環境を使った GR-PEACH 用アプリケーションの作り方を[ここ](https://qiita.com/GORO_Neko/items/42d39b5800a60bf01a77)や[ここ](https://qiita.com/GORO_Neko/items/24c21a8b51b5786da833)に書いています。良ければお目通しください。

# 作成した Dockerfill はこんな感じ

以下に書いた Dockerfile を記載します。

ベースの OS は Ubuntu 16.04、ユーザは root のみで、とりあえずの PW として "root" を設定しています。

え？　Docker 動かしてる PC の Ubuntu は 18.04 なのに、コンテナ側の Ubuntu が 16.04 なのはなぜかって？

… [ここらへん](https://bugs.launchpad.net/ubuntu/+source/gcc-arm-none-eabi/+bug/1767223)見てお察しください（しくしく）。

閑話休題。
SSH を有効にしていますので、SSH ログインが可能です。

コンテナに入って、"/root/momo-mruby" 直下に移動の上、以下の 3 つのコマンドを実行することで、GR-PEACH 用の mruby 実行基盤となるファーム（ "momo-mruby/BUILD/RZ\_A1H/GCC\_ARM/momo-mruby.bin”。これを GR-PEACH にインストールすることで GR-PEACH が mruby 対応マイコンボードになります）を作成できます。

```
# make clean
# make
# make
```
※ 真ん中の make は必ず「失敗」で終了します（だから、Dockerfile の中で自動実行させてなかったり）。

このコンテナには mruby（/root/momo-ruby/mruby ディレクトリ参照。必要に合わせて、環境変数 PATH に "/root/momo-ruby/mruby/bin" あたりを追加すると良いかも）が入っていますので、このコンテナ内で GR-PEACH 用の mruby アプリケーションを作成することもできます。

"RUN" を "sudo" に読み替える等をしていただければ、Docker コンテナの作成ではなく、Ubuntu 実機上に momo-mruby 開発環境を構築するための手順書として利用することも可能かと思います。

以下の記述をファイル化したものを [GitHub](https://github.com/YoshihikoHara/DockerfileForMomo-mruby) で公開してもおりますので、そちらもご利用ください。

[ Dockerfile ]

```

#
# Last Updete: 2018/11/12
#
# Author: Yoshihiko Hara
#
# Overview:
#   Create a container containing development environment of momo-mruby (mruby for GR-PEACH).
#

# Specify the image (Ubuntu 16.04) to be the base of the container.
From ubuntu:16.04

# Specify working directory (/root).
WORKDIR /root

# Update applications and others.
RUN apt-get -y update
RUN apt-get -y upgrade

# Install network tools (ip, ping, ifconfig).
RUN apt-get -y install iproute2 iputils-ping net-tools

# Install working tools (vim, wget, curl, git).
RUN apt-get -y install apt-utils
RUN apt-get -y install software-properties-common
RUN apt-get -y install vim wget curl git

# Set the root user's password (pw = root).
RUN echo 'root:root' | chpasswd

# Install sshd.
RUN apt-get -y install openssh-server
RUN mkdir /var/run/sshd

# Change the setting so that the root user can SSH login.
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# RUN sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

# Install build tools(g++、make、bison)
RUN apt-get -y install g++ make bison

# Install the library necessary for building CRuby.
RUN apt-get -y install zlib1g-dev libssl-dev libreadline-dev
RUN apt-get -y install libyaml-dev libxml2-dev libxslt-dev
RUN apt-get -y install openssl libssl-dev libbz2-dev libreadline-dev

# Install CRuby(Ruby 2.5.3).
RUN wget https://cache.ruby-lang.org/pub/ruby/2.5/ruby-2.5.3.tar.gz
RUN tar xvzf ruby-2.5.3.tar.gz
WORKDIR /root/ruby-2.5.3
RUN ./configure
RUN make
RUN make install
WORKDIR /root

# Install Python2.7.
RUN apt-get -y install python2.7 python-pip python-setuptools python2.7-dev

# Install Mercurial.
RUN apt-get -y install mercurial
RUN echo [ui] > /root/.hgrc
RUN echo username=username@example.com >> /root/.hgrc

# Install GNU ARM Embedded Toolchain.
RUN apt-get -y install gcc-arm-none-eabi
RUN apt-get -y install u-boot-tools
RUN apt-get -y install libboost-all-dev

# Install mbed CLI.
RUN pip install mbed-cli

# Get "momo-mruby" source code & Build.
RUN git clone https://github.com/mimaki/momo-mruby.git --recursive
WORKDIR /root/momo-mruby/mruby
RUN make
ENV PATH $PATH:/root/momo-mruby/mruby/bin
# WORKDIR /root/momo-mruby
# RUN make clean && make && make

# Specify the locale.
RUN apt-get install -y locales
RUN echo "ja_JP UTF-8" > /etc/locale.gen
RUN locale-gen

```

では、また。