B2G OS ビルドの必要条件

B2G OS のコードを入手してビルドする前には、単に Gaia をビルドしてみる場合でも、ビルド環境 を適切に設定することが必要です (このページで方法を説明します)。現在、64 ビット版 Linux ディストリビューションおよび Mac OS X でビルド可能です。

互換性のあるビルドターゲット

ビルドするには互換性のある端末を用意する必要があります。さもなくばエミュレータを使用してください。

: Mozilla の B2G ソースコードは、事実上 B2G OS のリファレンス実装ですが、携帯電話ベンダーは、自由にパッチをあてたり変更を加えたりすることが可能です。小売端末を買った場合、これにはベンダーの構成したバージョンが含まれます。これは、インストール済みのアプリには影響はありませんが、プラットフォームレベルでは影響する可能性があります。Nexus 5 への移植は、Mozilla が直接メンテナンスしているので、他 の端末と比較して、我々の Gecko のバージョンがはるかにうまく動作するでしょう。

エミュレータ

利用可能なエミュレータは 2 種類あります。一つは ARM コードをエミュレートし、もう一つは実行するのに x86 コードを使用します。「B2G エミュレータを使用する」で詳しく学んでくださいx86 エミュレータは使用すべきではありません。インストールが困難で、十分にサポートされていません。

デスクトップ

デスクトップ版の B2G OS をビルドすることもできます。このビルドは、XULRunner アプリケーションで Gecko を実行し、その中で Gaia の UX を確認できます。

端末

いくつかの端末が B2G OS と互換性があります。しかしいくつかはそれ以外のものよりも互換性があり、端末の特定種のみが互換性があることもあります。詳細は 互換性のある端末 のページを確認してください。

重要: Android 4.3 以降 (いわゆる Jelly-bean, Kitkat, Lollipop) で動作している端末のみがサポートされています。もし上のリストにあなたの端末があっても、古いバージョンの Android を実行している場合は、まず更新してください。

GNU/Linux での必要条件

【訳注: ディストリビューションによってドキュメント変更が激しいので、右上の言語メニューから、このページの英語版ドキュメントも参照してください。】

Linux でビルドするには以下のシステム構成が必要です:

  • 64 ビット版 GNU/Linux ディストリビューション (Ubuntu 14.04 LTS 推奨)
  • 最低 4 GB の RAM
  • 最低 40 GB のハードディスク空き領域

以下のツールもインストールしておく必要があります:

  • autoconf 2.13
  • bison
  • bzip2
  • ccache
  • curl
  • flex
  • gawk
  • git
  • gcc
  • nodejs
  • python
  • g++ / g++-multilib
  • java sdk (jdk)
  • lzop
  • make
  • OpenGL shared libraries
  • patch
  • X11 headers
  • 32-bit ncurses
  • 32-bit zlib
  • unzip

Ubuntu 12.04 LTS / Debian 6 / Linux Mint 13

ターミナルで下記のコマンドを実行してください:

sudo apt-get install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev libasound-dev libgconf2-dev libgl1-mesa-dev libx11-dev lzop make zip libxml2-utils nodejs unzip python

このppa を通じて jdk をインストールできます。

Ubuntu 14.04 LTS / Debian 7

まず、必須アーキテクチャをセットするため、次のコマンドを実行します:

sudo dpkg --add-architecture i386
sudo dpkg --add-architecture amd64

ターミナルで次のコマンドを実行してください:

sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git lib32ncurses5-dev lib32z1-dev libgconf2-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip lzop libxml2-utils openjdk-7-jdk nodejs unzip python

Ubuntu 16.04

2016 年 6 月に ubuntu 16.04 で、make のバージョンは 4.1 となって android のビルドができなくなりました。これを経験した場合、信頼できるリポジトリ (14.04) を追加し、バージョン 3.81 にダウングレードして、次のコマンドを実行します:

sudo apt-get install make=3.81-8.2ubuntu3

次に自動アップグレードを避けるため、make パッケージを保持するようマークします。

sudo apt-mark hold make 

まず、必須アーキテクチャをセットするため、次のコマンドを実行します:

sudo dpkg --add-architecture i386
sudo dpkg --add-architecture amd64

ターミナルで次のコマンドを実行してください:

sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git lib32ncurses5-dev lib32z1-dev libgconf2-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip lzop libxml2-utils openjdk-8-jdk nodejs unzip python

Ubuntu 16.10

ubuntu 16.10 では、既定の make のバージョンは 4.1 であり、android のビルドができません。この問題を回避するには、コンソールで次のコマンドを実行します:

wget http://ftp.us.debian.org/debian/pool/main/m/make-dfsg/make_3.81-8.2_amd64.deb

sudo dpkg -i make_3.81-8.2_amd64.deb

自動アップグレードを避けるため、make パッケージを保持するようにマークします:

sudo apt-mark hold make

次に、必須のアーキテクチャを追加する必要があります:

sudo dpkg --add-architecture i386

sudo dpkg --add-architecture amd64 

ターミナルで次のコマンドを実行します:

sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git lib32ncurses5-dev lib32z1-dev libgconf2-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip lzop libxml2-utils openjdk-8-jdk nodejs unzip python 

USB アクセスの構成

Linux システムでは通常時、通常のユーザーは USB デバイスへ直接アクセスすることが出来ません。/etc/udev/rules.d/51-android.rules にファイルを作成し、次のコマンドを実行してください:

TODO: Merge Bug 1230463

wget -S -O - https://raw.githubusercontent.com/cm-b2g/B2G/1230463/tools/51-android.rules | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules

wget -S -O - https://raw.githubusercontent.com/mozilla-b2g/B2G/master/tools/51-android.rules | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules

新しいルールは次に端末を接続した時に有効になります。

ccache の設定

大量のコードをビルドしますが、そのうちの大半はビルド毎に変更がありません。コンパイルツールの ccache を使うことで、コンパイルを劇的に高速化できます。次のコマンドで 50GB キャッシュを与えます:

ccache -M 50G

補足: ディスク領域が限られている場合は、キャッシュを 50GB 以下に設定してください。

その他のディストリビューション

Fedora 22

ターミナルで次のコマンドを実行してください:

sudo yum install autoconf213 bison bzip2 ccache curl flex gawk gcc-c++ git glibc-devel glibc-static libstdc++-static libX11-devel make mesa-libGL-devel ncurses-devel patch zlib-devel ncurses-devel.i686 readline-devel.i686 zlib-devel.i686 libX11-devel.i686 mesa-libGL-devel.i686 glibc-devel.i686 libstdc++.i686 libXrandr.i686 zip perl-Digest-SHA wget lzop libxml2-utils

Arch Linux

ターミナルで次のコマンドを実行してください:

sudo pacman -S --needed alsa-lib autoconf2.13 bison ccache curl firefox flex gcc-multilib git gperf libnotify libxt libx11 mesa multilib-devel wget wireless_tools yasm zip lib32-mesa lib32-mesa-libgl lib32-ncurses lib32-readline lib32-zlib lzop

lib32-* パッケージをインストールするには、multilib リポジトリを有効にしておく必要があります。

初期状態で、Arch Linux は Python3 を使用するため、強制的に古い Python2 を使うようにする必要があります。python2 の実行モジュールを python にリンクすることもできますが、お勧めできませんし、過ちの元になると考えられます。これは、インストールされている python3 を破壊します。より良い方法は、次のように virtualenv/virtualenvwrapper を使うことです:

sudo pacman -S python-virtualenvwrapper
source /usr/bin/virtualenvwrapper.sh
mkvirtualenv -p `which python2` firefoxos
workon firefoxos

次のコマンドで python のバージョンを確認してください:

python --version

"Python 2.7.12" 以降のバージョンが表示されます。

Gentoo Linux

ccache のインストール

ccache をインストールする必要があります。これは部分的なビルドをキャッシュするツールです。

# emerge -av ccache

ccache はサポート問題を頻繁に起こすことが知られているので、Gentoo では、明示的に控えめに使うのをおすすめします。

このガイドの続く手順で、./build.sh スクリプトが呼ばれる時に ccache を使う必要があります。ここで ccache を有効にするには、Gentoo ユーザは代わりに明示的に展開されたパスでコマンドを実行してください:

PATH=/usr/lib64/ccache/bin:$PATH ./build.sh
パーティションイメージの生成

B2G を実際の物理ハードウェア用にビルドする場合、ある時点で端末にアップロードするパーティションイメージを生成したくなるかもしれません (例えば、fastboot ユーティリティを使ってバックアップファイルを復元する時など)。

ここでは、ファイルシステムイメージが YAFFS2 (Yet Another Filesystem 2) であるとします。 Gentoo は最新 (つまり git HEAD リビジョン) の yaffs2-utils ユーザーランドのパッケージをサポートします。 (注記: YAFFS2 イメージをマウントする場合、カーネルパッチも必要になります。ただし、代わりに分解してリビルドすることが可能なため、これは真に必要とは言えません。)

# emerge --autounmask-write yaffs2-utils; etc-update; emerge -av yaffs2-utils

こうしたイメージを生成するには、パーティションの単にパッケージ化したいファイルシステムツリーの親ディレクトリに移動し、次のコマンドを実施してください:

mkyaffs2image system/ system.img

古いブランチ

B2G OS の古いブランチをコンパイルする必要がある場合、ビルドエラーが発生する可能性があります。過去のブランチをビルドするのページを参照してください。

Mac OS X での必要条件

注記: Mac 上で B2G を Keon 端末用に設定し、ビルドしても動作しません この端末用に B2G をビルドするには Linux を使う必要があります。

注記: Fairphone2 向けの B2G は Mac では動作しませんこの端末向けの B2G をビルドするには Linux を使う必要があります。理由は blob が MD5 チェックに成功しないためです。詳しくは Fairphone のフォーラムトピック を見てください。

Mac OS X 上で B2G OS をビルド可能ですが、簡単ではありませんし、よくサポートされてもいません。古い Xcode をインストールする必要がありますが、現行バージョンの Xcode と競合してしまうでしょう。最も良い体験を求めるなら、Ubuntu 14.0 LTS でビルドすべきですが、こだわるなら、下記のステップをお試しください:

OS X 10.11 El Capitan & OS X 10.10 Yosemite

重要: OS X 10.11 El Capitan でのビルドは実験的であり、完了しない可能性があります!以下の手順が改善しワーニングが無くなるまで OS X 10.10 Yosemite に留まってください。

大文字小文字を区別するファイルシステム

OS X のデフォルトインストールは、B2G OS のビルドに適しません。大文字小文字を区別するファイルシステム上で、 OS X を再インストールする必要があるでしょう。

Xcode 7.2

  1. Apple ストアから、最新の Xcode をインストールします。
  2. 次のコマンドで、ライセンスに同意します:
sudo xcodebuild -license

Xcode Command Line Tools

次のコマンドで、Xcode Command Line Tools をインストールします:

xcode-select --install

Xcode 5.1.1

重要: Homebrew をインストールし、Xcode 5.1.1 SDK に移行する前にツール類 (以下のセクションを参照してください) をインストールしてください。 - Homebrew はおそらく Xcode 5.1.1 SDK では失敗するでしょう!

AOSP、そして B2G OS は最新バージョンの Xcode SDK と互換性がありません。最新バージョンと並んで古いバージョンをインストールする必要があります。

  1. Xcode 5.1.1 を developer.apple.com からダウンロードし、/Applications/Xcode-5.1.1 へインストールします。
  2. 下記のコマンドを実施し、Xcode 5.1.1 SDK を使用するように変更します:
