Firefox OSのビルド


ここでFirefox OSのビルド・インストール方法について紹介していきます。

■メニュー


ビルドの準備

Windowsではどうやらビルド環境が揃えられないようだ。Linux、特にUbuntu 12.04 (64bit)が推奨らしい。その他Macでもビルド可能。

Firefox OSを動作させるために必要なハードウェア環境

コンポーネント 最小環境 推奨環境
CPU - Cortex A5 クラスまたはそれより上位
ARMv7a with NEON
GPU - Ardeno 200 クラスまたはそれより上位
接続環境 - WiFi
3G
センサー - 加速度センサー
近接センサー
ライト
A-GPS

ビルド&インストール可能な端末

MDNを見ればすべて載っているため、ここでは簡単に翻訳しつつ、一番使われそうな端末だけ紹介していく。

Tier 1
 もっとも優先されているターゲットとなる端末・機種。頻繁にアップデートされており、機能も予定されているほとんどが使える。
エミュレータ (ARMやx86向け)
ARMとx86向けが用意されている。config.sh実行時にどちら向けかをも選べる。
デスクトップ
デスクトップPC環境で動作する。XULRunnerアプリケーション内のGeckoをもととして動作する。
Tier 2/3
 Tier 2はTier 1の次に優先されており、多くの予定されている機能が動作する。アプリ開発者には実機としてはこれがオススメらしい。
Tier 3はただ動くというだけ。今後に期待したい。
Samsung Nexus S
Tier 2。型番GT-I9020AやGT-I9023が主によく動く端末。それ以外でもほどよく動作するかもしれない。
また、Nexus Sの4G対応版はSPH-D720がよく動くということでサポートされている。
Samsung Galaxy S2
Tier 3。型番はI9100だけ確認済み。他の型番のものでは一部センサー等含めて確認できていない。
Samsung Galaxy Nexus
同じくTier 3。ただ動くというだけ。カメラやGPS、Geckoのアクティビティなど動かない機能が多い。存在価値は最低限の確認用としてのみ使える。

ビルド前の注意点

 ブートローダーをアンロックしたGalaxy Nexusを用意すること。あと一度でもfastbootでROMイメージを書き換えた経験があるべき。
要するにまったくの素人さんが手を出すべきではないということです。  それから現状、Firefox OSをインストールできる端末は限られている。
(推奨端末はNexus Sのみ)
よくROM適用の引き合いに出されるGalaxy Nexusは実は推奨ではなく、最適化もまだされておらず、ほとんどの機能がまだ満足に
動くことが確認できていない端末なのだ。それを踏まえて、インストールする端末を選びたい。
ちなみにLinuxデスクトップ、エミュレータとしてもビルドは可能。

ビルド時に必要なもの

Linux環境で必要なもの

おすすめの環境はUbuntu 12.04の64bit環境とのこと。要件としては次の通り。
  • 64bitのGNU/Linux。最もオススメはUbuntu 12.04の64bit
  • 最低4GBのRAM/スワップ領域
  • 最低20GBのディスクの空き容量。これはガチでこのサイズくらい必要。./config.shをすると軽く16GBはファイルをDLするので
    仮想PCでUbuntuを使って・・・という方は仮想HDDを1個追加してそこを専用スペースにしたほうが安心できる。
32bitのUbuntu、その他ディストリビューション(Ubuntu 12.10、Fedora、Arch Linux)では動かないかもしれない
原因としてはgcc 4.7が使われているせいらしい。(ビルドに必要なgccは4.6.3かそれ以下のバージョンということになっている)

ビルド手順

上に戻る

MDNを見れば全ての環境でのビルド方法が書かれているので、ここでは推奨環境のUbuntu 12.04で行った作業と、
その他注意点について書いていく。

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.solibGL.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を接続できることだ。
もし通常起動していた場合は、電源を一旦切って、両方のボリュームキーを押しながら電源ボタンを長押ししよう。
fastbootモードの画面
fastbootモードの画面

この状態になったらイメージファイルの適用準備OKだ。手動だと次のようにコンソールで入力しよう。
fastboot flash boot B2G/out/target/product/maguro/boot.img
userdata.imgやsystem.imgも同様に適用する場合は下線部をそれぞれuserdatasystemに変えよう。

もっとも、B2Gディレクトリにあるflash.shを実行すれば上記イメージファイルをいちいち気にすることなく、
おまかせで適用出来る。

6,適用の別の形

通常、FirefoxOSの何か部分を変更した場合は上記までのようにイメージファイルを生成するのが基本だが、
毎回イメージファイルを生成して適用しなければいけないのかというと、そういうわけでもない。
もちろんシステムの根底に関わるgeckoやgonkを変更したとなればイメージファイルを作る必要があるが、
gaiaに関しては手っ取り早い方法がある。

$ cd gaia
$ make reset-gaia

これでイメージファイルを作りなおすことなく、即座にgaiaに対する変更を適用出来る。
・・・が、ここで気をつけたいことがある。これをする前にすべきことがある。
それはGalaxy Nexusを通常の起動モードでPCに接続する必要がある。このあたりの注意、MDNなどは書いていない。
おそらく当たり前すぎて書いていないのだろう。