Armadilloフォーラム

ABOSDE上でPythonプロジェクトとして作成したコンテナの変更を永続化する方法について

takeshita_kyouhei

2024年2月9日 19時22分

ABOSDE上でPythonのサンプルプロジェクトを作成し、作成されたプロジェクトをABOSWebからインストールしました

このコンテナにpodmanコマンドでログインし、InfluxDBをインストールしましたがログアウトするとInfluxDBが消えてしまいます
開発ガイドの「図6.22podman関連ファイルをeMMC上に保存する」コマンドでコンテナ内部の変更が消えないようにできるかと思ったのですが、ログアウトするとInfluxDBが消えていました

ABOSDE上で作成したコンテナに対して、InfluxDBを永続的にインストールしたままとしたいのですが、何か方法はありますでしょうか?

コメント

at_satoshi.ohta

2024年2月13日 10時52分

太田です。

InfluxDB を apt でインストールするのであれば、
ABOSDEのプロジェクトディレクトリにある container/packages.txt にパッケージ名を追記してください。

その後に、まだ開発段階であれば[Generate development swu]、開発が終わりリリース段階であれば[Generate release swu]を押して、InfluxDBのパッケージをインストールしたコンテナイメージを含む SWU イメージファイルを作成してください。

その SWU イメージファイルを ABOSWeb から再び Armadillo にインストールすれば、InfluxDB がインストールされたコンテナが起動するはずです。

どうぞよろしくお願いいたします。

takeshita_kyouhei

2024年2月13日 17時38分

> 太田です。
>
> InfluxDB を apt でインストールするのであれば、
> ABOSDEのプロジェクトディレクトリにある container/packages.txt にパッケージ名を追記してください。
>
> その後に、まだ開発段階であれば[Generate development swu]、開発が終わりリリース段階であれば[Generate release swu]を押して、InfluxDBのパッケージをインストールしたコンテナイメージを含む SWU イメージファイルを作成してください。
>
> その SWU イメージファイルを ABOSWeb から再び Armadillo にインストールすれば、InfluxDB がインストールされたコンテナが起動するはずです。
>
> どうぞよろしくお願いいたします。
本件、回答ありがとうございます

>InfluxDB を apt でインストールするのであれば、
>ABOSDEのプロジェクトディレクトリにある container/packages.txt にパッケージ名を追記してください。
>
>その後に、まだ開発段階であれば[Generate development swu]、開発が終わりリリース段階であれば[Generate release swu]を押して、InfluxDBのパッケージをインストールしたコンテナイメージを含む SWU イメージファイルを作成してください。
>
>その SWU イメージファイルを ABOSWeb から再び Armadillo にインストールすれば、InfluxDB がインストールされたコンテナが起動するはずです。
つまり、ABOSDEを使ってPackage.txtからの変更のみが受け付けられて、Podmanコマンドなどで手動インストールした場合はインストールしたパッケージを永続化はできないということでしょうか?

また、InfluxDBへ蓄積したデータについて保持する方法はないのでしょうか?

at_satoshi.ohta

2024年2月14日 13時21分

太田です。

ご返信ありがとうございます。

> つまり、ABOSDEを使ってPackage.txtからの変更のみが受け付けられて、Podmanコマンドなどで手動インストールした場合はインストールしたパッケージを永続化はできないということでしょうか?

Armadillo 上で podman コマンドなどを使用して手動でインストールすることも可能ですが、手順が複雑になるので ABOSDE を使用することを推奨します。

> また、InfluxDBへ蓄積したデータについて保持する方法はないのでしょうか?

ABOS の「/var/app/volumes/プロジェクト名」ディレクトリにデータを配置することで再起動をしてもデータを保持することが出来ます。
ABOSDE を用いた下記の手順で InfluxDB へ蓄積したデータを保持することができると思います。

1. influxdb.confを取得する
2. InfluxDBのデータ保存先を変更する
3. コンテナ内の「/etc/influxdb/influxdb.conf」を「my_project/app/src/influxdb.conf」に置き換える

詳細は下記に示します。
以降で示すパスの「my_project」はお客様のプロジェクトディレクトリの名前に置き換えてください。

1. influxdb.confを取得する

InfluxDBの設定ファイル influxdb.conf をホストPCのコンテナイメージから取得します。
VScode でプロジェクトディレクトリの「my_project/container/packages.txt」に下記を追記してください。

influxdb

[Generate development swu]を実行してください。
influxdb がインストールされた「localhost/arm64v8/my_project:latest」というコンテナイメージが ATDE に作成されます。
ターミナルを開いてプロジェクトディレクトリ下に移動して下記を実行してください。

[ATDE ~/]$ cd my_project
[ATDE my_project/]$ podman run --rm -itd --name my_project localhost/arm64v8/my_project sleep infinity
[ATDE my_project/]$ podman cp my_project:/etc/influxdb/influxdb.conf ./container/
[ATDE my_project/]$ podman stop my_project

influxdb.conf が「my_project/container」ディレクトリに保存されます。

2. influxDBのデータ保存先を変更する

VScode 上で「my_project/container/influxdb.conf」を編集します。
下記のようにInfluxDBのデータの保存先を変更します。

