3.3. ソフトウェアアップデート

Terminal System 2は、Menderを利用したソフトウェアアップデートをサポートしています。

Menderとは

Menderは、northern.tech社のIoTデバイス向けのOTA(Over the Air)ソフトウェアアップデートソリューションです。 Menderサーバーと、デバイスにインストールされたMenderクライアント間で通信し、ソフトウェアアップデートを実現します。

Menderサーバー

WebブラウザでMenderの操作を行うMender Web UIや、各種バックエンド機能を提供するサーバーです。 ユーザー認証、デバイス認証、リリース(Menderアーティファクト)管理、デプロイメント管理、トラブルシューティング機能、デバイスモニタリング機能など、IoTデバイスの遠隔管理に必要な各種機能を備えています。

Menderの操作はMender Web UIだけでなく、Mender APIを利用して行うことも可能です。

Menderクライアント

エッジコンピューターにインストールされるMenderのクライアントアプリケーションです。 MenderサーバーからデプロイされたアーティファクトをMenderクライアントがインストールすることで、ソフトウェアアップデートを実現します。

ソフトウェアアップデートの他に、デバイスの情報を定期的にMenderサーバーに送信する インベントリ送信 や、 デバイス設定の変更 にも対応しています。

Menderアーティファクト

ソフトウェアアップデートで利用するファイルです。 OSのアップデートで使用するOSアップデートアーティファクトと、アプリケーションのアップデートで使用するアプリケーションアップデートアーティファクトの2つの種類があります。 Menderサーバーは同じ名前を持つ複数のアーティファクトを1つのリリースとして管理し、デプロイメントに使用します。

注釈

Menderの詳細については、 Mender docs を参照してください。

パーティション構成

Menderに対応したデバイスは、2つのrootfsパーティションとdataパーティションで主に構成されます。

rootfsパーティション

Linuxカーネルを含むシステムパーティションです。 rootfsパーティションはA/Bの2つの領域で構成され、OSアップデートアーティファクトにより更新されます。

dataパーティション

Menderの更新間で保持するデータを格納するパーティションです。 通常はアップデートで更新されません。

../../_images/feature_software_update_partition.png

図 13 パーティション構成

重要

デバイスがMenderに対応するためには、利用したいデバイス毎にMenderボード統合(board integration)と呼ばれる作業を行い、Menderのアップデートの仕組みに対応した上記のパーティションで構成されたイメージを作成する必要があります。 Terminal System 2は、サポートするエッジコンピューターについてボード統合を行うことで、Menderに対応しています。

アップデートの種類

Menderのソフトウェアアップデートの種類は、OSアップデートとアプリケーションアップデートの2つです。

OSアップデート

OSアップデートアーティファクトを使用して、現在アクティブではないrootfsパーティションをアップデートし、デバイスを再起動してrootfsパーティションを切り替えます。

../../_images/feature_software_update_os_update.png

図 14 OSアップデートで更新する範囲

Terminal System 2では、Yoctoを利用して、OSアップデートアーティファクトを作成します。

アプリケーションアップデート

アプリケーションアップデートアーティファクトを使用して、現在アクティブなrootfsパーティションをアップデートします。 デバイスの再起動は任意で、rootfsパーティションは切り替わりません。

../../_images/feature_software_update_application_update.png

図 15 アプリケーションアップデートで更新する範囲

アプリケーションアップデートは、アップデート種類に応じたアップデートモジュールを利用します。 アップデートモジュールで提供される生成スクリプトを利用して、アプリケーションアップデートアーティファクトを作成します。

アップデートモジュール

新しい種類のソフトウェアアップデートをサポートするための、Menderクライアントの拡張機能です。 Terminal System 2では、単一のファイルをインストールする single-file や、debパッケージをインストールする deb など Menderが提供しているアップデートモジュールのほか、 任意のアップデート処理が可能な custom アップデートモジュールを利用できます。

注釈

Terminal System 2で利用可能なアップデートモジュールは、デバイスのイベントリで確認することができます。 Menderのアップデートモジュールの詳細については、 Mender Hub を参照してください。

アップデートフロー

OSアップデートとアプリケーションアップデートのフローを説明します。

OSアップデート

  1. Yoctoを利用して、Terminal System 2イメージおよびOSアップデートアーティファクトを作成します。

    注釈

    作成したTerminal System 2イメージを利用して、プロビジョニングすることも可能です。

  2. 作成したアーティファクトをMenderサーバーへアップロードします。

  3. Mender Web UIで新しく追加されたアーティファクトのリリースを選択し、デプロイメントを作成します。

  4. デバイスのMenderクライアントは定期的にデプロイメントの有無を確認し、デプロイメントが存在する場合はアーティファクトをダウンロードします。

  5. 現在アクティブではないrootfsパーティションに、OSアップデートアーティファクトに含まれるイメージが書き込まれ、起動するrootfsパーティションが切り替えられてデバイスが再起動されます。これによりOSアップデートが完了します。 何らかの理由によりアップデートに失敗した場合は、起動するパーティションを元のパーティションに戻してロールバックします。

../../_images/feature_software_update_update_os.png

図 16 OSアップデートの流れ

アプリケーションアップデート

custom アップデートモジュールを利用して、外部デバイスのファームウェアを更新する例を説明します。

  1. custom アップデートモジュールの生成スクリプトを利用して、アプリケーションアップデートアーティファクトを作成します。

  2. 作成したアーティファクトをMenderサーバーへアップロードします。

  3. Mender Web UIで新しく追加されたアーティファクトのリリースを選択し、デプロイメントを作成します。

  4. デバイスのMenderクライアントは定期的にデプロイメントの有無を確認し、デプロイメントが存在する場合はダウンロードを実行します。

  5. デバイスに格納されている custom アップデートモジュールのスクリプトが実行されます。

    注釈

    custom アップデートモジュールの場合、 /usr/share/mender/modules/v3/custom のスクリプトが呼び出されます。

  6. アーティファクトに含まれるアップデートファイルが展開され、スクリプトが実行されることで、外部デバイスのファームウェアが更新されます。

