目次
はじめに
ここではiPRO Camera SDKを利用してコンテナアプリを開発する環境を構築する手順を説明します。また、このチュートリアルではSDKのインストールディレクトリを${SDK_DIR}
として記載します。
Container AdamAppはSoCがambaCV5XのカメラファームウェアVer3.30以降が対象で、SDK ver2.10以降で開発可能です。カメラのSoCについてはこちらを確認ください。
開発で推奨する開発環境
サポート対象となる推奨環境は以下となります。
開発用OS :Linux (64bit)
ディストリビューション :Ubuntu 22.04 LTS
開発環境構築手順
開発者ライセンスの取得
下記より開発者ライセンスを申請し、取得しておいてください。
お問い合わせ・SDKダウンロード - Development Partner Portal (i-pro.com)
Docker環境の準備
開発PCにDocker Engineをインストールします。Install Docker Engine on Ubuntu に従って、Docker Engineをインストールします。以下はページの概略を記載します。
念のため旧パッケージをアンインストールします。
ただし、アンインストールして問題ないパッケージか事前によくご確認ください。削除したことで問題が発生しても責任は負いかねます。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行まとめてコピペしてください。
# Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl 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.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 sudo apt-get update
最新のDocker engineをインストールします。
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キーを押してください。
インストール後の動作確認です。
sudo docker run hello-world
成功した場合の表示例です。
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/
プロキシサーバー経由でインターネットに接続される環境では、上記は失敗します。
以下の「プロキシサーバー経由で接続している場合」の手順を実施してください。
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ユーザーグループを作成します。
sudo groupadd docker
groupadd: group 'docker' already exists と表示される場合は、すでにグループが作成されていますので続行します。
通常使用するユーザーをdocker groupに追加します。
sudo usermod -aG docker $USER
設定を反映します。
newgrp docker
sudo無でdockerが実施できることを確認します。
docker run hello-world
成功した場合の表示例です。
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/
WSL2を使用してWindows PC上に環境を構築している場合は確認ください。
WSLでインストールしたUbuntuはサービスの制御がsystemdによって行われています。systemdの設定を変更して、起動時にDockerサービスが自動起動する設定を行います。sudo systemctl enable docker.service sudo systemctl enable containerd.service
起動時にdockerサービスが起動するかどうか確認するために一度Ubuntuを再起動します。 WSLではubuntuの端末で再起動はできません。 いったん×ボタンでウィンドウを終了させた後、powershellを起動して以下を入力します。
wsl --shutdown
その後スタートメニューから改めてUbuntu 22.04 LTSを起動します。
以下のコマンドを入力し、正しくバージョン番号が表示されれば成功です。
docker version
成功したときの表示例です。
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クライアントの設定ファイルを作成して以下のように記載します。
vi ~/.docker/config.json
記載する内容は以下です。
{ "proxies": { "default": { "httpProxy": "http://[プロキシサーバーのIPアドレス:ポート]", "httpsProxy": "http://[プロキシサーバーのIPアドレス:ポート]" } } }
特定のIPアドレスだけをプロキシなしで接続したい場合は”noProxy”で設定できます。詳細は プロキシサーバを使うように Docker を設定 — Docker-docs-ja 24.0 ドキュメント をご覧ください。
ファイルを保存します。
qemuインストール
コンテナ版追加アプリを作成するために、開発環境にインストールする必要のある、qemuのインストール方法を記載します。
PCを再起動すると、build可能なアーキテクチャにlinux/arm64が表示されなくなる場合があります。その際は、再度同じ手順でqemuをインストールしてください。
qemuのインストール
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 を使うため、環境変数を追加設定 & 反映 します。
設定ファイルを開きます。
vi ~/.bashrc
以下を末尾に追加
export DOCKER_CLI_EXPERIMENTAL=enabled export DOCKER_BUILDKIT=1
保存します。
buildxが使えるようになっているか確認します。
docker --help | grep buildx
出力例
buildx* Docker Buildx (Docker Inc., v0.10.5)
現在build可能なアーキテクチャを確認します。
docker buildx ls
出力例
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がインストール済みであること
$ docker --version Docker version 23.0.1, build cb74dfc
インストール出来ていない場合はDocker Engineをインストールしてください。
Dockerデーモンが起動中であること
【systemdを使用している場合】$ 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
コマンドでサービスを起動してください。docker buildxがインストールされていること
$ docker --help | grep buildx buildx* Docker Buildx (Docker Inc., v0.10.5)
何も表示されていない場合は、 Docker Buildx に従って個別にインストールしてください。
qemuがインストールされ、Arm64ビットアプリがクロスビルド可能になっていること
以下のリストの中にlinux/arm64
があることを確認してください。$ 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をインストールしてください。
Docker拡張モジュールのインストール
下記よりDocker拡張モジュールをダウンロードし、インストールしてください。Container AdamApp for Azure IoT Edgeのみに対応した古いDocker拡張モジュールがインストールされている場合はアップデートされます。
i-PRO Docker®拡張モジュール | i-PRO Products
下記の赤枠画面よりインストールしてください。緑枠のように表示されれば成功です。
バージョンはリリース時期に応じて変わります。
Container AdamApp for Azure IoT Edgeのみに対応した古いDocker拡張モジュールでクラウド対応をONにしている場合はOFFにする必要があります。
以下のURLでカメラ(IPアドレスが192.168.0.10の場合)にアクセスします。
http://192.168.0.10/admin/setup_ca_software.html
クラウド対応が「On」になっている場合は「Off」に変更して「設定」を押します。
■質問
★docker拡張モジュールは英語サイトはどのように提供するか?
ー>現状以下で、公開している拡張モジュールと同様に問い合わせしてもらいます。書き換え
★暗号化はiPROで実施すると思うが、SDK2.01以前のconvappだけではNGか確認。