osa2 memo

自分の記憶のために・・・。

いまさらながらFirefox OS v2.5をビルドして焼いてみた。

いまはB2G OSとして、一部の有志の方が継続されているようですが、Firefox OS自体はスマホOSとしてはディスコンです。そんな中、Firefox OS v2.5をビルドして、手持ちのNexus 5に焼き込みました。いろいろ引っかかったので、記録です。なお、前提としたインストール方法は以下です。

developer.mozilla.org

1. 環境構築とパッケージのダウンロード

とりあえず、VirtualBoxUbuntu 16.04を入れてましたので、Mozillaのページを見て、必要なパッケージを落としてきます。このとき、lib32z1_devと、zlib1g:i386 がヘッダファイルがダブっているようで、片方しか通せませんでしたので、lib32z1_devを捨てて、zlib1g:i386を通しました。一応、ビルドでは問題ありませんでした。makeを3.81にするのは面倒だったので、apt removeしてholdしてから、GNU Makeのページで tar 落としてきて、ビルドして、パス通っているところに入れました。

2. 普通にconfig.shしてもgaiaもgeckoもFetchエラーとなりました。

B2G OSとしては、geckoリポジトリとして、pineをMercurialで取得するようですが、v2.5が欲しかったので、gaia , gecko-b2g をGitHub(下記)から取得しました。

Mozilla-B2G · GitHub

以下、B2Gの配置ディレクトリをB2G_DIRとします。

cp -r B2G_DIR/.repo/manifests B2G_DIR/manifests

B2G_DIR/manifests/nexus-5-l.xml を以下のように編集。

<project name="gaia" path="gaia" remote="b2g" revision="v2.5"/>

<project name="gecko-b2g" path="gecko-b2g" remote="b2g" revision="b2g44_v2_5"/>

なお、build もとれなかったので、platform_build を取得します。

<project name="platform_build" path="platform_build" remote="b2g" revision="b2g-5.1.0_r1">
    <copyfile dest="Makefile" src="core/root.mk"/>
</project>

これで何度かアタックすると、全部取れるようになりました。ちなみに、マニフェストファイルを書き換えているので、以下のように config.sh を実行します。

  $ BRANCH=v2.5 ./config.sh nexus-5-l manifests/nexus-5-l.xml

2. build.sh の実行で何点か修正・・・。

まず、buildがないということですぐ落ちます。ので、platform_buildをリネームします。

$ mv platform_build build

後に、platform_build がない!とエラーを吐かれるので、先に手当てをしておきます。B2G_DIR/.repo/manifest.xml の中のplatform_buildをbuildに戻します。

<project name="build" path="build" remote="b2g" revision="b2g-5.1.0_r1">
    <copyfile dest="Makefile" src="core/root.mk"/>
</project>

で、実行すると、今度は数分後にリンカ(ld)が再配置がどうのこうの43、というエラーを吐きます。これはだいぶ探しました結果、

Android build error on Ubuntu 16.04 LTS - Viva La Vida

というページの一番下の方に、パッチを当てるか、AOSPから取ってくるファイルを新しいのにしなさいと。念のため、パッチファイルを以下に引用しておきます。これを、B2G_DIR/build/core/clang/HOST_x86_common.mk に当てます。

diff --git a/core/clang/HOST_x86_common.mk b/core/clang/HOST_x86_common.mk
index 0241cb6..77547b7 100644
--- a/core/clang/HOST_x86_common.mk
+++ b/core/clang/HOST_x86_common.mk
@@ -8,6 +8,7 @@ ifeq ($(HOST_OS),linux)
CLANG_CONFIG_x86_LINUX_HOST_EXTRA_ASFLAGS := \
--gcc-toolchain=$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG) \
--sysroot=$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/sysroot \
+ -B$($(clang_2nd_arch_prefix)HOST_TOOLCHAIN_FOR_CLANG)/x86_64-linux/bin \
-no-integrated-as

CLANG_CONFIG_x86_LINUX_HOST_EXTRA_CFLAGS := \

念のため、patchコマンドが入っている前提で、上記を、例えば、B2G_DIR/build/core/clang/patchfile に保存して、以下のコマンドでパッチ当てられます。

$ cd B2G_DIR/build/core/clang

$ cat patchfile | patch HOST_x86_common.mk

あ、忘れてましたが、gecko-b2g はそのままにしているので、geckoのパスを教えてあげる必要があります。B2G_DIR/.userconfig にexportを書きます。面倒なので、ここで .userconfig を全部載せちゃいます(echo文はなくてもいいと思います。ARCH_ARMとか要らないかも。GAIA_KEYBOARD_LAYOUTの jp-kanji は中途半端で、これだけでは日本語入力はできませんです)。

export ARCH_ARM=1
export B2G_DIR=${B2G_DIR:-$(cd $(dirname $0); pwd)}
echo "B2G_DIR = ${B2G_DIR}"
export GECKO_PATH=${B2G_DIR}/gecko-b2g
echo "GECKO_PATH= ${GECKO_PATH}"
export VARIANT=eng
export DEVICE_DEBUG=1
export GAIA_DEV_PIXELS_PER_PX=1
export GAIA_KEYBOARD_LAYOUT=en,jp-kanji
export GAIA_OPTIMIZE=1
export NOFTU=1
export PRODUCTION=1
export MOZILLA_OFFICIAL=1
export LOCALE_BASEDIR=locales/
export LOCALES_FILE=locales/languages_jp.json

このくらい直してあげると、やっとビルドが通ります。あ、ccacheの設定は忘れずに!それとやり直すときは、B2G下の out とか objdir-gecko とか消して、環境変数もきれいにクリアして、再実行しないと変更が反映されなかったりします。

3. 晴れて flash.sh 。

ここは特に問題ないですが、VirtualBoxではデバイス⇒USBでつないだNexus 5を拾ってあげる必要があります。adb/fastbootのモードの切り替わりのタイミングで、探してつなぎ直してあげないといけないです(自動で認識するように設定できるのかなぁ)。前提として、/etc/udev/rules.d/51-android.rulesの記述とudevの再起動(面倒ならVMごと再起動)が必要です。flash.shで固まるようなら、B2G_DIR/out/target/product/hammerhead/ 下にイメージがあるので、boot, cache, system, userdataをfastbootでせっせと焼いても良いかと。recoveryはどうでもいいと思いますので。私はTWRPを放り込んであります。

4. 日本語化 。

B2G_DIR/gaia/locales/ の下に、language_jp.jsonをlanguage_all.jsonからコピって作り、en-USとjaをMercurialでリソース落としてきます。この辺は公式のサイトにやり方載っています。.userconfig にLOCALE_BASEDIR, LOCALES_FILE を記述してあげます。これでやり直すと、system.img, userdata.imgだけ書き換わるので、またflashしてあげます。

5. 日本語入力 。

標準の日本語入力は労して設定しても、あまり使いやすいとはいえないです。marさんのJaKがフリックでサクサク入力できるのでオススメです。

Japanese Keyboard apps for Firefox OS

追記:2016-11-24

marさんから16万語もの辞書付きの日本語フリック入力アプリ「RenJaK」を購入することができました!ありがたや、ありがたや ^0^

以上、いまから Firefox OS を!という人はあまりいない気もしますが、自分がまた環境潰したり、その果てにまたビルドしようと思ったりしたときのための備忘録です。

^-^