OmniLab ATS の仮想デバイス

OmniLab ATS は、物理 Android デバイスなしでテストを実行できる Cuttlefish 仮想デバイスをサポートしています。Cuttlefish は、ハードウェアに依存しない機能をテストするのに適しています。仮想デバイスを使用する前に、ユーザーガイドに沿って OmniLab ATS をインストールしてください。

OmniLab ATS は、ローカルとリモートという 2 つのモードで仮想デバイスをサポートしています。次の表に、2 つのモードの比較を示します。

ローカル仮想デバイス リモート仮想デバイス
ATS ワーカーホスト上で動作 ATS ワーカーホストが SSH を通じてアクセスできるリモートホスト上で動作
x86 ベース ホストのアーキテクチャに応じて x86 または ARM
セットアップが容易 セットアップが複雑

ローカルとリモートの仮想デバイスは独立して有効にできます。各モードの詳細については以下をご覧ください。

ローカル仮想デバイスをセットアップする

このセクションでは、ローカル仮想デバイス向けに OmniLab ATS をセットアップする手順を説明します。

Cuttlefish の依存関係をインストールする

必要なカーネル モジュールが読み込まれているかどうかを確認するには、次のコマンドを実行します。

sudo modprobe -a kvm tun vhost_net vhost_vsock

ローカル仮想デバイスで OmniLab ATS を起動する

OmniLab ATS を起動する前に、すべての Cuttlefish インスタンスが停止していることを確認します。OmniLab ATS はテストサイクル中に仮想デバイスの起動と停止を自動的に行うため、既存の Cuttlefish インスタンスがあると、OmniLab ATS によって管理されているインスタンスと競合します。Cuttlefish インスタンスの停止について詳しくは、Cuttlefish を停止するをご覧ください。

ローカル仮想デバイスを有効にするには、次のコマンドを実行します。

mtt start --max_local_virtual_devices N

N は、OmniLab ATS が同時に割り当てることのできる仮想デバイスの最大数です。デフォルト値は 0 です。

デバイスノードの欠落が原因でコマンドが失敗する場合、エラー メッセージに表示された手順に沿ってカーネル モジュールを読み込んでください。それでも失敗する場合は、マシンを再起動します。

リモート仮想デバイスをセットアップする

このセクションでは、リモート仮想デバイス向けに OmniLab ATS をセットアップする手順を説明します。

Cuttlefish の依存関係をインストールする

Cuttlefish の依存関係をインストールする手順は次のとおりです。

  1. Cuttlefish > 使ってみるに記載されている手順に沿って、リモートホストに Debian パッケージをインストールします

  2. 次の手順に沿って、リモートホストの仮想デバイスの最大数を設定します

    1. root 権限で /etc/default/cuttlefish-host-resources を編集します。
    2. num_cvd_accounts を、このホストで許可する仮想デバイスの最大数に設定します。
    3. sudo systemctl restart cuttlefish-host-resources を実行します。
    4. ifconfig を実行し、cvd-wtap-* インターフェースの数を確認します。

SSH アカウントを作成する

OmniLab ATS ホストは SSH を通じてリモートホストに接続するため、リモートホストに SSH アカウントを用意する必要があります。OmniLab ATS は HOME ディレクトリのファイルを操作するため、専用のアカウントを作成することをおすすめします。

OmniLab ATS ホストは、パスワードなしでリモートホストにログインするために SSH 認証鍵のペアを必要とします。SSH 認証鍵をセットアップする手順は次のとおりです。

  1. 秘密鍵と公開鍵を生成するために、OmniLab ATS ホストで ssh-keygen を実行します
  2. リモートホストで公開鍵を ~/.ssh/authorized_keys にアップロードし、追加します

SSH アカウントが Cuttlefish の依存関係のインストールに使用したアカウントと異なる場合、SSH アカウントで Cuttlefish を起動できるようにするために、リモートホストで次のコマンドを実行します

sudo usermod -aG kvm,cvdnetwork,render $USER

リモート仮想デバイスで OmniLab ATS を起動する

OmniLab ATS を起動する前に、すべての Cuttlefish インスタンスが停止していることを確認します。OmniLab ATS はテストサイクル中に仮想デバイスの起動と停止を自動的に行うため、既存の Cuttlefish インスタンスがあると、OmniLab ATS によって管理されているインスタンスと競合します。Cuttlefish インスタンスの停止について詳しくは、Cuttlefish を停止するをご覧ください。

パフォーマンスを向上させるために、OmniLab ATS ホストとリモートホストをローカルエリア ネットワーク内でセットアップすることをおすすめします。

リモート仮想デバイスを有効にするために、OmniLab ATS ホストで次のコマンドを実行します

mtt start --remote_virtual_devices USER@HOST/N \
--remote_ssh_key KEY

USER は SSH アカウント名です。

HOST はリモートホストの IPv4 アドレスです。

N は、OmniLab ATS が同時に割り当てることのできる仮想デバイスの最大数です。

KEY は、OmniLab ATS ホストの秘密 SSH 認証鍵へのパスです

このコマンドで、OmniLab ATS を起動する前にリモートホストへの接続をテストします。コンソールに The specified --remote_virtual_devices and --remote_ssh_key are invalid. のような警告メッセージが表示された場合は、SSH の設定を確認する必要があります。

リソースの競合を避けるため、OmniLab ATS ホストが接続できるリモートホストは 1 つのみです。また、複数の OmniLab ATS ホストが同時に 1 つのリモートホストに接続することはできません。

仮想デバイスでテストを実行する

このセクションでは、ローカルまたはリモートの仮想デバイスでテストを実行する手順を説明します。

デバイスを選択する

OmniLab ATS のデバイスリストには、実際のシリアル番号ではなく、プレースホルダとして仮想デバイスが表示されます。プレースホルダは、ローカル仮想デバイスの場合は「HOSTNAME:local-virtual-device-ID」の形式で表示され、リモート仮想デバイスの場合は「remote-virtual-ADDRESS-ID」の形式で表示されます。状態は [Available] または [Allocated] のいずれかです。[Available] の状態にあるプレースホルダは、仮想デバイスが実行されていないため、テストに割り当てることができることを示します。

仮想デバイスを選択する

図 1. 仮想デバイスの選択

デバイス アクションの追加

1 つ以上の仮想デバイスを選択すると、関連付けられているデバイス アクションが自動的にリストに追加されます。アクションは、仮想デバイスの作成に必要な TradeFed パラメータとテストリソースで構成されます。

ローカル仮想デバイスのアクション

図 2. ローカル仮想デバイスのデバイス アクション

リモート仮想デバイスのアクション

図 3. リモート仮想デバイスのデバイス アクション

テストリソースの設定

Cuttlefish 仮想デバイスでは、仮想マシンツール、イメージ、Acloud の 3 つのテストリソースが必要です。一般的な Cuttlefish ビルド(たとえば、ci.android.comaosp_cf_x86_64_phone)の場合、仮想マシンツールは cvd-host_package.tar.gz でパックされており、イメージは aosp_cf_x86_64_phone-img-*.zip にあります。Acloud バイナリは OmniLab ATS に組み込まれており、Cuttlefish のすべてのバージョンと互換性があります。Acloud バイナリのデフォルトのダウンロード URL を変更する必要があるのは、デバッグ目的の場合のみです。

仮想デバイスのテストリソース

図 4. 仮想デバイスのテストリソース

テスト実行の表示

デバイスログ(kernel.loghost_log.txtlauncher.log など)が出力ファイル フォルダに収集されます。[View Output Files] をクリックして表示します。

テスト実行の結果

図 5. テスト実行の結果