Dockerを使ってAndroidをコンパイルします.


http://www.longxk.com/posts/2014/03/18/using-docker-to-build-aosp/
小康より2014年03月18日に発表されました.
ずっとからAndroid(AOSPP)をコンパイルしてすべてとても卵の痛い事で、体積のとても大きいソースコードをダウンロードするだけではなくて、またシステムを破壊するリスクを冒していっぱいの建設ツールをインストールします.また、Googleで指定されたLinux発行版(現在はUbuntu 12.04 bit)を使用しないと、異なるツールバージョンの問題を解決しなければなりません.例えば、Arch Linux上では、make、Python、Javaのバージョンが対応していないため、コンパイルエラーが発生します.以前はVirtual boxにUbuntu 12.04 bitをインストールしてAOSPPをコンパイルしたことがありますが、性能が良くなくて、使用が非常に不便で諦めました.Dockerはコンセプトは仮想マシンに似ていますが、仮想マシンとは大きく違って、バーチャル層ではなく、ホストのカーネルをそのまま使っていますので、性能上の損失が少なく、起動速度が速く、ほとんど時間がかかりません.ホストとファイルを共有するのもとても便利です.AOSPPをコンパイルするには最適です.
どうやってDockerをインストールするかは多くなくて、ここを参考にして、基本的に主流の発行版はすべて支持しました.
Arch Linuxにインストールすると、dockerサービスを手動で起動する必要があります.コマンドを使用します.
# systemctl start docker
しかし、このサービスを起動すると、Dockerはデフォルトで/var/lib/dockerディレクトリにデータファイルを保存します.このディレクトリが大きいパーティションではないなら、このディレクトリを他の容量に変更することが望ましいです.まず新しいdockerサービスを作成します.
# cp /usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker-alt.service
その後、docker-alt.serviceを編集し、ExecStart=/usr/bin/docker -dExecStart=/usr/bin/docker -d -g /other/dirに変更する.今後、もしdockerサービスを起動する必要があれば、docker-altサービスを起動するように変更します.もちろん、自動的に起動させることもできます.
# systemctl enable docker-alt
そしてuuntuのイメージをダウンロードします.
# docker pull ubuntu
このコマンドを使って13.10,13.04,12.10,12.04の4つのバージョンをダウンロードします.もしあるバージョンが必要なら、12.04のように、uuntuをuuntuに変更できます.
ダウンロードが完了したら、これらのイメージに基づいて自分のイメージを作成し、任意のディレクトリを作成し、Docerfileというファイルを作成し、下記の内容を追加します.
FROM ubuntu:12.04

ADD sources.list /etc/apt/sources.list

ENV DEBIAN_FRONTEND noninteractive
RUN apt-get -qq update
RUN apt-get install -y build-essential g++-multilib
RUN apt-get install -y file git gnupg flex bison gperf zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 openjdk-6-jdk openjdk-6-jre

WORKDIR /var/aosp
Docker fileファイルを保存して、同じディレクトリの下にsources.listファイルを新たに作成します.つまり、uuntuのソフトウェアソースの配置ファイルです.中にはあなたが使っているミラーによって対応住所を記入します.
次は新しいイメージを構築し、Docerfileのディレクトリで実行します.
# docker build -t aosp-build .
その中でもaosp-buildはイメージネームで、勝手に修正できます.
などの構築が完了したら、私達は得られたイメージでコマンドを実行して、containerを作成します.例えば、bash shellを実行して、宿主とcontainerの間で共有するディレクトリを作成します.
# docker run -v /host/aosp-dir:/var/aosp/source -i -t --name aosp aosp-build bash
ここでホスト上の/host/aosp-dirディレクトリは、container内の/var/aosp/sourceディレクトリと共有され、--nameオプションを使ってcontainerの名前を指定した後、次のコマンドでこのcontainerを再起動することができる.
# docker start -i -a aosp