Difference between revisions of "R-Car/Boards/Yocto-Gen3/AWS IoT Greengrass/v5.5.0"

From eLinux.org
Jump to: navigation, search
Line 317: Line 317:
 
## 検索に「GreengrassV2TokenExchangeRole」を入力して、同名のロールを選択する。
 
## 検索に「GreengrassV2TokenExchangeRole」を入力して、同名のロールを選択する。
 
## 「ポリシーをアタッチします」を押下して、先ほど作成したポリシーを検索して「ポリシーのアタッチ」を押下する。
 
## 「ポリシーをアタッチします」を押下して、先ほど作成したポリシーを検索して「ポリシーのアタッチ」を押下する。
 +
# <端末> Lambda 関数の実行環境準備
 +
#: 端末でサンプルプログラムを動作させるための環境構築を行う。
 +
#: 以下のコマンドを実行する。
 +
#: <syntaxhighlight lang="bash">
 +
$ mkdir -p /home/ggc_user
 +
$ chown ggc_user:ggc_group /home/ggc_user
 +
$ pip3 install numpy
 +
</syntaxhighlight>

Revision as of 01:05, 15 December 2021

はじめに

このページは、 R-Car にて AWS GreenGlass を使用するための、Yocto環境の構築および実行手順を記載している。

環境

  • ホストPC
    Windows10 (64bit)
  • ビルドPC
OS Ubuntu 20.04 LTS (64bit)
メモリ 8 GB 以上
ストレージ 空き 100 GB 以上
  • 確認済みボード
ボード SoC 確認結果
R-Car Starter Kit Premier H3 v2.0 OK
R-Car Starter Kit Premier CCPF + H3 v2.0 OK
R-Car Starter Kit Pro M3 v1.0 OK
R-Car Starter Kit Pro M3 v3.0 OK
R-Car Starter Kit Pro CCPF + M3 v1.0 OK
R-Car Starter Kit Pro CCPF + M3 v3.0 OK

