Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

目次

...

Table of Contents
minLevel1
maxLevel4

はじめに

...

ここではiPRO Camera SDKを利用してAzure IoT Edgeデバイス用コンテナアプリを開発する環境を構築する手順を説明します。また、このチュートリアルではSDKのインストールディレクトリをSDKを利用してコンテナアプリを開発する環境を構築する手順を説明します。また、このチュートリアルではSDKのインストールディレクトリを${SDK_DIR}として記載します。

Info

このチュートリアルはSDK ver.2.00以降のみ対応しています。SDK ver.2.00未満では利用できませんのでご注意ください。また、SDK ver.2.00以降のContainer AdamAppはambaCV5Xアプリのみ開発可能です。

...

Container AdamAppはSoCがambaCV5XのカメラファームウェアVer3.30以降が対象で、SDK ver2.10以降で開発可能です。カメラのSoCについてはこちらを確認ください。

開発で推奨する開発環境

...

サポート対象となる推奨環境は以下となります。

  • 開発用OS :Linux (64bit)

  • ディストリビューション :Ubuntu 22.04 LTS, Ubuntu 20.04以降

  • Azure IoT アプリ用開発ツール:Visual Studio Code + Azure IoT Edge 拡張機能
    + Azure IoT Hub 拡張機能。

  • コンテナレジストリ : Azure Container Registry (開発用にi-PROが提供)
                  ※パートナー様自身で、Docker-hub等を用意いただくことも可能です。

Azure IoT Edgeデバイス向けアプリを開発するためには、Azureアカウントの開設が必要です。Azure のご利用には費用が掛かる可能性があります。

Tip

2024/3/15時点では、開発に必要なAzure IoT Hubを無料で使用できるプランもあります

参考 価格 - IoT Hub | Microsoft Azure

Info

Azure関連の契約はi-PRO株式会社では行っておりませんので、お客様にて実施ください。Azureについて詳細はこちらなどからマイクロソフトにお問い合わせください。

また、推奨環境以外での開発はサポート対象外となります。

開発環境構築手順

Docker環境の準備

開発PCにDocker Engineをインストールします。出典:Docker Engine インストール(Ubuntu 向け) | Docker ドキュメント (matsuand.github.io)

Info

Windows環境で開発したい場合、本ドキュメントでは推奨外となりますが、Docker Desktop for WIndowsやWSLを利用する方法があります。それらの方法をご利用になる場合はそれぞれのドキュメントをご参照ください。

ここでの手順は下記環境にて実施しています。

OS: Ubuntu 22.04.2 LTS (Jammy Jellyfish)

Docker Engineのバージョン: 23.0.1

Info

プロキシ経由でインターネットに接続されている環境の場合、プロキシサーバーの設定を実施しておいてください。

 

Dockerをインストールする前に、古いバージョンのアンインストールを行います。

Code Block
sudo apt-get remove docker docker-engine docker.io containerd runc
Info

アンインストールしてよい環境かどうか、事前に確認してください。

 

Dockerをインストールできるようにするためのアプリをインストールします。

...

  • 04 LTS

開発環境構築手順

...

開発者ライセンスの取得

下記より開発者ライセンスを申請し、取得しておいてください。

お問い合わせ・SDKダウンロード - Development Partner Portal (i-pro.com)

Docker環境の準備

開発PCにDocker Engineをインストールします。Install Docker Engine on Ubuntu に従って、Docker Engineをインストールします。以下はページの概略を記載します。

  • 念のため旧パッケージをアンインストールします。
    ただし、アンインストールして問題ないパッケージか事前によくご確認ください。削除したことで問題が発生しても責任は負いかねます。

    Code Block
    for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

     

  • apt-getで使用するDocker用レポジトリを追加します。echoから始まる行は4行まとめてコピペしてください。

    Code Block
    # Add Docker's official GPG key:
    sudo apt-get update
    sudo apt-get install ca-certificates curl
    

...

 

Dockerの公式GPG鍵を追加します。

...

  • sudo install -m 0755 -d /etc/apt/keyrings
    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg 

...

  • -o /etc/apt/keyrings/docker.asc
    sudo 

...

  • chmod a+r /etc/apt/keyrings/docker

...

Note

ここでcurlの証明書エラーが出た場合、ca-certificatesが最新ではない、または正しくインストールできていない可能性があります。

sudo apt-get install --reinstall ca-certificates

でca-certificatesを再インストールして直るか、ご確認ください。

 

Dockerの安定版リポジトリをセットアップします。

...

  • .asc
    # Add the repository to Apt sources:
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/