sudo xcode-select --switch "/Applications/Xcode-5.1.1/Xcode.app/Contents/Developer"

Java SE Development Kit 7

AOSP、そして B2G OS は Java JDK v8 との互換性が無いため、Java JDK v7 をインストールする必要があります。http://www.oracle.com/ からダウンロードしてください。
 

Bash Profile

自身の ~/.bash_profile ファイルに下記を追加してください:

export PATH=~/bin:$PATH
export PATH=/usr/local/bin:$PATH
export BUILD_MAC_SDK_EXPERIMENTAL=1
export LC_CTYPE=C
export LANG=C
export USE_CCACHE=1

Homebrew

Apple から提供されていない多くのコマンドラインツールをインストールする必要があります。Homebrew をインストールします:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

次のコマンドでツールをインストールします:

brew install ccache coreutils cmake findutils git gnu-tar gnu-sed gpg lzop yasm

autoconf の特定のバージョン 2.13 をインストールする必要があります:

brew install homebrew/versions/autoconf213

ccache の設定

大量のコードをビルドしますが、そのうちの大半はビルド毎に変更がありません。コンパイルツールの ccache を使うことで、劇的にコンパイルを高速化できます。次のコマンドで 50GB キャッシュを与えます

prebuilts/misc/darwin-x86/ccache/ccache -M 50G

OS X 用の古い手順

Mac のブートストラップを B2G OS で動かす

次に、ターミナルを開いて次のコマンドを実行してください:

curl -fsSL https://raw.github.com/mozilla-b2g/B2G/master/scripts/bootstrap-mac.sh | bash

これは、ブートストラップスクリプトを pull および実行して、エミュレータをビルドするための必要条件を満たしているか確認するものです。また、不足しているものがあればインストールを促したり、警告を出して問題の解決案を提案します。このスクリプトがインストールを確認する項目は次の通りです:

B2G を開発するには特別なブランチを取得する必要があります。これは、Mercurial から読み込まれます (詳細)。 OS X にはデフォルトで Mercurial がインストールされていないため、このコードを実行してインストールする必要があります:

$ brew install mercurial

Mac のファイルシステムの大文字小文字の区別を意識する

Mac OS X はデフォルトで、大文字と小文字の区別をしないファイルシステムです。 Linux カーネルには、同一名で大文字小文字の異なるファイルが多数あるため、これが問題となります。例えば、ヘッダファイルの xt_CONNMARK.hxt_connmark.h を見てください。その結果、/kernel の中で多数のファイルが ./config.sh の後に修正されます。

多くの場合、ビルドはうまくいきます。いくつかのプラットフォームでは、しかしながら、次のエラーに出くわす可能性があります:

ERROR: You have uncommited changes in kernel
You may force overwriting these changes
with |source build/envsetup.sh force|

ERROR: Patching of kernel/ failed.

この問題についての多くの議論と解決の提案は、Bug 867259 を参照してください。

もう一つは、大文字と小文字を区別するファイルシステム上でビルドするのが、常に最も安全でしょう。その最も簡単な方法は、別のマウント可能な、大文字と小文字を区別するディスクイメージを作成することです。-volname の名前変更で大文字を使用しないように気をつけてください。これは、Apple のDisk Utility アプリケーションを使うか、コマンドラインから可能です:

hdiutil create -volname 'firefoxos' -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g ~/firefoxos.sparseimage

ドライブをマウントするには:

open ~/firefoxos.sparseimage

マウントされたドライブに移動するには:

cd /Volumes/firefoxos/

この場所にコードをチェックアウトしたら、大文字小文字の問題を心配することなくコンパイルできます。

任意: HAX のインストール

