AOSPビルド · 3 min read · Nov 26, 2025

Nexus 5Xの検証済みブートと別のロックスクリーンパスワードを持つセキュアなAOSPビルドの構築とフラッシング

免責事項とライセンス

このチュートリアルで提供されるすべてのデータと情報は、情報提供のみを目的としています。著者は、このチュートリアルの情報の正確性、完全性、最新性、適合性、または有効性について一切の表明を行わず、この情報の表示または使用から生じるいかなるエラー、遺漏、遅延、または損失、傷害、または損害についても責任を負いません。すべての情報は現状のまま提供されます。

いかなる場合においても、著者またはhowtoforgeは、データまたは利益の喪失から生じる、間接的または結果的な損失または損害を含む、いかなる損失または損害についても責任を負いません。

特に記載がない限り、このページの内容はクリエイティブ・コモンズ 表示 3.0 ライセンスの下でライセンスされており、コードサンプルはApache 2.0ライセンスの下でライセンスされています。

動機

Nexus 5Xと6Pは、ユーザーが提供した(ベンダーによって強制されない)署名キーに基づく検証済みブートをサポートする最初のデバイスでした。「崩壊」する前の[1]、CopperheadOS(セキュリティ強化されたAOSPバリアント)は、セキュアなAOSPバージョンを構築およびフラッシュするための良好なドキュメントとスクリプトを提供していました[2]。しかし、最近数ヶ月間、プロジェクトは更新を提供しなくなったため、ほとんどの元ユーザーは実行可能な代替手段を探しています。

私の印象では、多くのユーザーが自己構築したAOSP ROMを実行することが、LineageOSなどの他のオプションに切り替えるよりもはるかに良い代替手段であることに同意しています。これにはいくつかの良い理由があります:

  • AOSPはプレーンなストックであり、望ましくない機能がほとんどありません
  • AOSPは「ユーザー」ビルドバリアントとして構築できるため、より安全であると期待されます(私はLineageOSのユーザービルドをコンパイルしようとしましたが、LineageOSがAOSPソースに加えた侵襲的な変更のために壊れているようです)
  • ソースが取得されると、AOSPは単純に構築できます。LineageOSとは異なり、ビルド中に追加のソースをダウンロードし始めません。

Nexus 5Xは開発者デバイスとして十分にサポートされていると考えられているため、AOSPの構築プロセスは簡単でよく文書化されていると期待していました。しかし、実際にはいくつかの注意点があります:

  • 公式ドキュメントに従ってベンダーバイナリを含めると、ビルドが不完全になり、毎回ロック解除とワイプを行わない限り、増分更新に使用できません(ベンダーパーティション、ラジオROMなどはビルドに含まれていません)
  • 公式ドキュメントは、検証済みビルドを直接適用可能な方法で使用する方法を説明していません。CopperheadOSのドキュメントにはより良い文書があります[05]が、指示はAOSPには適用できない古いスクリプトに依存しています。
  • 「弱い」PINをパスフレーズとして使用し、強力なパスワードをディスク暗号化キーとして使用する方法に関するドキュメントはありません(新しいPixelデバイスとは異なり、Nexus 5Xは古いFDEアプローチに基づいています)。LineageOSデバイスで機能する方法は、デバイスがルート化されていることを前提としているため、通常のAOSPユーザービルドには適用できません。

このチュートリアルは、これらの注意点を解決し、検証済みブートを使用してNexus 5X用のAOSPを構築およびフラッシュする方法についての詳細な指示を提供することを目的としています。また、Nexus 6Pにも小さな変更で適用できるはずですが、手元にNexus 6Pがなかったため、テストできませんでした。

小さなスクリプトコレクション(Googleが提供するバイナリからベンダーブロブを適切に抽出するために必要)とその依存関係「oatdump」(公開共有からバイナリとしてダウンロードされる)を除いて、指示は「非公式」(「Google提供ではない」という意味)なサードパーティリソースを使用していません。

以下の自由の問題に注意してください:

  • AOSPソースツリーには、いくつかのプリビルドバイナリ(例:ツールチェーン、Linuxカーネルなど)が含まれています。これらのバイナリはソースから再構築できますが、必要な手順はこのチュートリアルではカバーされていません。
  • Nexus 5Xの多くのハードウェアコンポーネントを使用するために必要なベンダーブロブのソースコードは公開されていません!
  • プロプライエタリなベンダーファイルを抽出するために使用されるツール「android-prepare-vendor」は、プリビルドバイナリ自体を使用しています(外部ホストされているものもあります)。

