Difference between revisions of "R-Car/Boards/Yocto-Gen3/AWS IoT Greengrass/v5.5.0"
< R-Car | Boards/Yocto-Gen3 | AWS IoT Greengrass
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 |
ビルド手順
- 事前準備(パッケージのインストール)
$ 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
- gitの設定
$ git config --global user.email "you@example.com" $ git config --global user.name "Your Name"
- ビルドスクリプトを任意のディレクトリに作成
- ※ビルドスクリプトはボードに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
- ビルドスクリプトを実行
$ 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"
- local.conf の修正
- 以下を実行して、イメージに「python3-pip」のパッケージが含まれるようにコンフィグファイルを修正します。
$ echo "IMAGE_INSTALL_append = \" python3-pip\"" >> <target_board_name>/build/conf/local.conf
- ビルド実行
$ 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. -------------------------------------------
- ビルド生成物
- bitbake を実行して生成されたファイルは以下に格納される
- <target_board_name>/build/tmp/deploy/images/<target_board_name>/
- イメージを SD カードに書き込む
- SDカードにイメージを書き込む方法は、Loading kernel and rootfs via eMMC/SD cardを参照。
- ※上記の例はイメージが"weston"のため、"minimal"に置き換えることに注意すること
ターゲットボード Greengrass Core の起動確認
- R-Car SK の起動
- R-Car SK に uSD カードを挿入して、LANケーブルを接続する。
- USB デバッグシリアルケーブルを PC と接続して、AC 電源を投入する。
- PC 側では、ターミナルソフトを起動して、シリアル接続を行う。
- 電源 ON は POWER SW(SW8) を押下する。
- SD ブートを U-Boot で設定
- SDブートの設定方法は、Configure U-Boot to boot from SD cardを参照。
- Greengrass Core の起動確認
- Greengrass Core が Active となっていることを確認する。
$ systemctl status greengrass.service --no-pager
AWS IoT Greengrass の設定/動作確認
以降の章では、以下のようなルールでタイトルにタグを記載する。
- ターゲットボード(R-Car SK)での作業は、<端末>と記載する。
- ホスト PC での AWS クラウドの作業は、<Web>と記載する。
- ビルドPCでの作業は、<ビルドPC>と記載する。
- <Web> AWSアカウントを作成
- https://console.aws.amazon.com/console/home
- AWS のアカウントを作成して、AWS マネジメントコンソールにルートユーザでログインする。
- <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: これら3点は、セキュリティ上、非常に重要な情報であるため、管理に十分注意すること。
- AWS のルートユーザをサインアウトして、作成した IAM ユーザでログインする。
- https://console.aws.amazon.com/console/home
- <Web> リージョンの設定
- 画面右上から「アジアパシフィック (東京) ap-northeast-1」を設定する。
- <Web><端末> IoT Core デバイスの作成
- 事前に「ターゲットボード Greengrass Core の起動確認」を行い、端末はLANケーブルを接続してインターネットに接続できることを確認しておくこと。
- <Web> AWS のサービスから「IoT Core」を選択する。
- <Web> 左側面の領域から「Greengrass」→「使用を開始する」を選択する。
- <Web> 「1つの Core デバイスをセットアップ」を押下する。
- <Web><端末> 画面の指示に従い以下の作業を実施する。
- <Web> 「ステップ 1: Greengrass コアデバイスを登録する」
- 任意の名称を入力する。
- 本手順では、コアデバイス名を "R-CarH3SKDevice" とする。
- <Web> 「ステップ 2: モノのグループに追加して継続的なデプロイを適用する」
- 「新しいグループ名を入力」をチェックして、任意の名称を入力する。
- 本手順では、モノのグループ名を "R-CarH3SKDeviceGroup"とする。
- <端末> 「ステップ 3: Greengrass コアソフトウェアをインストール」
- 「ステップ 3.1: Java をデバイスにインストールする」
- R-Car SK のビルドで生成したイメージに含まれているため、作業不要。
- 「ステップ 3.2: デバイスで AWS 認証情報を設定する」
- 以下のコマンドを実行し、 AWS へアクセスする情報を環境変数として設定する。
$ export AWS_DEFAULT_REGION=ap-northeast-1 $ export AWS_ACCESS_KEY_ID=<アクセスキーID> $ export AWS_SECRET_ACCESS_KEY=<シークレットアクセスキー>
- 「ステップ 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
- 「ステップ 3.1: Java をデバイスにインストールする」
- <Web> 「ステップ 1: Greengrass コアデバイスを登録する」
- <Web> IoT Core に送信するポリシーを追加
- 端末で動作する Lambda 関数が AWS クラウドの IoT Core に対して メッセージを Publish するためにポリシーを追加する。
- AWS のサービスから「IAM」を選択する。
- サイドメニューから「ポリシー」を選択する。
- 「ポリシーを作成」を選択する。
- サービスに「IoT」を選択、アクションに「Publish」を選択、リソースに「すべてのリソース」を選択する。
- 「次のステップ:タグ」、「次のステップ:確認」を押下していき、ポリシーの確認で任意の「名前」を入力し、「ポリシーの作成」ボタンを押下する。
- 本手順では、名前を「R-CarH3SKDevice-IoT-Publish」とする。
- IAM の画面に戻るので、サイドメニューから「ロール」を選択する。
- 検索に「GreengrassV2TokenExchangeRole」を入力して、同名のロールを選択する。
- 「ポリシーをアタッチします」を押下して、先ほど作成したポリシーを検索して「ポリシーのアタッチ」を押下する。
- <端末> Lambda 関数の実行環境準備
- 端末でサンプルプログラムを動作させるための環境構築を行う。
- 以下のコマンドを実行する。
$ mkdir -p /home/ggc_user $ chown ggc_user:ggc_group /home/ggc_user $ pip3 install numpy