Intel は、x86 エミュレータを使用している人に対して、Mac 上でエミュレートされたコードの代わりにネイティブコードで B2G エミュレータを動作させる特別なドライバを提供しています。これを使用したい場合は、ダウンロードしてインストールしてください。必ず必要なものではありませんが、エミュレーションのパフォーマンスと安定性が向上します。

HAXのインストール前に Android SDK をインストールする必要があるでしょう。

adb のインストール

ビルドプロセスでは、B2G をビルドする前にスマートフォンにインストールされた Android からバイナリ BLOB を抜いておく必要があります (もちろん、エミュレータをビルドする場合を除いて)。このためには、adb (Android Debug Bridge) が必要になります。ADBをインストールする の記事で adb のインストール方法を説明しています。

adb を将来使う時の注意: adb は電話機を見るのに、画面ロックが解除されている必要があります (少なくとも B2G OS の最近のパージョンで)。たぶん画面ロックを無効にしたくなるでしょう (ビルド手順の後で説明します)。

Samsung Galaxy S2 用の追加手順

もし Samsung Galaxy S2 用にビルドする予定なら、heimdall もインストールする必要があります。 詳細は、heimdall のインストール を参照してください。ブートストラップスクリプトは実行してくれません

加えて、下記の点も心に留めておかなければなりません:

  1. ようやく S2 端末に独自ビルドをインストールする時には、flash.sh を実行する前に、factoryfsFACTORYFS に、kernelKERNEL にすべて変更する必要があります (pit の出力を確認してください)。そうしないと動作しません。
  2. Siyah-s2 のリカバリー ROM の動作が最も良く、CWM も同じく動きますが、いくつかの問題があります。
  3. flash.sh を用いて S2 に焼くと、ベース OS の動作は良いが、そのままでは Gaia に問題が出ることがあります。make reset-gaia PRODUCTION=1 でリフレッシュすることで、そうした問題が片付くでしょう。
注意: もし多くの Samsung 製スマートフォンの内容管理に使用される Samsung Kies ツールをインストール済みなら、 B2G OS を端末に書き込む前にそれを削除する必要があります。Windows では、標準のアプリケーション削除の処理を使用できます。Mac では Kies インストールディスクイメージに、システムから完全に Kies を削除するユーティリティがあります。 Kies がインストールされたままだと、フラッシュメモリへの書き込みがうまく動作しないでしょう。もし Kies を削除することを忘れても、ビルドシステムはそれを検知して、アンインストールするよう知らせてくれます。アンインストールツールが正しく ~/Library/Application Support/.FUS フォルダを削除できず、ユーザスタートアップ項目リストの中にユーティリティへの参照が残るので注意してください。それらは手動で削除することになるでしょう。

heimdall のインストール

heimdall は、Samsung Galaxy S2 に書き込むためのユーティリティです。Boot to Gecko フラッシュユーティリティが、B2G OS がインストールされたスマートフォンの内容を置き換える場合や、端末に B2G と Gaia の更新バージョンの書き込む場合に使用されます。Galaxy S2 上に B2G OS をインストールしたい場合は必要ですが、その他の端末では不要です。他の端末向けには、代わりに fastboot ユーティリティをビルドして使用します。

注記: 繰り返しですが、これは、Samsung Galaxy S2 に B2G OS をインストールする場合にのみ必要であることに注意してください。

heimdall をインストールするには 2 通りの方法があります:

注記: 最新の Heimdall のソースからのビルドは、現在エラーが発生します。代わりに、Ubuntu 14.04 のリポジトリの 64bit パッケージ版を使うのが良いでしょう。つまり、できるだけ heimdall-flash:i386 の使用は避けてください。

次のステップへ

この時点で、B2G OS のコードを取得する 準備ができているはずです!

ドキュメントのタグと貢献者

 このページの貢献者: Marsf, hamasaki, Uemmra3, T.Ukegawa, taguchi-ch, dynamis, ethertank
 最終更新者: Marsf,