S1.1-06

S1.1-06 では、ファームウェアのアップデート機構を備えており、かつ、エンドユーザがバージョン確認を行うことができ、再起動後もバージョンが維持されることを要求しています。

これは、ファームウェアのダウングレード攻撃を防止するためです。

8.1. SWUpdate によるソフトウェアアップデート方法を理解する

Armadillo のファームウェアアップデート機構として、 SWUpdate を提供しています。 SWUpdate は、ソフトウェアコンポーネントをアップデートするためのツールです。 desc ファイルというインストール実行時に行う処理を記載したファイルから SWU イメージというアップデートファイルを生成します。 この SWU イメージを様々な方法で Armadillo にインストールすることでアップデートを実現できます。

SWU イメージを Armadillo にインストールする方法は以下の通りです。

  • 手元でイメージをインストールする方法

    • CUI コマンドを使用した手動インストール
    • ABOS Web を使用した手動インストール
    • ABOSDE から ABOS Web を使用した手動インストール
    • USB メモリまたは microSD カードからの自動インストール
    • 外部記憶装置からの手動インストール
  • リモートでイメージをインストールする方法

    • Armadillo Twin を使用した自動インストール
    • ウェブサーバーからの手動インストール
    • ウェブサーバーからの定期的な自動インストール

上記の方法で SWU イメージをインストールしてソフトウェアアップデートを行うことで、電源 OFF 後もバージョンは維持されます。

それぞれのインストール方法の詳細については、以下に記載しています。

8.1.1. SWU イメージのインストール方法

8.1.1.1. CUI コマンドを使用した手動インストール

Armadillo 上で以下のコマンドを使用することで最新の ABOS にアップデートできます。

[armadillo ~]# abos-ctrl update

8.1.2. ABOS Web を使用した手動インストール

ABOS Web から PC 上の SWU イメージや HTTP サーバー上の SWU イメージを Armadillo にインストールできます。

ABOS Web のトップページから、"SWU インストール"をクリックすると、図8.1「SWU インストール」の画面に遷移します。

images/abos-images/abos-web/swu-select_image.png

図8.1 SWU インストール


この画面では、PC 上の SWU イメージファイルまたは HTTP サーバー上の SWU イメージファイルの URL を指定して、Armadillo にインストールできます。

"現在の SWU で管理されているバージョン" 欄には、ABOS の各ソフトウェアコンポーネントの名前とバージョン情報を一覧表示します。

images/abos-images/abos-web/swu-curr_vers.png

図8.2 SWU 管理対象ソフトウェアコンポーネントの一覧表示


8.1.2.1. ABOSDE から ABOS Web を使用した手動インストール

VS Code 拡張機能の ABOSDE を使用することで、Armadillo で動作している ABOS Web 経由でアップデートできます。

ローカルネットワーク上の Armadillo をスキャンした後に、 図8.3「ABOSDE で Armadillo に SWU をインストール」 の赤枠で囲まれているボタンをクリックすることで、選択した Armadillo に SWU をインストールできます。 SWU インストールのログは VS Code 画面下部の OUTPUT に表示されます。

images/abos-images/abosde_install_swu.png

図8.3 ABOSDE で Armadillo に SWU をインストール


8.1.2.2. USB メモリまたは microSD カードからの自動インストール

Armadillo に USB メモリを接続すると自動的にアップデートが始まります。 アップデート終了後に Armadillo は自動で再起動します。

USB メモリや microSD カードを vfat もしくは ext4 形式でフォーマットし、作成した SWU イメージをディレクトリを作らずに配置してください。

[ティップ]

ATDE上で USB メモリ/microSD カードのパーティションを作成・フォーマットする方法

https://armadillo.atmark-techno.com/howto/atde-partition-howto

[ATDE ~/mkswu]$ df -h
Filesystem           Size  Used Avail Use% Mounted on
: (省略)
/dev/sda1        15G  5.6G  9.1G  39% /media/USBDRIVE 1
[ATDE ~/mkswu]$ cp initial_setup.swu /media/USBDRIVE/ 2
[ATDE ~/mkswu]$ umount /media/USBDRIVE 3

1

USB メモリがマウントされている場所を確認します。

2

ファイルをコピーします。

3

/media/USBDRIVE をアンマウントします。コマンド終了後に USB メモリを取り外してください。

8.1.2.3. 外部記憶装置からイメージの手動インストール