「/var/lib/influxdb/meta」>「/vol_data/influxdb/meta」
「/var/lib/influxdb/data」>「/vol_data/influxdb/data」
「/var/lib/influxdb/wal」>「/vol_data/influxdb/wal」

3. コンテナ内の「/etc/influxdb/influxdb.conf」を「my_project/app/src/influxdb.conf」に置き換える

「my_project/container/Dockerfile」に下記を追記してください。

COPY influxdb.conf /etc/influxdb/influxdb.conf

これでコンテナイメージ作成時に「my_project/app/src/influxdb.conf」が「/etc/influxdb/influxdb.conf」に置き換わります。

最後に、
VScode でプロジェクトディレクトリの「my_project/config/app.conf」に下記の記述があることをご確認ください。

add_volumes /var/app/volumes/{{PROJECT}}:/vol_data

app.conf は Armadillo 上でコンテナを起動するためのファイルです。
上記の設定は ABOS の「/var/app/volumes/my_project」をコンテナ内の「/vol_data」にマウントします。
それにより、コンテナ内の「/vol_data/influxdb/meta」などに保存されるデータは、ABOS 上の「/var/app/volumes/my_project/influxdb/meta」などに保存されるはずです。
add_volumesについての説明はマニュアルにございますのでご参照ください。

https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

以上を行うと、「/var/app/volumes/my_project/influxdb」ディレクトリに InfluxDB のデータが保持されると思います。

よろしくお願いいたします。

at_satoshi.ohta

2024年2月14日 13時37分

太田です。

続けて返信してしまい申し訳ありません。

上記の返信で一部パスを間違っていたので修正します。

> 3. コンテナ内の「/etc/influxdb/influxdb.conf」を「my_project/app/src/influxdb.conf」に置き換える
正しくは、
> 3. コンテナ内の「/etc/influxdb/influxdb.conf」を「my_project/container/influxdb.conf」に置き換える

> これでコンテナイメージ作成時に「my_project/app/src/influxdb.conf」が「/etc/influxdb/influxdb.conf」に置き換わります。
正しくは、
> これでコンテナイメージ作成時に「my_project/container/influxdb.conf」が「/etc/influxdb/influxdb.conf」に置き換わります。

となります。

また、上記の返信に沿って編集を行った後、もう一度 [Generate development swu] を実行して SWU イメージファイルを作成し直す必要がありますのでご注意ください。

よろしくお願いいたします。

takeshita_kyouhei

2024年2月14日 15時45分

> 太田です。
>
> 続けて返信してしまい申し訳ありません。
>
> 上記の返信で一部パスを間違っていたので修正します。
>
> > 3. コンテナ内の「/etc/influxdb/influxdb.conf」を「my_project/app/src/influxdb.conf」に置き換える
> 正しくは、
> > 3. コンテナ内の「/etc/influxdb/influxdb.conf」を「my_project/container/influxdb.conf」に置き換える
>
> > これでコンテナイメージ作成時に「my_project/app/src/influxdb.conf」が「/etc/influxdb/influxdb.conf」に置き換わります。
> 正しくは、
> > これでコンテナイメージ作成時に「my_project/container/influxdb.conf」が「/etc/influxdb/influxdb.conf」に置き換わります。
>
> となります。
>
> また、上記の返信に沿って編集を行った後、もう一度 [Generate development swu] を実行して SWU イメージファイルを作成し直す必要がありますのでご注意ください。
>
> よろしくお願いいたします。
上記返信いただきありがとうございます
大変参考になりました

コンテナへのパッケージインストール及び永続化について、手順が難しいこと承知しました

コンテナへパッケージをインストールするために「container/packages.txt」を記入し、SWUイメージを作成すると思いますが、パッケージがaptでダウンロードされるタイミングはどのタイミングになるのでしょうか?
 SWUイメージ作成時?
 ABOSWebでイメージをインストールした時?
 コンテナ起動時(IoTGWの電源が入切される毎)?

最終的にはSORACOMの従量課金SIMカードを使用する予定なので、通信量をなるべく減らしたい・通信されるタイミングを把握しておきたいと考えています

at_satoshi.ohta

2024年2月14日 16時16分

太田です。
ご返信ありがとうございます。

パッケージが apt でダウンロードされるタイミングは ABOSDE 上で [Generate development swu] もしくは [Generate release swu] を実行したときです。
development.swu もしくは release.swu には、すでにパッケージがインストールされたコンテナイメージが含まれた状態になります。

そのため、パッケージのインストールに関しましては Armadillo 上で実行されないので、パッケージのインストールによる通信は発生しません。

よろしくお願いいたします。

takeshita_kyouhei

2024年2月19日 14時04分

> 太田です。
> ご返信ありがとうございます。
>
> パッケージが apt でダウンロードされるタイミングは ABOSDE 上で [Generate development swu] もしくは [Generate release swu] を実行したときです。
> development.swu もしくは release.swu には、すでにパッケージがインストールされたコンテナイメージが含まれた状態になります。
>
> そのため、パッケージのインストールに関しましては Armadillo 上で実行されないので、パッケージのインストールによる通信は発生しません。
>
> よろしくお願いいたします。
本件、ご回答いただきありがとうございました
開発の際に参考とさせていただきたいと思います