この章では、サンプルアプリケーション開発内で扱いきれなかった、Armadillo Base OSでの開発に関わる情報を紹介します。
7.1. 作成したコンテナを他のArmadilloに組み込む
「アプリケーションを作成する」では、Armadillo上でコンテナイメージを作成する方法を紹介してきましたが、他のArmadilloなど外部で作成されたコンテナイメージを別なArmadilloに組み込む方法を紹介します。
7.1.1. podman loadでコンテナイメージを組み込む
「podmanコンテナのエクスポート」で紹介した通り、 podman images
コマンドで表示されるコンテナイメージは podman save
コマンドを使用することでファイルとして保存することができました。
このファイルは、 podman load
コマンドを使用することで、別なArmadillo上であってもコンテナイメージとしてインポートすることができます。
サンプルアプリケーションのコンテナイメージを使用した実行例を図7.1「コンテナイメージファイルをインポートする」に示します。
コンテナイメージのサイズはそのイメージの内容によって異なりますが、1GBを超えることもよくあります。
OverlayFS上で保存できるファイルサイズでは保存しきれないことがありますので、この方法でコンテナイメージをインポートする際には、イメージファイルは外部のUSBメモリやSDカードに配置しておくことをお勧めします。
|
podmanコンテナイメージの保存先をeMMCに変更
|
|
/dev/sda1として認識されているUSBメモリ(もしくはSDカード)を/mntにマウントしディレクトリ移動
|
|
USBメモリ上にサンプルアプリケーション用コンテナイメージをダウンロード
|
|
podman load コマンドでコンテナイメージをインポート
|
|
podman images コマンドでインポートできていることを確認
|
7.1.2. SWUpdateでコンテナイメージを組み込む
Armadillo Base OSではソフトウェアのアップデート方法としてSWUpdateを利用できます。
SWUpdateについて詳細はArmadillo-IoT ゲートウェイ G4の製品マニュアルの「 Armadilloのソフトウェアをアップデートする」を参照してしてください。
本手順では、SWUpdateを用いてサンプルアプリケーションを含むコンテナイメージと、コンテナを自動実行するためのsample_container.confをArmadilloに書き込む手順を紹介します。
今回の例ではUSBメモリを使用してアップデートしますので、4GB以上のUSBメモリを用意してください。
まずは開発用PC(本ドキュメントではATDE)でswuイメージを作成します。
7.1.2.1. SWUpdateによる初回アップデート
出荷時のArmadilloは署名されていないswuイメージでもSWUpdateを行うようになっています。
そのため、まずはじめに自分専用の署名鍵を生成して公開鍵をArmadilloに配置する作業をSWUpdateを用いて行うことで、自分が作成したswuイメージでしかアップデートを行わないArmadilloを作成します。
使用しているArmadilloに、過去に一度でもこの初回アップデート作業を行っている場合は二度同じ作業を行うことはできず、する必要もありません。
その際にArmadilloに配置した公開鍵に対応する秘密鍵でアップデートを行いますので、「コンテナイメージを書き込む」に進んでください。
swupdate-mkimage の取得
SWUpdateでは、ソフトウェアアップデートを行うためにswuイメージというファイルを作成します。
アットマークテクノのGithubリポジトリから、swuイメージを作成するソフトウェアであるswupdate-mkimageをクローンします。
署名鍵の生成
genkey.sh を実行して鍵を生成します。
この鍵は、swuイメージを署名するために使用します。
|
会社や製品が分かるような任意の名称を指定します(今回はabos-dev-guide)。
|
|
鍵を保護するパスフレーズを入力します。
|
|
確認のためもう一度同じパスフレーズを入力します。
|
|
swupdate.key swupdate.pem が生成されます。
|
暗号化用鍵の生成
この手順は行わなくても良いオプションですが、swuイメージの暗号化も行うことができます。
swuイメージの暗号化を行うために、暗号化に利用する鍵を作成します。
初回アップデート用swuイメージの作成
生成したswupdate.keyをArmadilloに書き込むためにinitial_setup用のswuイメージを作成します。
|
ここで設定したパスワードは、後にアップデート後のArmadilloへのログインパスワードとなります。
|
|
出力された文字列をコピーします。
|
|
「$6$salt$hash」の部分をコピーした文字列に置き換えてください。
|
|
「$6$salt$hash」の部分をコピーした文字列に置き換えてください。
|
|
swuイメージを生成します。
|
|
genkey.shで設定したパスフレーズを入力してください。
|
|
initial_setup.swuが生成されたことを確認します。
|
USBメモリにswuイメージを配置
ATDEにUSBメモリを接続し、作成したswuイメージを配置します。
|
USBメモリがマウントされている場所を確認します。
|
|
ファイルをコピーします。
|
|
/media/atmark/USBDRIVEをアンマウントします。コマンド終了後にUSBメモリを取り外してください。
|
ArmadilloにUSBメモリを挿入
USBメモリを起動しているのArmadilloに挿入すると、自動的にアップデートが開始され、完了すると再起動します。
rootユーザ、atmarkユーザともに、図7.5「初回アップデート用swuイメージの作成」で設定したパスワードでログインできます。
これでこのArmadilloに公開鍵が配置され、手元の秘密鍵で作成されたswuイメージでアップデート可能になりました。
Armadilloに公開鍵を配置した後に対応する秘密鍵を紛失すると、当該のArmadilloにSWUpdateを行うことができなくなりますのでご注意ください。
次に、導入したいコンテナイメージを含んだswuイメージを作成します。
まず、swupdate-mkimage/abos-dev-guide-descsディレクトリを作成し、その中にArmadilloに組み込みたいコンテナイメージと、自動実行用の.confファイルを配置します。
コンテナの自動実行については「podmanコンテナとアプリケーションの自動実行」を参照してください。
次に、swuイメージ作成に用いるusb_container_sample.descを以下のように作成します。
|
sample_container.confをArmadillo内の/etc/atmark/containersに配置します。
|
|
abos-dev-guide-v1.0.0.tarをコンテナイメージとして組み込みます。
|
descファイルの詳細についてはArmadillo-IoT ゲートウェイ G4の製品マニュアルの「 swupdate-mkimageのdescファイル」を参照してください。
swupdate-mkimage/example以下のdescファイルはサンプルですので、そちらも参考にしてください。
swuイメージを作成します。
|
genkey.shで設定したパスフレーズを入力してください。
|
|
genkey.shで設定したパスフレーズを入力してください。
|
|
ここで挙げられたファイルを全てUSBメモリに書き込みます。
|
ATDEにUSBメモリを接続し、作成したswuイメージと、付属のファイル群を配置します。
|
USBメモリがマウントされている場所を確認します。
|
|
ファイル群をコピーします。
|
|
/media/atmark/USBDRIVEをアンマウントします。コマンド終了後にUSBメモリを取り外してください。
|
initial_setupと同様に、ArmadilloにUSBメモリを挿入すると自動的にアップデートが実行され、コンテナイメージの組み込みとコンテナの自動実行設定が行われます。
その後Armadilloが自動的に再起動し、サンプルアプリケーションが自動実行します。
以上で、SWUpdateを用いてArmadilloにコンテナイメージと自動実行用のconfファイルの配置ができました。
他にもSWUpdateを用いて出来ることは多々ありますので、詳細はArmadillo-IoT ゲートウェイ G4の製品マニュアルの「 Armadilloのソフトウェアをアップデートする」を参照してください。