USB メモリや microSD カード等の外部記憶装置のルートディレクトリ以外に SWU イメージを保存して、手動でイメージのインストールを行います。 なお、ルートディレクトリに保存すると自動アップデートが実行されます。

[armadillo ~]# swupdate -i /mnt/swu/initial_setup.swu
SWUpdate v5f2d8be-dirty

Licensed under GPLv2. See source distribution for detailed copyright notices.

[INFO ] : SWUPDATE running :  [main] : Running on AGX4500 Revision at1
[INFO ] : SWUPDATE started :  Software Update started !
[INFO ] : SWUPDATE running :  [read_lines_notify] : No base os update: copying current os over
[INFO ] : SWUPDATE running :  [read_lines_notify] : Removing unused containers
[INFO ] : SWUPDATE running :  [read_lines_notify] : swupdate triggering reboot!
Killed

8.1.2.4. Armadillo Twin を使用した自動インストール

Armadillo Twin を使用することで、自身でサーバー構築を行うことなくネットワーク経由で SWU イメージを配信し、デバイスのソフトウェアを更新できます。

複数台管理してアップデートすることも可能です。

また、Armadillo Twin を使用したソフトウェアアップデートの実施方法については、 Armadillo Twin ユーザマニュアル「デバイスのソフトウェアをアップデートする」 を参照してください。

8.1.2.5. ウェブサーバーからイメージの手動インストール

SWU イメージをウェブサーバーにアップロードして、イメージのインストールを行います。 以下は、http://server/initial_setup.swu のイメージをインストールする例です。

[armadillo ~]# swupdate -d '-u http://server/initial_setup.swu'
SWUpdate v5f2d8be-dirty

Licensed under GPLv2. See source distribution for detailed copyright notices.

[INFO ] : SWUPDATE running :  [main] : Running on AGX4500 Revision at1
[INFO ] : SWUPDATE running :  [channel_get_file] : Total download size is 25 kB.
[INFO ] : SWUPDATE started :  Software Update started !
[INFO ] : SWUPDATE running :  [read_lines_notify] : No base os update: copying current os over
[INFO ] : SWUPDATE running :  [read_lines_notify] : Removing unused containers
[INFO ] : SWUPDATE running :  [read_lines_notify] : swupdate triggering reboot!
Killed

8.1.2.6. ウェブサーバーからの定期的な自動インストール

swupdate-url サービスを有効にすると、定期的に登録した URL をチェックして指定した時間に SWUpdate を実行します。 以下はサービスの有効化とタイミングの設定の例です。

[armadillo ~]# rc-update add swupdate-url 1
[armadillo ~]# persist_file /etc/runlevels/default/swupdate-url 2
[armadillo ~]# echo https://armadillo.atmark-techno.com/files/downloads/armadillo-iot-g4/image/baseos-x2-latest.swu \
> /etc/swupdate.watch 3
[armadillo ~]# echo 'schedule="0 tomorrow"' > /etc/conf.d/swupdate-url
[armadillo ~]# echo 'rdelay="21600"' >> /etc/conf.d/swupdate-url 4
[armadillo ~]# persist_file /etc/swupdate.watch /etc/conf.d/swupdate-url 5

1

swupdate-url サービスを有効にします。

2

サービスの有効化を保存します。

3

イメージの URL を登録します。一行ごとにイメージの URL を設定でき、複数行にイメージの URL を設定できます。

4

チェックやインストールのスケジュールを設定します。

5

変更した設定ファイルを保存します。

USB メモリからのアップデートと同様に、ログは /var/log/messages に保存されます。

8.2. バージョン確認方法を理解する

SWUpdate によるアップデート後、Armadillo のソフトウェアコンポーネントのバージョンを確認する方法として、以下の方法があります。

8.2.1. CUI による確認

SWUpdate によってインストールされたバージョンは、 /etc/sw-versions に記載しています。 内容は以下のコマンドで確認できます。

[armadillo ~]# cat /etc/sw-versions
base_os <ABOS のバージョン>
boot <ブートローダーのバージョン>
:(省略)

8.2.2. ABOS Web による確認

ABOS Web では図8.4「SWU 管理対象ソフトウェアコンポーネントの一覧表示」の画面のように、インストールした SWU イメージの最新のバージョンを確認できます。

images/abos-images/abos-web/swu-curr_vers.png