...

  • etc/

...

  • apt/keyrings/docker

...

  • .

...

  • asc] https://download.docker.com/linux/ubuntu \
      $(

...

  • . /etc/os-release && echo "$VERSION_CODENAME") stable" | \
      sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

...

 

Dockerエンジンをインストールします。

...

  • 
    sudo apt-get update

...

  • 最新のDocker engineをインストールします。

    Code Block
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

  • Do you want to continue? [Y/n] と聞かれたら Y を入力してEnterキーを押してください。

  • インストール後の動作確認です。 

    Code Block
    sudo docker 

...

  • run 

...

 

docker daemonの再起動 またはうまく行かない場合はPC再起動してください。

Code Block
sudo systemctl restart docker

 

docker.sockにグループでの書き込み権限を付与します。

Code Block
sudo chgrp docker /var/run/docker.sock

  

Dockerが使えるかどうかのテストを行います。

Code Block
docker run --rm hello-world

 

以下のように表示されればインストール成功です。

...

  • hello-world

    成功した場合の表示例です。

    Code Block
    ipro@PC-HP2208N0101R:~$ sudo docker run hello-world
    Unable to find image 'hello-world:latest' locally
    latest: Pulling from library/hello-world
    

...

  • c1ec31eb5944: Pull complete
    

...

  • Digest: sha256:

...

  • d1b0b5888fbb59111dbf2b3ed698489c41046cb9d6d61743e37ef8d9f3dda06f
    Status: Downloaded newer image for hello-world:latest
    

...

  • Hello from Docker!
    This message shows that your installation appears to be working correctly.

...

  • 
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.

...

  • 
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    

...

  • Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    

...

  • For more examples and ideas, visit:
     https://docs.docker.com/get-started/
    

 成功しなかった場合、下記で成功するか確認してください。

Info

プロキシサーバー経由でインターネットに接続される環境では、上記は失敗します。

以下の「プロキシサーバー経由で接続している場合」の手順を実施してください。

 

Info

WSL2を使用してWindows PC上に環境を構築している場合、Ubuntu-22.04でDockerが起動できない現象が発生しています。

その場合、WSL2のUbuntu 22.04でDockerが起動しない問題対応 #Ubuntu22.04 - Qiita

上記情報などを参考に、iptables-legacyを使用するようにしてください。

  • dockerコマンドはデフォルトではroot権限が必要なので、ユーザー権限でも実行できるように、dockerグループにユーザーを追加します。 公式ドキュメントでは、 Linux post-installation steps for Docker Engine に記載されています。

  • dockerユーザーグループを作成します。

    Code Block
    sudo groupadd docker

    groupadd: group 'docker' already exists と表示される場合は、すでにグループが作成されていますので続行します。

  • 通常使用するユーザーをdocker groupに追加します。

    Code Block
    sudo usermod -aG docker $USER

     

  • 設定を反映します。

    Code Block
    newgrp docker

     

  • sudo無でdockerが実施できることを確認します。

    Code Block
    docker run hello-

...

ここでPCを再起動します。(必ず再起動を実施してください。)

...

  • world

    成功した場合の表示例です。

    Code Block
    ipro@PC-HP2208N0101R:~$ docker run hello-world
    Hello from Docker!
    This message shows that your installation appears to be working correctly.
    To generate this message, Docker took the following steps:
     1. The Docker client contacted the Docker daemon.
     2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
        (amd64)
     3. The Docker daemon created a new container from that image which runs the
        executable that produces the output you are currently reading.
     4. The Docker daemon streamed that output to the Docker client, which sent it
        to your terminal.
    To try something more ambitious, you can run an Ubuntu container with:
     $ docker run -it ubuntu bash
    Share images, automate workflows, and more with a free Docker ID:
     https://hub.docker.com/
    For more examples and ideas, visit:
     https://docs.docker.com/get-started/

     

  • systemdの設定を変更して、起動時にDockerサービスが自動起動する設定を行います。

    Code Block
    sudo systemctl enable docker.service
    sudo systemctl enable containerd.service

     

  • 起動時にdockerサービスが起動するかどうか確認するために一度Ubuntuを再起動します。 WSLではubuntuの端末で再起動はできません。 いったん×ボタンでウィンドウを終了させた後、powershellを起動して以下を入力します。

    Code Block
    wsl --shutdown

     

  • その後スタートメニューから改めてUbuntu 22.04 LTSを起動します。

  • 以下のコマンドを入力し、正しくバージョン番号が表示されれば成功です。

    Code Block
    docker version

    成功したときの表示例です。

    Code Block
    ipro@PC-HP2208N0101R:~$ docker version
    Client: Docker Engine - Community
     Version:           26.1.4
     API version:       1.45
     Go version:        go1.21.11
     Git commit:        5650f9b
     Built:             Wed Jun  5 11:28:57 2024
     OS/Arch:           linux/amd64
     Context:           default
    Server: Docker Engine - Community
     Engine:
      Version:          26.1.4
      API version:      1.45 (minimum version 1.24)
      Go version:       go1.21.11
      Git commit:       de5c9cf
      Built:            Wed Jun  5 11:28:57 2024
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.6.33
      GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
     runc:
      Version:          1.1.12
      GitCommit:        v1.1.12-0-g51d5e94
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0