ビルド手順

  1. 事前準備(パッケージのインストール)
    $ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
    build-essential chrpath socat cpio python3 python3-pip python3-pexpect \
    xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa \
    libsdl1.2-dev pylint3 xterm docker.io
    
  2. gitの設定
    $ git config --global user.email "you@example.com"
    $ git config --global user.name "Your Name"
    
  3. ビルドスクリプトを任意のディレクトリに作成
    ※ビルドスクリプトはボードにCCPFが付いている場合とついていない場合で違うため、注意すること
    H3SK / M3SK の場合の build.sh
    #!/bin/bash
    
    BOARD_LIST=("h3ulcb" "m3ulcb")
    TARGET_BOARD=$1
    WORK=`pwd`/${TARGET_BOARD}
    
    # Commit ID
    POKY_COMMIT=6ebb33bdaccaeadff0c85aab27acf35723df00d8
    META_OE_COMMIT=c38d2a74f762a792046f3d3c377827b08aade513
    META_RENESAS_COMMIT=0fe77668f5d9a31a5d10449988c3d8fb8dc475c5
    META_VIRTUALIZATION_COMMIT=92cd3467502bd27b98a76862ca6525ce425a8479
    META_JAVA_COMMIT=62d6c0653ad69e14c21db2d4482e578400116a1b
    META_AWS_COMMIT=09a9e8845e1c0685d279a5fec12dc2764e67675c
    META_DOCKER_COMMIT=1ca1b5caf6f373dcc49db82dce50f4d8ab9f25cd
    META_YOCTO_TEMPLATECONF_COMMIT=0bd105ad8247bfdd4835c5e90ee4eab6242f9607
    
    Usage () {
        echo "Usage: $0 \${TARGET_BOARD_NAME}"
        echo "BOARD_NAME list: "
        for i in ${BOARD_LIST[@]}; do echo "  - $i"; done
        exit
    }
    
    # Check Param.
    if ! `IFS=$'\n'; echo "${BOARD_LIST[*]}" | grep -qx "${TARGET_BOARD}"`; then
        Usage
    fi
    
    mkdir -p ${WORK}
    cd ${WORK}
    
    # Clone basic Yocto layers in parallel
    git clone git://git.yoctoproject.org/poky &
    git clone git://git.openembedded.org/meta-openembedded &
    git clone git://github.com/renesas-rcar/meta-renesas &
    git clone git://git.yoctoproject.org/meta-virtualization &
    git clone git://git.yoctoproject.org/meta-java &
    git clone git://github.com/aws/meta-aws &
    git clone git://github.com/tkomagata/meta-docker &
    git clone git://github.com/tkomagata/yocto_templateconf &
    
    # Wait for all clone operations
    wait
    
    # Switch to proper branches/commits
    cd ${WORK}/poky
    git checkout -b tmp ${POKY_COMMIT}
    cd ${WORK}/meta-openembedded
    git checkout -b tmp ${META_OE_COMMIT}
    cd ${WORK}/meta-renesas
    git checkout -b tmp ${META_RENESAS_COMMIT}
    cd ${WORK}/meta-virtualization
    git checkout -b tmp ${META_VIRTUALIZATION_COMMIT}
    cd ${WORK}/meta-java
    git checkout -b tmp ${META_JAVA_COMMIT}
    cd ${WORK}/meta-aws
    git checkout -b tmp ${META_AWS_COMMIT}
    cd ${WORK}/meta-docker
    git checkout -b tmp ${META_DOCKER_COMMIT}
    cd ${WORK}/yocto_templateconf
    git checkout -b tmp ${META_YOCTO_TEMPLATECONF_COMMIT}
    
    TEMPLATECONF=${WORK}/yocto_templateconf/ggc/rcar-gen3/${TARGET_BOARD}/bsp/
    
    cd ${WORK}
    source poky/oe-init-build-env ${WORK}/build
    
    CCPF+H3SK / CCPF+M3SK の場合の build.sh
    #!/bin/bash
    
    BOARD_LIST=("h3ulcb" "m3ulcb")
    TARGET_BOARD=$1
    WORK=`pwd`/${TARGET_BOARD}
    
    # Commit ID
    POKY_COMMIT=6ebb33bdaccaeadff0c85aab27acf35723df00d8
    META_OE_COMMIT=c38d2a74f762a792046f3d3c377827b08aade513
    META_RENESAS_COMMIT=0fe77668f5d9a31a5d10449988c3d8fb8dc475c5
    META_RENESAS_CCPF_COMMIT=2e264bba92128dd6c3be68068673b1fd2d3e36e8
    META_VIRTUALIZATION_COMMIT=92cd3467502bd27b98a76862ca6525ce425a8479
    META_JAVA_COMMIT=62d6c0653ad69e14c21db2d4482e578400116a1b
    META_AWS_COMMIT=09a9e8845e1c0685d279a5fec12dc2764e67675c
    META_DOCKER_COMMIT=1ca1b5caf6f373dcc49db82dce50f4d8ab9f25cd
    META_YOCTO_TEMPLATECONF_COMMIT=0bd105ad8247bfdd4835c5e90ee4eab6242f9607
    
    Usage () {
        echo "Usage: $0 \${TARGET_BOARD_NAME}"
        echo "BOARD_NAME list: "
        for i in ${BOARD_LIST[@]}; do echo "  - $i"; done
        exit
    }
    
    # Check Param.
    if ! `IFS=$'\n'; echo "${BOARD_LIST[*]}" | grep -qx "${TARGET_BOARD}"`; then
        Usage
    fi
    
    mkdir -p ${WORK}
    cd ${WORK}
    
    # Clone basic Yocto layers in parallel
    git clone git://git.yoctoproject.org/poky &
    git clone git://git.openembedded.org/meta-openembedded &
    git clone git://github.com/renesas-rcar/meta-renesas &
    git clone git://github.com/renesas-rcar/meta-renesas-ccpf &
    git clone git://git.yoctoproject.org/meta-virtualization &
    git clone git://git.yoctoproject.org/meta-java &
    git clone git://github.com/aws/meta-aws &
    git clone git://github.com/tkomagata/meta-docker &
    git clone git://github.com/tkomagata/yocto_templateconf &
    
    # Wait for all clone operations
    wait
    
    # Switch to proper branches/commits
    cd ${WORK}/poky
    git checkout -b tmp ${POKY_COMMIT}
    cd ${WORK}/meta-openembedded
    git checkout -b tmp ${META_OE_COMMIT}
    cd ${WORK}/meta-renesas
    git checkout -b tmp ${META_RENESAS_COMMIT}
    cd ${WORK}/meta-renesas-ccpf
    git checkout -b tmp ${META_RENESAS_CCPF_COMMIT}
    cd ${WORK}/meta-virtualization
    git checkout -b tmp ${META_VIRTUALIZATION_COMMIT}
    cd ${WORK}/meta-java
    git checkout -b tmp ${META_JAVA_COMMIT}
    cd ${WORK}/meta-aws
    git checkout -b tmp ${META_AWS_COMMIT}
    cd ${WORK}/meta-docker
    git checkout -b tmp ${META_DOCKER_COMMIT}
    cd ${WORK}/yocto_templateconf
    git checkout -b tmp ${META_YOCTO_TEMPLATECONF_COMMIT}
    
    TEMPLATECONF=${WORK}/yocto_templateconf/ggc/rcar-gen3/${TARGET_BOARD}/bsp/
    
    cd ${WORK}
    source poky/oe-init-build-env ${WORK}/build
    
  4. ビルドスクリプトを実行
    $ chmod a+x build.sh
    $ ./build.sh <target_board_name>
    
    ※ <target_board_name>
      R-Car Starter Kit Premier (H3) : "h3ulcb"
      R-Car Starter Kit Pro (M3)  : "m3ulcb"
  5. local.conf の修正
    以下を実行して、イメージに「python3-pip」のパッケージが含まれるようにコンフィグファイルを修正します。
    $ echo "IMAGE_INSTALL_append = \" python3-pip\"" >> <target_board_name>/build/conf/local.conf
    
  6. ビルド実行
    $ cd <target_board_name>
    $ source poky/oe-init-build-env
    $ bitbake core-image-minimal
    
    イメージのビルドは、ホストシステムの性能によっては数時間かかることがある。
    ビルドが正常に完了すると、以下のような出力が表示される。
    -------------------------------------------
    NOTE: Tasks Summary: Attempted 5383 tasks of which 5 didn't need to be rerun and all succeeded.
    -------------------------------------------
    
  7. ビルド生成物
    bitbake を実行して生成されたファイルは以下に格納される
     <target_board_name>/build/tmp/deploy/images/<target_board_name>/
  8. イメージを SD カードに書き込む
    SDカードにイメージを書き込む方法は、Loading kernel and rootfs via eMMC/SD cardを参照。
    ※上記の例はイメージが"weston"のため、"minimal"に置き換えることに注意すること