要件と前提条件

このチュートリアルは、以下の前提条件があることを想定しています(他のバージョン/ディストリビューションでも動作する可能性がありますが、他のパッケージや追加のパッケージが必要になる場合があります):

  • アンロックされたブートローダーを持つNexus 5X(アンロックはこのチュートリアルではカバーされていません)

  • 専用の目的で使用されるx86_64バリアントのDebian9を実行している(仮想)マシン(sudoを使用していると仮定します。使用していない場合は、コマンドを適応してください)

  • 少なくとも5GBのRAM(多い方が良い)

  • 約200MBのディスクスペース

  • 高速インターネット接続(約30GBのデータをダウンロードする必要があります)

依存関係のインストール

まず、LineageOSビルドの指示[3]に記載されているように依存関係をインストールします(AOSPビルドの指示にはこのリストは提供されていません):

sudo apt install bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev

次に、追加の依存関係をインストールします:

sudo apt install cmake zip unzip openjdk-8-jdk-headless

次に、ホームディレクトリにbinパスを設定します(Debian 9ではこのパスはbashプロファイルで自動的に設定されます):

mkdir -p ~/bin

repoコマンドをインストールします:

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo  
chmod a+x ~/bin/repo

repoバイナリのチェックサムを確認します。現在のバージョン1.23のチェックサムはe147f0392686c40cfd7d5e6f332c6ee74c4eab4d24e2694b3b0a0c037bf51dc5である必要があります。後のバージョンについてはAOSPビルドの指示ページ[4]を確認してください。チェックサムを計算するには、次のコマンドを使用します:

sha256sum ~/bin/repo

次に、以下のコマンドを実行してgitのアイデンティティを提供します(匿名のままでいることを好む場合は、例のデータをそのままにしておいても構いません):

git config --global user.email "[email protected]"
git config --global user.name "Your Name"

残念ながら、Debian 9のbrotliパッケージ(ビルドをパックするために必要)は古すぎるため、現在のバージョンを自分でビルドする必要があります。まずソースコードを取得し、そのディレクトリに移動します:

git clone https://github.com/google/brotli.git

ビルドを実行します(-j15をCPUスレッドの数に置き換えます):

cd ~/brotli
./configure-cmake
make -j15

最後に、生成されたバイナリをbinパスにコピーします:

cp brotli ~/bin/

最後に、ログアウトして再度ログインし、bashプロファイルが再読み込みされるようにします。

ベンダーブロブの取得

Googleが提供するバイナリドライバパッケージからベンダーブロブを使用する際にはいくつかの問題があります([5]を参照)。これらを解決するために、工場イメージからベンダーブロブを抽出する「android-prepare-vendor」という外部スクリプトのセットを使用します。

まず、リポジトリをクローンします:

git clone https://github.com/anestisb/android-prepare-vendor.git

Googleのサイト[6]を使用して、Nexus 5Xの最新のビルドタグを確認します(現在はOPM6.171019.030.K1です)。

リポジトリに移動し、出力ディレクトリを作成してスクリプトを実行します(Debian 9のfuseに関する問題のため、rootとしてスクリプトを実行します):

cd android-prepare-vendor
mkdir bullhead-blobs
sudo ./execute-all.sh -k -d bullhead -a bullhead -b OPM6.171019.030.K1 -o bullhead-blobs

AOSPソースのダウンロード

注意:以下の手順には、ダウンロードしたソースを検証するための指示が欠けています。

まず、ソースが保存されるディレクトリを作成します:

mkdir -p ~/aosp

Nexus 5Xの現在のビルドタグを知っているので、[6]で利用可能な概要を使用して対応するAndroidタグを確認します。次に、対応するブランチのAndroidマニフェストをチェックアウトします(この例ではandroid-8.1.0_r46を使用します):

cd ~/aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-8.1.0_r46

を使用します。以下を除外または置き換えることをお勧めします:

  • - QuickSearchBoxはAOSPではほとんど壊れています
  • - これは、2つの故障したCPUコアが無効にされたパッチされたデバイステーブルを含むリポジトリに置き換えます。これには約30%のパフォーマンスペナルティがあります。それでも、ブートループの影響を受けていないNexus 5Xを持っている場合でも、将来的に影響を受ける可能性が高いため、推奨されます。
  • - 後でインストールできるAOSPのストックカレンダーのより良い代替品があります(Etarなど)
  • - Silence.imはAOSPのメッセージングアプリのより良い代替品です
  • - OpenCameraはストックカメラのより良い代替品です

