1,必要なライブラリDL、システムの設定をする
$ sudo apt-get install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev libgl1-mesa-dev libx11-dev make zip
上記以外に64bit環境でビルドする際は32bitバージョンのlibX11.soとlibGL.soをシンボリックリンクする必要がある。
$ sudo ln -s /usr/lib/i386-linux-gnu/libX11.so.6 /usr/lib/i386-linux-gnu/libX11.so
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
ちなみにconfig.sh emulator/emulator-x86では上記以外にもたくさんのライブラリが必要なようである。
自分はログを確認しながら、関連するライブラリをインストールしていったところ、これだけ必要だった。(依存関係で入ってきたものも含む)
libatk1.0-dev (2.4.0-0ubuntu1)
libcairo-script-interpreter2 (1.10.2-6.1ubuntu3)
libcairo2-dev (1.10.2-6.1ubuntu3)
libfontconfig1-dev (2.8.0-3ubuntu9.1)
libfreetype6-dev (2.4.8-1ubuntu2.1)
libgdk-pixbuf2.0-dev (2.26.1-1)
libglib2.0-dev (2.32.3-0ubuntu1)
libgtk2.0-dev (2.24.10-0ubuntu6)
libice-dev (2:1.0.7-2build1)
libpango1.0-dev (1.30.0-0ubuntu3.1)
libpcre3-dev (8.12-4)
libpixman-1-dev (0.24.4-1)
libpng12-dev (1.2.46-3ubuntu4)
libsm-dev (2:1.2.0-2build1)
libxcb-render0-dev (1.8.1-1ubuntu0.1)
libxcb-shm0-dev (1.8.1-1ubuntu0.1)
libxcomposite-dev (1:0.4.3-2build1)
libxcursor-dev (1:1.1.12-1)
libxdamage-dev (1:1.1.3-2build1)
libxfixes-dev (1:5.0-4ubuntu4)
libxft-dev (2.2.0-3ubuntu2)
libxi-dev (2:1.6.0-0ubuntu2)
libxinerama-dev (2:1.1.1-3build1)
libxrandr-dev (2:1.3.2-2)
libxrender-dev (1:0.9.6-2build1)
x11proto-composite-dev (1:0.4.2-2)
x11proto-damage-dev (1:1.2.1-2)
x11proto-fixes-dev (1:5.0-2ubuntu1)
x11proto-randr-dev (1.4.0+git20120101.is.really.1.4.0-0ubuntu1~precise1)
x11proto-render-dev (2:0.11.1-2)
x11proto-xinerama-dev (1.2.1-2)
libdbus-1-dev (1.4.18-1ubuntu1.3)
libdbus-glib-1-dev (0.98-1ubuntu1)
yasm (1.1.0-1)
comerr-dev (2.1-1.42-1ubuntu2)
krb5-multidev (1.10+dfsg~beta1-2ubuntu0.3)
libcurl4-gnutls-dev (7.22.0-3ubuntu4)
libgcrypt11-dev (1.5.0-3ubuntu0.1)
libgnutls-dev (2.12.14-5ubuntu3.1)
libgnutls-openssl27 (2.12.14-5ubuntu3.1)
libgnutlsxx27 (2.12.14-5ubuntu3.1)
libgpg-error-dev (1.10-2ubuntu1)
libgssrpc4 (1.10+dfsg~beta1-2ubuntu0.3)
libidn11-dev (1.23-2)
libkadm5clnt-mit8 (1.10+dfsg~beta1-2ubuntu0.3)
libkadm5srv-mit8 (1.10+dfsg~beta1-2ubuntu0.3)
libkdb5-6 (1.10+dfsg~beta1-2ubuntu0.3)
libkrb5-dev (1.10+dfsg~beta1-2ubuntu0.3)
libldap2-dev (2.4.28-1.1ubuntu4.2)
libp11-kit-dev (0.12-2ubuntu1)
librtmp-dev (2.4~20110711.gitc28f1bab-1)
libtasn1-3-dev (2.10-1ubuntu1.1)
libxcb-composite0-dev (1.8.1-1ubuntu0.1)
libxcb-dri2-0-dev (1.8.1-1ubuntu0.1)
libxcb-glx0-dev (1.8.1-1ubuntu0.1)
libxcb-keysyms1-dev (0.3.8-1build1)
libxcb-randr0-dev (1.8.1-1ubuntu0.1)
libxcb-shape0-dev (1.8.1-1ubuntu0.1)
libxcb-util0-dev (0.3.8-2)
libxcb-xfixes0 (1.8.1-1ubuntu0.1)
libxcb-xfixes0-dev (1.8.1-1ubuntu0.1)
rttool (1.0.3-2)
dctrl-tools (2.18ubuntu1)
devscripts (2.11.6ubuntu1.4)
dh-buildinfo (0.9ubuntu1)
diffstat (1.54-1)
dput (0.9.6.2ubuntu1)
libapt-pkg-perl (0.1.25build2)
libclass-accessor-perl (0.34-1)
libclone-perl (0.31-1build3)
libcommon-sense-perl (3.4-1)
libdigest-hmac-perl (1.03+dfsg-1)
libemail-valid-perl (0.185-1)
libexporter-lite-perl (0.02-2)
libio-pty-perl (1:1.08-1build2)
libio-string-perl (1.08-2)
libio-stringy-perl (2.110-5)
libipc-run-perl (0.90-1)
libjson-perl (2.53-1)
libjson-xs-perl (2.320-1build1)
libnet-dns-perl (0.66-2ubuntu3)
libnet-domain-tld-perl (1.69-1)
libnet-ip-perl (1.25-3)
libparse-debcontrol-perl (2.005-3)
libparse-debianchangelog-perl (1.2.0-1ubuntu1)
libsub-name-perl (0.05-1build2)
libtie-ixhash-perl (1.21-2)
lintian (2.5.6ubuntu0.1)
patchutils (0.3.2-1.1)
python-magic (5.09-2)
wdiff (0.6.5-1)
実はエミュレータはまだビルド成功していない。どうしても最後にld: cannot find -lrtが出てきてしまう。
rt関連はすでに入っているはずなのに・・・(関係無さそうなrtのライブラリは一度試して削除している)
もしどなたか同じ現象になって解決していたら教えて下さい。
2,B2G(Boot to Gecko)リポジトリからソースをダウンロードする
Firefox OSのソースはgithubから取得する。次のコマンドを実行しよう。
$ git clone git://github.com/mozilla-b2g/B2G.git
ちなみにこれだけでは全てのソースはダウンロードされない。
3,B2Gを構成する
githubから最低限のファイルを取得したら、次は端末別に構成する。gitした後に自動生成されたB2Gディレクトリに移動して
次のいずれかを実行する。
$ ./config.sh galaxy-nexus
$ ./config.sh emulator
$ ./config.sh emulator-x86
他にも端末向けのパラメータが存在するのでMDNを参照してほしい。これを実行すると、それぞれの端末向けにソースをダウンロードし始める。
初回はすさまじく時間がかかるので出かける時や夜間に放置して実行させておくといいかもしれない。
実行すると最初に名前、メールアドレス、コンソール上で色を使うかどうか(問われない場合もあり)をどうするか聞いてくる。
その3点(あるいは2点)を指定し終わったらあとは放置しておこう。(1~2時間)
4,ビルド開始
長いconfig.shが終了したら、次にいよいよビルドをする。この段階で全てのソースがダウンロードされているので、ビルドする前に確認してもよい。
$ ./build.sh
$ ./build.sh gaia
$ BUILD_APP_NAME=xxxxx ./build.sh gaia
2つ目は特定のモジュールのみをビルドする場合に使う。この例だとgaia以下のモジュールとアプリをすべてビルドするとおいう
意味になる。
3つ目はさらに、特定のアプリだけをビルドする場合に使う。環境変数としてBUILD_APP_NAMEのあとに
アプリ名を書き、build.shをする。ちなみにgaiaは付けても付けなくてもどちらでもよいが、
時間を短くすませたい場合はしっかりgaiaを引数に付けよう。
5,適用
ビルドが終わったらイメージファイルができているかを確認しよう。存在する場所は次の場所だ。
B2G/out/target/product/maguro
必要なイメージファイルは次のものだ。
- boot.img
- userdata.img
- system.img
他にもrecovery.imgやramdisk.imgなどがあるがそれらは気にしないでいいようだ。
適用する場合はまず前提として、fastbootモードでPCとGNexusを接続できることだ。
もし通常起動していた場合は、電源を一旦切って、両方のボリュームキーを押しながら電源ボタンを長押ししよう。
この状態になったらイメージファイルの適用準備OKだ。手動だと次のようにコンソールで入力しよう。
fastboot flash boot B2G/out/target/product/maguro/boot.img
userdata.imgやsystem.imgも同様に適用する場合は下線部をそれぞれuserdataやsystemに変えよう。
もっとも、B2Gディレクトリにあるflash.shを実行すれば上記イメージファイルをいちいち気にすることなく、
おまかせで適用出来る。
6,適用の別の形
通常、FirefoxOSの何か部分を変更した場合は上記までのようにイメージファイルを生成するのが基本だが、
毎回イメージファイルを生成して適用しなければいけないのかというと、そういうわけでもない。
もちろんシステムの根底に関わるgeckoやgonkを変更したとなればイメージファイルを作る必要があるが、
gaiaに関しては手っ取り早い方法がある。
$ cd gaia
$ make reset-gaia
これでイメージファイルを作りなおすことなく、即座にgaiaに対する変更を適用出来る。
・・・が、ここで気をつけたいことがある。これをする前にすべきことがある。
それはGalaxy Nexusを通常の起動モードでPCに接続する必要がある。このあたりの注意、MDNなどは書いていない。
おそらく当たり前すぎて書いていないのだろう。