プロキシサーバー経由で接続している場合

Dockerをプロキシサーバー経由でインターネットにアクセスさせる手順を実施します。プロキシサーバーを使用していない場合は、実施する必要はありません。

  • Dockerクライアントの設定ファイルを作成して以下のように記載します。

    Code Block
    vi ~/.docker/config.json

    記載する内容は以下です。

    Code Block
    {
     "proxies":
     {
       "default":
       {
         "httpProxy": "http://[プロキシサーバーのIPアドレス:ポート]",
         "httpsProxy": "http://[プロキシサーバーのIPアドレス:ポート]"
       }
     }
    }

    特定のIPアドレスだけをプロキシなしで接続したい場合は”noProxy”で設定できます。詳細は プロキシサーバを使うように Docker を設定 — Docker-docs-ja 24.0 ドキュメント をご覧ください。

  • ファイルを保存します。

qemuインストール

コンテナ版追加アプリを作成するために、開発環境にインストールする必要のある、qemuのインストール方法を記載します。

Info

PCを再起動すると、build可能なアーキテクチャにlinux/arm64が表示されなくなる場合があります。その際は、再度同じ手順でqemuをインストールしてください。

 

qemuのインストール

Code Block
sudo apt update
sudo apt-get install qemu binfmt-support qemu-user-static # Install the qemu packages
sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes # This step will execute the registering scripts

 

docker buildxの準備

  • experimental 機能や BuildKit を使うため、環境変数を追加設定 & 反映 します。

  • 設定ファイルを開きます。

    Code Block
    vi ~/.bashrc
  • 以下を末尾に追加

    Code Block
    export DOCKER_CLI_EXPERIMENTAL=enabled
    export DOCKER_BUILDKIT=1

    保存します。

  • buildxが使えるようになっているか確認します。

    Code Block
    docker --help | grep buildx

    出力例

    Code Block
      buildx*     Docker Buildx (Docker Inc., v0.10.5)

     

  • 現在build可能なアーキテクチャを確認します。

    Code Block
    docker buildx ls

    出力例

    Code Block
    NAME/NODE DRIVER/ENDPOINT STATUS  BUILDKIT                              PLATFORMS
    default * docker
      default default         running v0.11.7-0.20230525183624-798ad6b0ce9f linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/amd64/v4, linux/386, linux/arm64, linux/riscv64, linux/ppc64, linux/ppc64le, linux/s390x, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

    この出力の中に linux/arm64 があれば成功です。

開発環境構築のチェック

環境構築ができたかどうかのチェックを行います。 ※結果は一例ですので、環境によって異なります。

  • Docker Engineがインストール済みであること

    Code Block
    $ docker --version
    Docker version 23.0.1, build cb74dfc

    インストール出来ていない場合はDocker Engineをインストールしてください。

  • Dockerデーモンが起動中であること
    【systemdを使用している場合】

    Code Block
    $ systemctl status docker
    ● docker.service - Docker Application Container Engine
         Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
         Active: active (running) since Wed 2023-06-28 08:41:48 JST; 5h 6min ago
    TriggeredBy: ● docker.socket
           Docs: https://docs.docker.com
       Main PID: 1051 (dockerd)
          Tasks: 24
         Memory: 199.9M
            CPU: 5.471s
         CGroup: /system.slice/docker.service
                 └─1051 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    
         (以下略)

    Activeが inactive (dead) になっている場合は、systemctl start docker コマンドでサービスを起動してください。

    【SysVinitを使用している場合】

    Code Block$ sudo /etc/init.d/

    docker

    status * Docker is running

    not running と表示される場合は sudo /etc/init.d/docker start コマンドでサービスを起動してください。

  • docker buildxがインストールされていること

    Code Block
    $ docker --help | grep buildx
      buildx*     Docker Buildx (Docker Inc., v0.10.5)

    何も表示されていない場合は、 Docker Buildx に従って個別にインストールしてください。

  • qemuがインストールされ、Arm64ビットアプリがクロスビルド可能になっていること
    以下のリストの中に linux/arm64 があることを確認してください。

    Code Block
    $ docker buildx ls
    default * docker
      default default         running v0.11.7-0.20230525183624-798ad6b0ce9f linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/amd64/v4, linux/arm64, linux/riscv64, linux/ppc64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

    linux/arm64 がない場合は、qemuをインストールしてください。

