B2G OS

B2G インストーラ アドオン

B2G installer アドオンは、長い間問題となっていた、blob (プロプライエタリなコンポーネント) のために完全なシステムビルドが再配布できない件を解決します。この記事では、このアドオンの動作とインストールする方法を説明します。

重要: このアドオンはまだ実験的段階にあり、メンテナーが必要です。当座は、何か悪いことが起こっても再フラッシュできる端末だけに使うことをお勧めします。現在は Linux (32 / 64 bit) と OSX (64 bit) のみサポートされています。

重要: アドオンの初回リリースにあたり、次の基本的なユースケースのサポートだけを視野に入れていることをご理解ください: Android (または CyanogenMod) システムが動作しているサポート端末に B2G を焼きこむ。B2G のアップグレードを扱い、端末が (まだ) 指定されていないソースから Blob を入手する。

Blob フリーな配布データをビルドする

上記の有名な問題の解決法は、デバイスビルドに必要な全てを同梱する、いわゆる "Blob フリー" な配布データ (バグ 1175934 を参照) を作成することです:

  • ソースからフルシステムをビルドする
  • 端末の互換性情報
  • パーティションの割り当て
  • 必要な Blob の一覧と、最終ビルドへ必要なマッピング先

こうした Blob フリーな配布データは、B2G のビルド時に |blobfree| make ターゲットを指定することでビルドできます:

$ ./build.sh blobfree

注記: これについての詳細は、B2G のビルドについてのページの blobfree セクション を参照してください。

B2G installer アドオンは、こうした配布データのインストールを容易にします。

新規端末のサポートを追加する

ユーザが互換性のある端末を接続した時に、新しい端末をアドオン内で利用可能にするには、いくつかのステップが必要です:

  1. お持ちの端末が、Blob フリーな配布データの生成をサポートしていることを確認してください。B2G のビルドについてのページの blobfree セクション を参照してください。
  2. 端末がこれをサポートしていたら、アドオンから利用可能にする手順を進められます。まずは、ビルドのリポジトリ をフォークしてください。
  3. Bugzilla の、Firefox OS :: B2GInstaller コンポーネントに、バグ登録してください。
  4. 新しい端末の情報を builds.json に追加してください。
  5. Github にプルリクエストを送り、それに作成したバグを添付し、review :gerard-majax を申請してください。

builds.json ファイルにはオブジェクト配列が含まれ、各互換端末が記述されています。これらのオブジェクトは、次のプロパティを持ちます:

  • id: ユーザに表示される端末名。
  • builds: この端末で利用可能なビルドの配列。配列内の各ビルドオブジェクトには、次のプロパティが必要:
    • name: ビルドの選択時に表示される文字列。
    • description: このビルドについてのユーザフレンドリな説明。
    • url: Blob フリー配布ファイルの URL。
  • adb: Android プロパティのセット。互換性のある端末として検出されるために一致しなければならないもの。
  • fastboot: Fastboot 変数のセット。互換性のある端末として検出されるために一致しなければならないもの。
  • requiresRoot: 端末のインストールを続けるのにルート化が必要かどうかを決める任意の値。デフォルト値は true

注記: 各 Android プロパティと Fastboot 変数は、文字列 (完全に同一) または配列 (配列値のいずれかと完全に同一) に対して一致します。

インストールする

B2G installer アドオンをインストールするには、次のステップに従います:

  • Firefox Desktop Nightly を起動し、ADB Helper (v0.8.6 以降) がインストールされていることを確認してください。インストールのためのリンクは、 fxos-simulator のページ 下部にあります。
  • Firefox の 別のプロファイル を作成してください。
    ./firefox -P
  • 次のどちらかの方法で B2G installer アドオンの XPI をインストールします:
    • AMO サイトからインストールする (推奨)。
    • 自分でビルドする。Hacking セクションを参照してください。
  • ADB Helper 0.8.6 以降をインストールする。(WebIDE -> Project -> Manage Extra Components)
  • システムの /tmp/ (一時フォルダ) に 2GB 以上の空き領域があることを確認してください。
  • ロケーションバーに about:b2g-installer と入力してページを読み込みます。初回はブラウザを再起動する必要があるでしょう。
  • アドオンの改善に協力したい方は、使用セッションからの情報を直接収集するチェックボックスにチェックを入れてください。この収集される情報については、下記の Data セクションで説明します。

VM (仮想マシン) を利用する

事前ビルドされた仮想マシンをOVAパッケージとして利用することもできます。Please check with VirtualBox or your favorite tool on how to import this appliance. It provides a ready-to-use B2G Installer installation that supports some devices out of the box (udev, etc. already configured.) See バグ 1204482 for more details, and the link below to download. Please verify the SHA1 to make sure the VM is good to use (~1.5GB download).

https://drive.google.com/file/d/0B8Ju6ek0Knd6WnE0N2F6ZHF0VTQ/view?usp=sharing
SHA1: 01574220718e90d7de498952270cbbaee8e85acd

It is recommended to use the VM if you are running on an OS where B2G Installer does not work (e.g., Windows), or if you are running into issues with the steps above. The default configuration of this VM should handle those devices:

  • Mozilla Flame
  • Sony Xperia Z3 and Sony Xperia Z3 Compact
  • LG Nexus 4 and LG Nexus 5
  • Fairphone 2
  • Wileyfox Swift

If you are willing to flash another device, you will have to configure USB passthrough with the proper USB VID/PID (do not forget the fastboot ones, that might differ) and also configure udev rules.