../../_images/feature_software_update_update_application.png

図 17 アプリケーションアップデートの流れ

custom アップデートモジュールは任意のスクリプトを処理を実行できるため、以下のような操作が可能です。

  • ファイル更新

  • デバイス設定変更(Terminal System API呼び出し)

  • 更新失敗時のロールバック処理

  • 再起動処理

  • 外部デバイスの操作/更新

バージョン管理

アーティファクトはバージョン管理が可能です。 デバイスにインストールされているアーティファクトのバージョンは、Menderサーバーにインベントリとして報告され、以下の方法で確認することができます。

  • Mender web UIの[Software]タブを確認する

../../_images/feature_software_update_software_inventory.png

図 18 [Software]タブ

  • デバイスで mender show-provides コマンドを実行する

# mender show-provides
artifact_name=terminal-system-image-xxxxxx
data-partition.custom.sample.version=1.0.0
data-partition.mender-configure.version=configuration-6d3918e5-037d-48c9-b9fd-fba94de0b95f
rootfs-image.checksum=f1db13617c4214317ded54a9b65fad907d1b4709095eed959e450bfb251e97bd
rootfs-image.update-module.custom.mender_update_module=custom
rootfs-image.update-module.custom.version=terminal-system-image-xxxxxx
... omitted ...
rootfs-image.version=terminal-system-image-xxxxxx

バージョン情報は以下の2つの種類があります。

rootfs-image

rootfsにインストールされているソフトウェアのバージョンです。 OSアップデートでrootfsパーティションが更新されると、全てのrootfs-imageのソフトウェアバージョンが削除され、新しいrootfsパーティションのバージョンがMenderサーバーに報告されます。

data-partition

dataパーティションにインストールされているソフトウェアのバージョンです。 OSアップデートをしてもdataパーティションは更新されないため、OSアップデートの前後でソフトウェアバージョンを維持します。

OSアップデートアーティファクトのバージョンは、 rootfs-image.version インベントリとして報告されます。 アプリケーションアップデートアーティファクトは、rootfsにソフトウェアをインストールする場合は rootfs-image.<アップデートモジュール名>.<アーティファクト名>.version として、 dataパーティションにインストールする場合は data-partition.<アップデートモジュール名>.<アーティファクト名>.version として報告する必要があります。

注釈

Menderを利用したソフトウェアバージョン管理についての詳細は、 Mender Docs の Software versioning を参照してください。

データ保持

OSアップデートを行うとrootfsパーティションのデータは全て更新され古いデータは削除されます。 保持する必要のあるデータは、dataパーティションや拡張ストレージに格納する必要があります。

Terminal System 2は、以下の方法でOSアップデート間のデータ保持を行います。

dataパーティション

dataパーティションの内容は、OSアップデートをしても保持されます。

rootfs内のいくつかのディレクトリは、dataパーティション内のディレクトリへのリンボリックリンクになっています。そのため、dataパーティションが保持されることにより、これらのディレクトリで行われた変更は維持されます。

また、rootfs内のいくつかのディレクトリではOverlayfsが使用されており、upperdir(書き込み可能レイヤ)としてdataパーティション内のディレクトリが設定されています。そのため、この場合も同様に、これらのディレクトリで行われた変更は維持されます。

以下に、Terminal System 2でのdataパーティションの構成を説明します。

dataパーティションのディレクトリ

データ保持方法 (リンクするrootfsディレクトリ)

説明

/data/mender

シンボリックリンク (/var/lib/mender)

OSアップデート間で保持するMenderの情報(Menderサーバー設定、デプロイログ等)を格納するディレクトリ

/data/mender-configure

シンボリックリンク (/var/lib/mender-configure)

Mender Configureのデバイス設定ファイルを格納するディレクトリ

/data/mender-monitor

シンボリックリンク (/var/lib/mender-monitor)

Mender Monitorのアラート情報を格納するディレクトリ

/data/overlay/etc

Overlayfs (/etc)

システム設定を保持するディレクトリ

/data/overlay/home/admin/.ssh

Overlayfs (/home/admin/.ssh)

adminユーザーのSSH設定を保持するディレクトリ

/data/overlay/home/maint/.ssh

Overlayfs (/home/maint/.ssh)

maintユーザーのSSH設定を保持するディレクトリ

/data/serial_number

リンクなし

Menderでデバイスを識別するシリアル番号

/data/var/cache

バインドマウント (/var/cache)

キャッシュを格納するディレクトリ

/data/var/log

バインドマウント (/var/log)

ログを格納するディレクトリ

これらのdataパーティションの内容は、OSアップデート間で維持されます。

拡張ストレージ

拡張ストレージを利用している場合も、OSアップデート間で内容は維持されます。 EDGEPLANT T1は拡張ストレージとしてSSDを搭載し、以下のディレクトリをバインドマウントして使用します。

SSDのディレクトリ

マウントポイント (rootfs)

説明

/media/ssd/var/lib/core

/var/lib/core

Terminal System 2の設定やintdash Edge Agent2がアップデート間で維持する必要があるファイルを格納するディレクトリ。 デバイスコネクター設定、オーバーライドファイル、カスタム開発したデバイスコネクターサービス、計測データなど。

/media/ssd/var/lib/docker

/var/lib/docker

Dockerのデータディレクトリ(Dockerイメージを含む)