Visual Studio CodeにAzure IoT Edge拡張機能およびAzure IoT Hub拡張機能をインストール

Azure IoT Edgeデバイス用アプリを開発するためには、Visual Studio CodeにAzure IoT Edge拡張機能およびAzure IoT Hub拡張機能をインストールします。

  • Visual Studio Codeを起動します。

  • 左側の拡張機能アイコンをクリックして拡張機能ウィンドウを表示させます。

  • サーチテキストボックスに “Azure IoT”と入力します。

  • 検索結果から「Azure IoT Edge」「Azure IoT Hub」を順次インストールします。

...

※WSL環境の場合、これらの拡張機能をWSL環境でも有効にする必要があります。WSL内の任意プロジェクトを開いた状態(WSLで任意プロジェクトフォルダにcdした状態で code . コマンドなどでVIsual Studio Codeを開く)で拡張機能メニューの「Install in WSL: Ubuntu-20.04」を押下してWSL内にもインストールしてください。

...

i-PROカメラをAzure IoTに登録する

事前に、i-PROカメラおよび開発用PCをインターネット接続し、Azure IoTと通信できる状態にしておいてください。ここでは下記図のようなネットワーク構成になっている想定で説明します。

...

Docker拡張モジュールのインストール

下記よりDocker拡張モジュールをダウンロードし、インストールしてください。Container AdamApp for Azure IoT Edgeのみに対応した古いDocker拡張モジュールがインストールされている場合はアップデートされます。

i-PRO Docker®拡張モジュール | i-PRO Products

下記の赤枠画面よりインストールしてください。緑枠のように表示されれば成功です。

...

Info

バージョンはリリース時期に応じて変わります。

Container AdamApp for Azure IoT Edgeのみに対応した古いDocker拡張モジュールでクラウド対応をONにしている場合はOFFにする必要があります。

以下のURLでカメラ(IPアドレスが192.168.0.

...

i-PRO Docker拡張モジュールをインストールする

カメラWEBブラウザからインストールする方法に付いて説明します。
i-PRO設定ツールを用いることで、複数のカメラに同時にインストールすることも可能です。i-PRO設定ツールを使用する手順についてはこちらを参照ください。

以下のURLでカメラにアクセスします。

10の場合)にアクセスします。

Code Block
http://192.168.0.10/admin/setup_ca_software.html

クラウド対応を「On」に変更して「設定」を押します。

...

「拡張モジュール名」の下にある「ファイルを選択」ボタンから拡張モジュールを選択し、「実行」ボタンを押します。拡張モジュールファイルはこちらから取得してください。

Info

i-PRO Docker拡張モジュールのインストールには数分かかります。それまで画面を触らないでください。

Note

ファームウェアVer. 3.20以降では、セキュリティ対策のためにDocker拡張モジュール Ver. 1.01が動作しなくなります。

ファームウェアVer. 3.20以降では、Docker拡張モジュール Ver. 2.00をご使用下さい。

初めにファームウェアをVer. 3.20に更新後、Docker拡張モジュールの更新してください。

以下のように拡張モジュール名が表示されればインストール完了です。

...

Azure IoT Edge Hubにi-PROカメラを登録する

Azure Portal にログインします。

...

 

IoT Hubを選択してリストから各自で準備した項目を選択します。ここでは例として「CV5xIoTHub2」を選択します。

...

 

左側のリストの「デバイス管理」から「IoT Edge」を選択します。

...

 

IoT Edgeデバイスの追加を選択します。

...

デバイスIDに任意のデバイス名を入力し、あとはデフォルトのままで「保存」ボタンを押します。

...

「最新の情報に更新」押下後、作成されたデバイスがリストに表示されることを確認します。

...

 

そのデバイスをクリックし、「プライマリ接続文字列」の文字列をコピーします。

...

コマンドプロンプト等から以下のコマンドを入力します。 すでにIoTコンポーネントが開始されている場合がありますので、以下を送信していったん停止します。

