Tinker Board で Bazel をビルドする
ASUS が販売している Tinker Board をいくつか買ってきて、サーバーとして利用している。これには Rockchip RK3288 という Arm ベースの CPU がのっているのだけど、OSS プロジェクトで配布されているバイナリは x86 向けが大半で Arm 向けのバイナリは配布されていないケースが多く、使いたいソフトウェアはだいたい自分でビルドすることになる。
今回は Tinker Board 上で Bazel (バーゼルと読むっぽい) を使う必要があったのでバイナリを探してみたところ、やはり Arm 向けの配布はないようだったので、自分でビルドすることにした。Tinker Board には既に Docker をインストールしてあるので、ビルドはコンテナ内で実行し、ドキュメントに従って進めた。ビルドに成功した Dockerfile は以下のようになる。
FROM ubuntu:16.04
ENV BAZEL_VERSION=0.9.0
RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y build-essential openjdk-8-jdk python zip
RUN curl -L -o bazel.zip https://github.com/bazelbuild/bazel/releases/download/$BAZEL_VERSION/bazel-$BAZEL_VERSION-dist.zip \
&& unzip -d bazel bazel.zip
# Restrict the memory usage.
RUN sed -i 's/-encoding UTF-8/-encoding UTF-8 -J-Xms256m -J-Xmx512m/g' bazel/scripts/bootstrap/compile.sh
RUN cd bazel \
&& ./compile.sh \
&& cp output/bazel /usr/local/bin/bazel
ドキュメントの手順に従ってビルドを実行したら Out of memory になってしまいビルドできなかった。bazel/scripts/bootstrap/compile.sh
内のコマンドにメモリーの使用を制限するフラグを追加したところ、ビルドが成功した。Tinker Board ではビルドの完了までに40分ぐらいかかってしまったけど、こんなものかな。