すべてのリポジトリを取得します(時間がかかる場合があります。主にインターネット接続に依存します):

repo sync

最後に、以前に生成されたベンダーブロブをrootとして(これが必要です。さもなければqmusや他のブロブが欠落し、後のコンパイルに失敗します)AOSPツリーのベンダーディレクトリにコピーします(工場ビルド番号を現在のものに置き換えます):

sudo cp -av ~/android-prepare-vendor/bullhead-blobs/bullhead/opm6.171019.030.k1/vendor .
sudo cp -av ~/android-prepare-vendor/bullhead-blobs/bullhead/opm6.171019.030.k1/vendor_overlay .

ユーザーをベンダーディレクトリの所有者にします(さもなければ、後でビルドが失敗します)。yourusernameを実際のユーザー名に置き換えます:

sudo chown -R yourusername:yourusername ~/aosp/vendor
sudo chown -R yourusername:yourusername ~/aosp/vendor_overlay

キーの生成

ビルド変数を設定します:

source build/envsetup.sh

検証キーを生成するために必要なツールをビルドします:

make generate_verity_key

キーを保存するためのディレクトリを作成します(CopperheadOSのドキュメント[2]では、各デバイスに対して別のキーを使用することを推奨しています。この場合はbullhead):

mkdir -p keys/bullhead

今はキーを生成する時間です(キーにパスワードを設定しないでください):

cd keys/bullhead
../../development/tools/make_key releasekey '/C=DE/ST=Hometown/L=XX/O=yournamehere/OU=yournamehere/CN=yournamehere/[email protected]'
../../development/tools/make_key platform '/C=DE/ST=Hometown/L=XX/O=yournamehere/OU=yournamehere/CN=yournamehere/[email protected]'
../../development/tools/make_key shared '/C=DE/ST=Hometown/L=XX/O=yournamehere/OU=yournamehere/CN=yournamehere/[email protected]'
../../development/tools/make_key media '/C=DE/ST=Hometown/L=XX/O=yournameher /OU=yournamehere/CN=yournamehere/[email protected]'
../../development/tools/make_key verity '/C=DE/ST=Hometown/L=XX/O=yournamehere/OU=yournamehere/CN=yournamehere/[email protected]'
cd ~/aosp  

AOSPが要求する形式に検証キーを変換します:

out/host/linux-x86/bin/generate_verity_key -convert keys/bullhead/verity.x509.pem keys/bullhead/verity_key

コンパイル

ビルド変数が設定されていることを確認します:

cd ~/aosp
source build/envsetup.sh

bullheadデバイスのユーザーランチ構成を作成します(ユーザーdebug構成が必要な場合はuserをuserdebugに置き換えます):

lunch aosp_bullhead-user

Jackを無効にします(これはしばしばコンパイルの問題を引き起こし、Android 9では非推奨になっています):

export ANDROID_COMPILE_WITH_JACK=false

ターゲットファイルパッケージをコンパイルします(-j15をCPUスレッドの数に置き換えます):

make target-files-package -j15

パッケージ化と署名

出力ファイルを保存するためのディレクトリを作成します(通常のビルドディレクトリであるoutの外):

mkdir dist

distターゲットを実行します(-j15をCPUスレッドの数に置き換えます):

make dist -j15

デフォルトのテストキーをあなたのキーに置き換えて署名されたターゲットファイルパッケージを作成します(yourusernameをシステム上の実際のユーザー名に置き換えます):

build/tools/releasetools/sign_target_files_apks -o -d keys/bullhead --replace_verity_public_key keys/bullhead/verity_key.pub --replace_verity_private_key keys/bullhead/verity --replace_verity_keyid keys/bullhead/verity.x509.pem out/dist/aosp_bullhead-target_files-eng.yourusername.zip dist/signed-target-files.zip

署名されたOTAパッケージを作成します:

build/tools/releasetools/ota_from_target_files -k keys/bullhead/releasekey dist/signed-target-files.zip dist/signed-ota-update.zip

フラッシング

Nexus 5Xデバイスをブートローダーにブートします(ボリュームダウンを押し続け、次に電源を押します)。

デバイスをUSB経由でマシンに接続します(VMでビルドする場合は、VMで利用できるようにします)。distディレクトリの内容を別のマシンにコピーしてそこからフラッシュすることもできますが、AOSPソースからビルドされたfastboot/adbバイナリを使用してフラッシュすることを前提としています(外部からフラッシュする場合は、fastbootバイナリが最新であることを確認してください)。

signed-target-files.zipからイメージを展開します:

cd ~/aosp/dist
unzip `signed-target-files.zip IMAGES/*  
`