図8.4 SWU 管理対象ソフトウェアコンポーネントの一覧表示


8.3. アップデート方法を決定する

開発者は、「SWU イメージのインストール方法」のいずれかの方法で SWU イメージを使用して ABOS や開発したコンテナイメージをアップデートする必要があります。

アップデート方法を決定した後、攻撃面を減らすために使用しないアップデート方法は無効化してください。

CUI で手動で SWUpdate を実行する方法を除き、「SWU イメージのインストール方法」のアップデート方法は大きく以下の 4 つに分類できます:

  • ABOS Web 経由で SWUpdate を実行する
  • USB メモリまたは microSD カード経由で SWUpdate を実行する
  • Armadillo Twin 経由で SWUpdate を実行する
  • ウェブサーバー経由で SWUpdate を実行する

8.3.1. ABOS Web 経由の SWUpdate の無効化

ABOS Web で SWUpdate を無効化する手順を以下に示します。

まず、ABOS Web にログインして、「設定管理」画面に移動します。 「設定管理」画面の「カスタマイズ」欄にある「メニュー項目を変更する」をクリックします。

images/abos-images/abos-web/customize-change-menu.png

図8.5 ABOS Web の設定管理


次に、「メニュー項目の変更」画面で「SWUインストール」の項目とその説明を空欄にします。

images/abos-images/abos-web/customize-disable-swu-install.png

図8.6 ABOS Web の SWU インストールの無効化


その後、一番下までスクロールして「メニューを設定」ボタンをクリックします。

これで、ABOS Web の SWU インストール機能が無効化されます。

8.3.2. USB メモリまたは microSD カード 経由の SWUpdate の無効化

USB メモリまたは microSD カードから SWUpdate を実行することを禁止するには、Armadillo 上で以下のコマンドを実行してください。

[armadillo ~]# mv /usr/lib/udev/rules.d/swupdate-usb.rules /usr/lib/udev/rules.d/swupdate-usb.rules.bk
[armadillo ~]# persist_file -d /usr/lib/udev/rules.d/swupdate-usb.rules
[armadillo ~]# persist_file /usr/lib/udev/rules.d/swupdate-usb.rules.bk
[armadillo ~]# reboot

図8.7 USB メモリまたは microSD カードによる SWUpdate の無効化


8.3.3. Armadillo Twin の無効化

Armadillo Twin の無効化は、以下の手順で行います。

まず、Armadillo 上で armadillo-twin-agentd を停止し、自動起動を無効にします。

[armadillo ~]# rc-service armadillo-twin-agentd stop
[armadillo ~]# rc-update del armadillo-twin-agentd
[armadillo ~]# persist_file -d /etc/runlevels/default/armadillo-twin-agentd

図8.8 Armadillo Twin の無効化


さらに、Armadillo Twin にデバイスを登録している場合、登録している Armadillo を削除する必要があります。 削除方法は、Armadillo Twin のマニュアルを参照してください。

Armadillo Twin ユーザマニュアル「デバイスを削除する」

8.3.4. ウェブサーバーによる自動アップデートの無効化

ウェブサーバーからの SWUpdate の自動インストールを無効化するには、swupdate-url サービスを停止し、自動起動を無効にします。

[armadillo ~]# rc-service swupdate-url stop
[armadillo ~]# rc-update del swupdate-url
[armadillo ~]# persist_file -d /etc/runlevels/default/swupdate-url

図8.9 swupdate-url サービスの無効化


8.4. バージョンの確認方法を決定する

開発者は、エンドユーザーに対してファームウェアのバージョンを確認する方法を提供する必要があります。

「バージョン確認方法を理解する」では、ABOS Web や CUI コマンドを使用してバージョンを確認する方法を説明しました。

これら以外の方法では、開発者がエンドユーザー向けにバージョンを確認する方法を別途提供する必要があります。

例えば、/etc/sw-versions ファイルからバージョン情報を取得して GUI に表示することで、エンドユーザーがバージョンを確認できるようにする実装が考えられます。

8.5. 実機テストによる評価

S1.1-06 は実機テストによる評価項目です。

開発者は上記のいずれかの方法で SWU イメージを使用して、ABOS や開発したコンテナイメージをアップデートする必要があります。

SWU イメージによるアップデートを実行した後、Armadillo のソフトウェアコンポーネントのバージョンが更新され、再起動後もそのバージョンが維持されることを確認してください。