Armadilloフォーラム

pythonについて

sohan_narita

2022年11月25日 14時39分

お世話になっております。

Armadillo-IoT A6E上でPythonを動作させたいです。
A6のようにapt installでインストールしようとしてもできませんでした。

インストールから動作まで、どのような手順で行うのでしょうか。
アプリケーションコンテナを作成してその中で動作させる形になるのでしょうか。
ご教授のほどよろしくお願いいたします。

コメント

入江です。

> インストールから動作まで、どのような手順で行うのでしょうか。
> アプリケーションコンテナを作成してその中で動作させる形になるのでしょうか。

Armadillo-IoT ゲートウェイ A6EをはじめとしたArmadillo Base OS搭載製品は、基本的に
コンテナを作成してその中でお客様のアプリケーションを動かす思想となっています。

開発手順などの詳細は製品マニュアルの「開発の基本的な流れ」をご一読ください。
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

A6Eでは、インターフェースの操作やクラウドへのアップロードなどの基本的な機能が詰まった
「ゲートウェイコンテナ」が初めから動作しています。
お客様のやりたいことにマッチしていれば、こちらを改造して開発を行なっていただくのが手軽です。
(Python3がプリインストールされています)
ただし、ゲートウェイコンテナ内のディストリビューションはA6と異なりDebianでなくAlpine Linux
であることに注意してください。

もちろんDebianのコンテナを作成していただき、その中でアプリケーションを動かすことも可能です。

同様にpythonでアプリケーションを作成しようとしていますが、pythonが見つかりません。

apk update
apk apk add --no-cache python3

でインストールはできますが、起動し直すと消えてしまいます。

abos-ctrl podman-storage --disk
を実行してもインストールしたファイルは残らないのでしょうか?
残すには何をすれば良いのでしょうか?

アットマークテクノの都鳥です。

> 同様にpythonでアプリケーションを作成しようとしていますが、pythonが見つかりません。
>
> apk update
> apk apk add --no-cache python3
>
> でインストールはできますが、起動し直すと消えてしまいます。
>
> abos-ctrl podman-storage --disk
> を実行してもインストールしたファイルは残らないのでしょうか?
> 残すには何をすれば良いのでしょうか?

Armadillo Base OS に Python をインストールなさったと推察しておりますが、
Armadillo Base OS 搭載製品は、コンテナを作成し、その中でお客様のアプリケーションを動かす思想となっています。

開発手順につきましては、製品マニュアルの以下が参考になるかと存じます。
製品マニュアル: https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

● 9.4.1.3. ゲートウェイコンテナイメージを改変する
 Armadillo-IoT ゲートウェイ A6E には、「ゲートウェイコンテナ」が書き込まれており、
 そのコンテナには予め Python3 がインストールされています。
 ゲートウェイコンテナの機能がお客様の目的とマッチしているのであれば、こちらを改造していただくのが良いかと思います。

● 9.4.2. ゲートウェイコンテナを利用せず、一からコンテナを作成する
 上記、ゲートウェイコンテナは Python3 以外にも、ゲートウェイコンテナの機能を動作させるための
 パッケージがインストールされています。
 そのため、必要最低限の構成としたい場合は、一からコンテナを作成することをお勧めいたします。

アットマークテクノ 都鳥様、ご返信ありがとうございます。

> 開発手順につきましては、製品マニュアルの以下が参考になるかと存じます。
> 製品マニュアル: https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

マニュアルを見ていますが、分かり難くて追い切れていません。
実行例もそのまま入力しても動かないものがあり難儀しています。

今動いているものを停止して自作のアプリが動作してくれれば良いだけです。
どうしてもコンテナを作らないとダメなのでしょうか?

configで今動いているものを止めるところまではできたのですが、インストールした物を残しておくことができず毎回インストールしています。

> アットマークテクノ 都鳥様、ご返信ありがとうございます。
>
> > 開発手順につきましては、製品マニュアルの以下が参考になるかと存じます。
> > 製品マニュアル: https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
>
> マニュアルを見ていますが、分かり難くて追い切れていません。
> 実行例もそのまま入力しても動かないものがあり難儀しています。
>
> 今動いているものを停止して自作のアプリが動作してくれれば良いだけです。
> どうしてもコンテナを作らないとダメなのでしょうか?
>
> configで今動いているものを止めるところまではできたのですが、インストールした物を残しておくことができず毎回インストールしています。