すべてのイメージをフラッシュします:

../out/host/linux-x86/bin/fastboot flash boot boot.img
../out/host/linux-x86/bin/fastboot flash recovery recovery.img
../out/host/linux-x86/bin/fastboot flash vendor vendor.img
../out/host/linux-x86/bin/fastboot flash system system.img

デバイスの物理ボタンを使用して「システムを再起動」を選択し、新しいシステムが機能することを確認します。

最後に、ブートローダーに戻り、再ロックします(すべてのデータが消去されます):

out/host/linux-x86/bin/fastboot flash oem locking

これで完了です!

別のブート/ロックスクリーンシークレットの設定

別のブート/ロックスクリーンパスワードを設定するには、小さなトリックを使います:

  • ブートローダーをアンロックします(すべてのデータが消去されます)
  • ユーザーデバッグビルドをコンパイルしてフラッシュします(上記を参照)
  • ブートローダーをロックします
  • Android UIを使用してロックスクリーンPIN/パスワードを設定します。ユーザー構築に切り替えるとデータを消去しない限り、再度変更できないため、正しいものを選択してください。
  • adb経由でデバイスに接続します
  • rootとして、次のコマンドを実行します:vdc cryptfs changepw password your-new-password
  • 再起動し、機能することを確認します
  • 通常のユーザービルドをコンパイルします(ブートローダーをアンロックしないでください!)
  • ユーザービルドをフラッシュします

注意:追加の手順なしでは、リカバリは古いビルドをフラッシュすることを許可しません。したがって、ユーザーデバッグビルドよりも新しいユーザービルドをフラッシュする必要があります!

アップデートの処理

新しいAOSPリリースにアップグレードしたい場合は、最初に新しいリリース番号を確認する必要があります。

次に、古いマニフェストをワイプします(バックアップを作成し、更新されたものに再度行いたい変更がある場合):

cd ~/aosp
rm -rf .repo/manifests.git
rm -rf .repo/manifest.xml

また、(その時点で古くなった)ベンダーブロブとprepare-vendorリポジトリをワイプします:

rm -rf ~/android-prepare-vendor
rm -rf vendor
rm -rf vendor_overlay

また、ビルドツリーとビルドアーティファクトをクリーンアップします:

rm -rf out
rm -rf dist

次に、のみ以下の手順をやり直します:

  • ベンダーブロブの取得
  • AOSPソースのダウンロード(これははるかに迅速になります。変更のみがプルされるため)
  • コンパイル
  • パッケージ化と署名

理論的には、更新をリカバリから新しいOTAパッケージとしてサイドロードできるはずです(同じ-あなたの-キーで署名されているため)。実際には、まだ機能しません(次のセクションを参照)。そこで、次のように進む必要があります:

  • すべてのデータをバックアップします
  • ブートローダーをアンロックします(データが消去されます)
  • 更新されたイメージをフラッシュし、ブートローダーを再ロックします(「フラッシング」セクションで説明した通り)

WIP:署名されたOTAアップデート

このセクションはWIPであり、記載された指示はまだ機能しません!

理論的には、リカバリから署名されたOTAアップデートを作成してフラッシュすることが可能であるはずです。しかし、私のすべての試みは「署名の検証に失敗しました」というエラーに終わりました。Googleが提供するベンダーファイルを直接使用する場合は機能するため、これはベンダーファイルまたは他のファイル(ブートローダーやラジオイメージなど)が適切に署名されていないことに関連していると考えています。

署名されたOTAパッケージを次のように作成します:

build/tools/releasetools/ota_from_target_files -k keys/bullhead/releasekey dist/signed-target-files.zip dist/signed-ota-update.zip

デバイスの物理ボタンを使用してリカバリに再起動します。

リカバリでは、小さなAndroidシンボルが表示されます。電源ボタンを押し続け、音量を上げてリカバリメニューに入ります。

次に、デバイスの物理ボタンを使用して「adbからの更新」を選択します。

署名されたOTAパッケージをサイドロードします:

out/host/linux-x86/bin/adb sideload dist/`signed-ota-update.zip`

参考文献

[1] https://www.reddit.com/r/CopperheadOS/comments/8qdnn3/goodbye/

[2] https://copperhead.co/android/docs/building

[3] https://wiki.lineageos.org/devices/bullhead/build

[4] https://source.android.com/setup/build/downloading

[5] https://github.com/anestisb/android-prepare-vendor

[6] https://source.android.com/setup/start/build-numbers.html#source-code-tags-and-builds

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。