Code Block
curl -u admin:Admin123 --anyauth "http://[i-PROカメラIPアドレス]/cgi-bin/cadam.cgi?methodName=stopIoTComponent" --verbose

 その後以下のコマンドを実施して接続文字列を設定します。

Code Block
curl --anyauth -u admin:Admin123 "http://[i-PROカメラIPアドレス]/cgi-bin/cadam.cgi?methodName=setConfigIoTComponent&componentType=AzureIoT&connectionType=connectionString&connectionString=[プライマリ接続文字列]" --verbose

200 OKが返却されたら、引き続き以下のコマンドを入力します。

Code Block
curl -u admin:Admin123 --anyauth "http://[i-PROカメラIPアドレス]/cgi-bin/cadam.cgi?methodName=startIoTComponent" --verbose

自動でAzureと接続します。数分後、Azure Portalで「最新の情報に更新」ボタンを押して以下のようにIoT Edge ランタイムの応答が417になったら認識されています。

Info

応答が表示されるまで初回は時間がかかります。

...

コンテナレジストリの準備

使用するコンテナレジストリの選択

開発した Container Adamapp をカメラへデプロイ (インストール) するためには、アプリをコンテナレジストリにアップロードする必要があります。アプリの開発フェーズにおいては、以下の手段が選択可能です。

  1. i-PRO が運営するコンテナレジストリを利用する
    i-PRO では SDK利用者に使用していただけるコンテナレジストリを用意しています。必要な場合、こちらよりお問い合わせください。商品化に際してはご自身でコンテナレジストリを用意していただくか、サービス運用を行っているサービスプロバイダが保有するコンテナレジストリを使用することを想定しています。

  2. ご自身でコンテナレジストリを用意する
    すでにご自身でコンテナレジストリを保有されている場合は、そちらを使用することも可能です。

独自のコンテナレジストリを使用する場合の申請方法

i-PRO のカメラはセキュリティ上の理由から、特定のコンテナレジストリのみからイメージを取得することができます。上記2を選択した場合および商品化の際には、こちらよりこのコンテナレジストリのアドレスを申請してください。i-PRO で確認の上、このコンテナレジストリへのアクセスを許可するようにカスタマイズされたプラットフォーム拡張モジュールを提供いたしますので、対象のカメラで更新をお願いします。

Azure IoT Edgeでアプリを開発する

イメージのビルドとレジストリへのPush、デバイスへのデプロイはVisual Studio Code + Azure IoT Edge拡張機能 + Azure IoT Hub拡張機能で一続きに行うことができます。

事前にSDKのzipファイルを任意のフォルダに展開しておいてください。

Visual Studio Code上での初期設定

[SDKフォルダ]直下でVisual Studio Codeを立ち上げます。

Code Block
cd ${SDK_DIR}
code .

メニューの「表示」->「コマンドパレット」から「Azure: Sign In」を選択しAzureにログイン。

...

ブラウザが起動するので自身の認証情報を入力しログインする。以下のように表示されたらOK。

...

メニューの「表示」->「コマンドパレット」から「Azure IoT Hub: IoT Hubを選択」を選択し、登録済みのサブスクリプション->IoT Hubを選択する。選択後、左下の「AZURE IOT HUB」以下にIoT Hubおよび登録されているデバイスが表示されます。

...

これで開発環境の構築は完了です。

WSL環境でうまくいかない場合のチェックポイント

WSL環境でうまくいかない場合は以下をチェックしてください。

  • Visual Studio Codeの「LOCAL」の拡張機能で以下が有効になっていること

    • Dev Containers

    • Remote - SSH, Remote - SSH: Editing Configuration FIles, Remote - Tunnels, Remote Development, Remote Explorer

    • WSL

  • Visual Studio Codeの「WSL: UBUNTU-20.04 」の拡張機能で以下が有効になっていること

    • Azure Account

    • Azure IoT Edge

    • Azure IoT Hub

  • Visual Studio Codeの画面左下が「WSL: Ubuntu-20.04」と表示されていること

    Image Removed
  • Build IoT Edge Solutionでpermission denied と表示される場合、対象のディレクトリに現在のユーザーのアクセス権があるかどうか確認する。

    Code Block
    sudo chown -r ipro:ipro [開発ディレクトリ]
    ※ipro:ipro は例ですので、各環境に合わせて設定ください。

    を実行して所有者を変更。

商標について

サイトで使用している商標について掲載します。

Docker and the Docker logo are trademarks or registered trademarks of Docker, Inc. in the United States and/or other countries. Docker, Inc. and other parties may also have trademark rights in other terms used hereinクラウド対応が「On」になっている場合は「Off」に変更して「設定」を押します。

...