使い方

  1. アドオンの起動時に、B2G installer が Github から builds.json をダウンロードして、利用可能なビルドのリストを取得します。ローカルの ZIP ファイルはいつでも使用できます。
  2. USB 経由で端末を接続し、アドオンが端末を検出するまでお待ちください。
  3. 端末がサポートされた端末として検出されると、利用可能なビルドのリストが表示されます。
  4. インストールしたいビルドを選び、Flash をクリックしてお待ちください。

スクリーンショット

端末が未接続の時:

最初のページ、端末は未接続

ビルドの選択時:

端末が接続され検出された

端末の焼き込み時:

端末が接続され焼きこみ中

データ

As part of improving the addon, we are collecting some data as it is used. The main goal is to ensure the add-on works properly for everyone. We are also collecting data to discover which devices people are interested in, so that supported builds can be adjusted accordingly. No tracking is being done.

We are sending two external telemetry pings to collect this data:

  • One upon the device being detected by the add-on after it is plugged into the computer (this will happen every time the add-on is running *and* a device with ADB enabled is plugged in.) For this ping, we record:
    • Device identification variables (model, build id, manufacturer, bootloader.)
    • Whether this device has a CyanogenMod build installed.
    • Whether a supported build was detected on the device.

    Sample payload of plugging a supported device:

    {
      "payload": {
        "buildid": "KOT49H",
        "isSupported": true,
        "model": "Xperia Z3 Compact (B2G)",
        "bootloader": "s1",
        "manufacturer": "Sony"
      }, [...]
    }

Sample payload of plugging an unsupported device:

{
  "payload": {
    "buildid": "LVY48I",
    "isSupported": false,
    "model": "Xperia Z1 Compact (B2G)",
    "bootloader": "s1",
    "manufacturer": "Sony"
  }, [...]
}

One each time a device flashing procedure is running. That will happen either at the end of a successful flashing procedure, or upon failure. For this ping, we record:

  • The same variables as above.
  • Whether the device is already running a B2G build.
  • The URL of the build flashed (full path for a public build, filename without the whole path for a local build.)
  • Whether the user kept their data.
  • Whether the flashing was successful.

Sample payload with flash success:

{
  "payload": {
    "isSupported": true,
    "installResult": true,
    "runsB2G": true,
    "buildid": "KOT49H",
    "keepData": false,
    "buildURL": "https://index.taskcluster.net/v1/task/gecko.v1.mozilla-central.latest.linux.nexus-4-kk-user.opt/artifacts/public/build/mako.blobfree-dist.zip",
    "model": "AOSP on Mako",
    "bootloader": "MAKOZ30d",
    "manufacturer": "LGE"
  }, [...]
}

Sample payload with flash failure:

{
  "payload": {
    "isSupported": true,
    "installResult": false,
    "runsB2G": true,
    "buildid": "KOT49H",
    "keepData": false,
    "buildURL": "https://index.taskcluster.net/v1/task/gecko.v1.mozilla-central.latest.linux.nexus-4-kk-eng.opt/artifacts/public/build/mako.blobfree-dist.zip",
    "model": "AOSP on Mako",
    "bootloader": "MAKOZ30d",
    "manufacturer": "LGE"
  }, [...]
}

Hacking

  • The code lives in the b2g-installer repo. You need to apply the patch to a mozilla-central clone, and then symlink browser/extensions/b2g-installer to your clone of the b2g-installer repo.
  • To build it you need to run |./mach build && ./mach build package|.
  • The resulting XPI will be produced in your MOZ_OBJDIR/dist/xpi-stage/b2g-installer/ directory.
  • It contains a copy of the source code of external tools from AOSP/CAF, needed when building partitions.
  • Tests are written as mochitest/xpcshell tests.
  • Check also the meta bug and its dependencies: Bug 1166276

TODO

  1. Move back out of mozilla-central tree for building. This probably implies rewriting tests with something else than mochitests.
  2. Convert building of tools from moz.build to Makefile.
  3. Support external source of blobs (needed to handle upgrade case).
  • {
      "payload": {
        "isSupported": true,
        "installResult": false,
        "runsB2G": true,
        "buildid": "KOT49H",
        "keepData": false,
        "buildURL": "https://index.taskcluster.net/v1/task/gecko.v1.mozilla-central.latest.linux.nexus-4-kk-eng.opt/artifacts/public/build/mako.blobfree-dist.zip",
        "model": "AOSP on Mako",
        "bootloader": "MAKOZ30d",
        "manufacturer": "LGE"
      }, [...]
    }

ハックする

  • The code lives in the b2g-installer repo. You need to apply the patch to a mozilla-central clone, and then symlink browser/extensions/b2g-installer to your clone of the b2g-installer repo.
  • To build it you need to run |./mach build && ./mach build package|.
  • The resulting XPI will be produced in your MOZ_OBJDIR/dist/xpi-stage/b2g-installer/ directory.
  • It contains a copy of the source code of external tools from AOSP/CAF, needed when building partitions.
  • Tests are written as mochitest/xpcshell tests.
  • Check also the meta bug and its dependencies: Bug 1166276

TODO

  1. Move back out of mozilla-central tree for building. This probably implies rewriting tests with something else than mochitests.
  2. Convert building of tools from moz.build to Makefile.
  3. Support external source of blobs (needed to handle upgrade case).

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

 このページの貢献者: chrisdavidmills, Uemmra3, Marsf, hamasaki
 最終更新者: chrisdavidmills,