ターゲットボード Greengrass Core の起動確認

  1. R-Car SK の起動
    R-Car SK に uSD カードを挿入して、LANケーブルを接続する。
    USB デバッグシリアルケーブルを PC と接続して、AC 電源を投入する。
    PC 側では、ターミナルソフトを起動して、シリアル接続を行う。
    電源 ON は POWER SW(SW8) を押下する。
  2. SD ブートを U-Boot で設定
    SDブートの設定方法は、Configure U-Boot to boot from SD cardを参照。
  3. Greengrass Core の起動確認
    Greengrass Core が Active となっていることを確認する。
    $ systemctl status greengrass.service --no-pager
    
    caption

AWS IoT Greengrass の設定/動作確認

以降の章では、以下のようなルールでタイトルにタグを記載する。

  • ターゲットボード(R-Car SK)での作業は、<端末>と記載する。
  • ホスト PC での AWS クラウドの作業は、<Web>と記載する。
  • ビルドPCでの作業は、<ビルドPC>と記載する。
  1. <Web> AWSアカウントを作成
    https://console.aws.amazon.com/console/home
    AWS のアカウントを作成して、AWS マネジメントコンソールにルートユーザでログインする。
  2. <Web> IAM ユーザの作成
    下記を参考に作業用のIAM ユーザを作成する。
    https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_users_create.html#id_users_create_console
    作成時に以下のポリシーをアタッチしておくこと。
    • AWSLambda_FullAccess
    • IAMFullAccess
    • AWSIoTFullAccess
    • AWSGreengrassFullAccess
    • IAMAccessAnalyzerFullAccess
    18px <translate> Note:</translate>ユーザアクセス時に表示される、「アクセスキーID」、「シークレットアクセスキー」、「パスワード」を必ずメモすること。なお、シークレットアクセスキーとパスワードは、このタイミングでしか確認できないため、注意すること。
    Warning Warning: これら3点は、セキュリティ上、非常に重要な情報であるため、管理に十分注意すること。
    AWS のルートユーザをサインアウトして、作成した IAM ユーザでログインする。
    https://console.aws.amazon.com/console/home
  3. <Web> リージョンの設定
    画面右上から「アジアパシフィック (東京) ap-northeast-1」を設定する。
    caption
  4. <Web><端末> IoT Core デバイスの作成
    事前に「ターゲットボード Greengrass Core の起動確認」を行い、端末はLANケーブルを接続してインターネットに接続できることを確認しておくこと。
    1. <Web> AWS のサービスから「IoT Core」を選択する。
      caption
    2. <Web> 左側面の領域から「Greengrass」→「使用を開始する」を選択する。
    3. <Web> 「1つの Core デバイスをセットアップ」を押下する。
    4. <Web><端末> 画面の指示に従い以下の作業を実施する。
      1. <Web> 「ステップ 1: Greengrass コアデバイスを登録する」
        任意の名称を入力する。
        本手順では、コアデバイス名を "R-CarH3SKDevice" とする。
      2. <Web> 「ステップ 2: モノのグループに追加して継続的なデプロイを適用する」
        「新しいグループ名を入力」をチェックして、任意の名称を入力する。
        本手順では、モノのグループ名を "R-CarH3SKDeviceGroup"とする。
      3. <端末> 「ステップ 3: Greengrass コアソフトウェアをインストール」
        1. 「ステップ 3.1: Java をデバイスにインストールする」
          R-Car SK のビルドで生成したイメージに含まれているため、作業不要。
        2. 「ステップ 3.2: デバイスで AWS 認証情報を設定する」
          以下のコマンドを実行し、 AWS へアクセスする情報を環境変数として設定する。
          $ export AWS_DEFAULT_REGION=ap-northeast-1
          $ export AWS_ACCESS_KEY_ID=<アクセスキーID>
          $ export AWS_SECRET_ACCESS_KEY=<シークレットアクセスキー>
          
        3. 「ステップ 3.3: インストーラを実行する」
          「インストーラのダウンロード」は作業不要。
          「インストーラの実行」は、Web ブラウザに表示されているものでは、Path が合わないため、端末にて、以下のコマンドを実行する。
          $ java -Droot="/greengrass/v2" -Dlog.store=FILE -jar /greengrass/v2/alts/init/distro/lib/Greengrass.jar \
          --aws-region ap-northeast-1 --thing-name R-CarH3SKDevice --thing-group-name R-CarH3SKDeviceGroup \
          --component-default-user ggc_user:ggc_group --provision true --setup-system-service true \
          --deploy-dev-tools true
          
          「R-CarH3SKDevice」と「R-CarH3SKDeviceGroup」部分は「ステップ 1」と「ステップ 2」で設定した値に置き替えること。
          上記コマンドを実行すると、R-Car SK 端末が AWS IoT と通信して Greengrass コアデバイスとして登録される。
          コマンドが終了して、しばらくすると Greengrass CLI が端末へデプロイされるため、以下のコマンドが実行できるか確認する。
          $ /greengrass/v2/bin/greengrass-cli -V
          
          18px <translate> Note:</translate>デプロイの状況は、以下のログで確認できる。
          $ tail -f /greengrass/v2/logs/greengrass.log
          
  5. <Web> IoT Core に送信するポリシーを追加
    端末で動作する Lambda 関数が AWS クラウドの IoT Core に対して メッセージを Publish するためにポリシーを追加する。
    1. AWS のサービスから「IAM」を選択する。
    2. サイドメニューから「ポリシー」を選択する。
    3. 「ポリシーを作成」を選択する。
    4. サービスに「IoT」を選択、アクションに「Publish」を選択、リソースに「すべてのリソース」を選択する。
      caption
    5. 「次のステップ:タグ」、「次のステップ:確認」を押下していき、ポリシーの確認で任意の「名前」を入力し、「ポリシーの作成」ボタンを押下する。
      本手順では、名前を「R-CarH3SKDevice-IoT-Publish」とする。
    6. IAM の画面に戻るので、サイドメニューから「ロール」を選択する。
    7. 検索に「GreengrassV2TokenExchangeRole」を入力して、同名のロールを選択する。
    8. 「ポリシーをアタッチします」を押下して、先ほど作成したポリシーを検索して「ポリシーのアタッチ」を押下する。
  6. <端末> Lambda 関数の実行環境準備
    端末でサンプルプログラムを動作させるための環境構築を行う。
    以下のコマンドを実行する。
    $ mkdir -p /home/ggc_user
    $ chown ggc_user:ggc_group /home/ggc_user
    $ pip3 install numpy