アットマークテクノの古賀です。

saiさん:
>>開発手順につきましては、製品マニュアルの以下が参考になるかと存じます。
>>製品マニュアル: https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

>今動いているものを停止して自作のアプリが動作してくれれば良いだけです。
>どうしてもコンテナを作らないとダメなのでしょうか?
>
>configで今動いているものを止めるところまではできたのですが、インストールした物を残しておくことができず毎回インストールしています。

saiさん(2022年12月20日 14時53分):
>同様にpythonでアプリケーションを作成しようとしていますが、pythonが見つかりません。
>
>apk update
>apk apk add --no-cache python3
>
>でインストールはできますが、起動し直すと消えてしまいます。
>
>abos-ctrl podman-storage --disk
>を実行してもインストールしたファイルは残らないのでしょうか?
>残すには何をすれば良いのでしょうか?

色々試してみる段階、つまり開発の初期段階でという前提での説明になりますが、podman_start でコンテナの起動を行わずに podman start で起動すれば、 disk モードの場合にコンテナ何で行った変更は、再起動で消えません。/etc/atmark/conainers/ にコンテナの .conf ファイルを配置している場合には、その .conf ファイルの名前を <コンテナ名>.conf.bak などに mv で変更してから再起動してみてください(※再起動する前に、persist_file コマンドを使って /etc/atmark/containers/ の変更内容を永続化するのを忘れないでください)。
 または、podman rename コマンドを使ってコンテナの名前を変更するのでも同じような効果を得られます。
 https://docs.podman.io/en/latest/markdown/podman-rename.1.html
ただし、名前を変更しただけですと、/etc/atmark/containers/ の .conf ファイルによって、再起動時に変更前の名前のコンテナが別途自動起動しますので、不要なリソース消費を避けるという観点では、.conf ファイルの名前を変える方がよいです。いずれの場合も、再起動後は次のようにコマンドを実行すれば、コンテナに /bin/sh を起動させて対話操作できます。

podman start <コンテナ名> && podman exec -it <コンテナ名> /bin/sh

なお、都鳥からコメントしましたように、ゲートウェイコンテナのコンテナイメージには python 環境がセットアップ済みですから、それを利用して頂く方が、より簡単かと思います。以下のように、ゲートウェイコンテナ(a6e-gw-container)に /bin/sh を起動させれば、ゲートウェイコンテナイメージにセットアップ済みの python3 をシェル(/bin/sh)から使用できます:

# podman exec -it a6e-gw-container /bin/sh
/ # cd
~ # which python3
/usr/bin/python3
~ # echo "print('Hello from Python')" >hello.py
~ # python3 hello.py
Hello from Python

saiさん:
>どうしてもコンテナを作らないとダメなのでしょうか?

BaseOS に直接 python3 をインストールして、インストールした内容を永続化するよりは、コンテナにインストールしてコンテナ内で動作させることをお勧めします。そうすれば、コンテナ内で変更した内容をコンテナイメージに保存してエクスポートすることで、同じ環境を簡単に別の Armadillo-IoT A6E にコピー(あるいはデプロイ)できます。また、間違ったパッケージを apk や pip でインストールしてしまったり、間違ってファイルやディレクトリを削除してしまうなどして環境を壊した場合も復旧が簡単です。コンテナイメージからコンテナを作り直せばよいからです(※復旧できるように、意味のある変更を行ったタイミングで、podman commit によりコンテナの変更差分をイメージに保存してください。git のリポジトリと同じように考えるのが良いですね)。
 https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…
 https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-base-os-dev…

いかがでしょうか?
ところで

>マニュアルを見ていますが、分かり難くて追い切れていません。
>実行例もそのまま入力しても動かないものがあり難儀しています。

マニュアルに誤記があり、ご迷惑をおかけしています。申し訳ありません。見つけ次第修正し、月例アップデートに反映しています。今月のアップデートでも、いくつかの修正が反映される予定です。

アットマークテクノ古賀様、ご回答頂きありがとうございます。

解説頂き、コンテナの中と外の区別がついていないことに気が付きました。
シリアルで接続したときのプロンプトはOSのものなのでpythonが入っていなかったのですね。
コンテナの中にpython3があることを確認できました。
但し、パスが通っておらずフルパスで指定しないと動きませんでした。
コンテナの作成を試してみたいと思います。

ありがとうございました。