masa.yamaguchi
2024年9月13日 11時51分
掲題の件につきましてお伺いしたいことがございます。
■質問①: コンテナを順次進化させるクロスビルド方法について
目的:C++ SDK(AWS-SDK、AWS-IOT、AWS-KVS)とユーザーアプリを1つのコンテナにインストールしたいと考えています。
SDKのインストールには時間がかかるため、段階的にインストール済みのコンテナイメージを作成し、
最終的にアプリを追加したいです。
具体的には以下の手順を考えていますが、ATDE(Advanced Trial Development Edition)でのクロスコンパイルに関して、
この手順がどのように実現できるかが分からず困っています。
・Podmanを使用したコンテナビルド手順:
最初に、ベースとなるコンテナイメージを起動し、AWS-SDKをインストールします。
その後、podman commit コマンドを使用してこの状態のイメージを作成します(例:AWS-SDK_img)。
次に、AWS-SDK_img を基に新たなコンテナを起動し、AWS-IOTをインストールします。
そして、再度 podman commit を使ってイメージを作成します(例:AWS-IOT_img)。
最後に、AWS-IOT_img を基にさらにコンテナを起動し、AWS-KVSをインストールして
podman commit で最終的なイメージを作成します(例:Final_SDK_img)。
これで、最終的に作成したコンテナイメージにユーザーアプリ(C++)をインストールし、最終的なイメージを作成します。
・★ATDEでのクロスコンパイルの問題:
現在考えている方法として、まず必要なSDKをA610にインストールし、 その後SWU(ソフトウェアアップデート)をダウンロードします。
次に、A610でコンテナの状態をコミットしてイメージとして取得し、 それをATDEに持ち込んでベースイメージとして使用する予定です。
しかし、この方法は手間がかかり非常に不便です。もっと効率的な方法があれば知りたいと思っています。
(ATDEでのクロスコンパイルだと、どうやったらこの手順(Podmanを使用したコンテナビルド手順)を実現できるのかが不明)
■質問②:SAVEしたコンテナイメージを小さくする方法
PCでpodmanをつかってコンテナイメージをSAVEするとサイズが5GBを超えます。
(C++ SDK(AWS-SDK、AWS-IOT、AWS-KVS))
Armadillo-610のROM eMMC:約3.8GB(約3.6GiB) なので入りません。
その為、SAVEしたコンテナイメージを小さくする方法について、ご教示頂きたいです。
(もしくは代替手段の検討が必要となりますでしょうか)
コメント
masa.yamaguchi
ご回答ありがとうございます。
その後、AWSの3つのSDKのビルドがATDEクロスビルドで完了しました(4Hかかりました)。
SWUファイルのサイズは約2GBあり、SWUファイルの転送中に空き容量不足で失敗しました。
他のコンテナをすべて削除して再試行しましたが、問題は解決しませんでした。
ご回答内容の実施にあたり以下質問がございます。
Q1: ビルド用コンテナと転送用コンテナの2種類があるとのことですが
それぞれのコンテナ名はどのようになっていますか?
Q2: ビルド用コンテナから必要最小限のファイルを転送用コンテナにコピーする方法がわかりません。
どこに、どのように記述すればよいのでしょうか?
フォルダ名だけの指定で問題ないのでしょうか?
at_reika.yamazaki
2024年9月13日 14時53分
お世話になっております。山崎です。
①についてですが、Dockerfile をお使いになるのが良いと思います。
Dockerfile を使えば、必要なパッケージをまとめてインストールしたコンテナイメージを作成することができます。
参考として、アットマークテクノでは ATDE 上で開発するVisual Studio Code にインストールできる開発用エクステンションである ABOSDE を提供しています。
ABOSDE を用いると C 言語プロジェクトが作成できるので、こちらのプロジェクトをお使いになるのが良いかもしれません。C 言語プロジェクトの詳細はマニュアルの以下をご参照ください。
https://manual.atmark-techno.com/armadillo-610/armadillo-610_product_ma…
②にも関係する個所になりますが、
C 言語プロジェクトではクロスビルド用のコンテナイメージと、Armadillo に転送するコンテナイメージの二つを作成しています。それぞれに含めるパッケージも管理できます。
関連するファイルは以下の二つです。
・container/Dockerfile
クロスビルド用のコンテナイメージと、Armadillo に転送するコンテナイメージの作成に利用される Dockerfile です。
Dockerfile の書き方については以下のドキュメントをご参照ください。
https://docs.docker.com/build/concepts/dockerfile/
・container/packages.txt
クロスビルド用のコンテナイメージと、Armadillo に転送するコンテナイメージにインストールするパッケージを列挙できます。[build] ラベルより下に記載したパッケージはクロスビルド用のコンテナイメージにしかインストールされないため、不要なパッケージのインストールによりコンテナイメージの肥大化を防ぎます。
詳細は以下をご参照ください。
https://manual.atmark-techno.com/armadillo-610/armadillo-610_product_ma…
以上、どうぞよろしくお願いいたします。