1.4. アーティファクトを作成してデプロイする
Menderのアプリケーションアップデートアーティファクトを利用したコンテナの更新方法を説明します。
- 習得する内容
Menderのアプリケーションアップデートの仕組み
アプリケーションアップデートアーティファクトを利用したコンテナの更新方法
アプリケーションアップデートの仕組み
Terminal System 2は、Menderのアプリケーションアップデートアーティファクトを利用したアップデートに対応しています。
注釈
Menderでは、ソフトウェアの更新に必要な作業をアーティファクトとしてパッケージ化し、Menderサーバーでリリースとして管理することができます。 また、作成したリリースを複数のエッジコンピューターへデプロイすることや、リリースのバージョン管理をすることができます。
アプリケーションアップデートは以下の手順で行います。
開発用PCでアップデートに必要なファイルやスクリプトを準備し、アプリケーションアップデートアーティファクト (例: 図中の
hello-update
) を作成します。Menderサーバーにアーティファクトをアップロードし、リリースを作成します。
Mender Web UIでデプロイメントを作成し、作成したリリースをエッジコンピューターにデプロイします。
エッジコンピューターは、アーティファクトに含まれるスクリプトを実行してアプリケーションをアップデートします。
以降の手順で、アプリケーションアップデートアーティファクトを作成して、コンテナを更新する方法を説明します。
アーティファクトの作成
コンテナを更新するアプリケーションアップデートアーティファクトを作成する方法を説明します。
開発用PCで、アプリケーションアップデートアーティファクトを作成するためのテンプレートプロジェクトを取得します。
$ git clone https://github.com/aptpod/terminal-system-artifacts
generate.sh
を実行して、空のアーティファクトsample_1.0.0.mender
が生成できることを確認します。$ cd custom-template $ ./generate.sh ...omitted... Artifact "./sample_1.0.0.mender" generated successfully
アップデートに利用するファイルを、テンプレートプロジェクトの
custom/contents
ディレクトリに格納します。 このチュートリアルでは、Hello
デバイスコネクターサービスを更新するため、custom/contents/Hello.yml
を作成します。以下のコードブロックをコピーして作成してください。
image: python:bullseye entrypoint: python3 command: > -c "while True: import struct, sys, time; f = open('${DC_UPSTREAM_FIFO_0}', 'wb'); now = int(time.clock_gettime(time.CLOCK_MONOTONIC_RAW) * 1_000_000_000); sec = int(now / 1_000_000_000); nsec = int(now - sec * 1_000_000_000); f.write(struct.pack('<LLHHL6s2s6s', sec, nsec, 6, 2, 6, b'string', b'ab', b'Mender')); time.sleep(1); f.close(); " depends_on: intdash-edge-agent2: condition: service_healthy volumes: - /var/run/core/intdash:/var/run/intdash restart: unless-stopped substitution_variables: - key: DC_UPSTREAM_FIFO_0 default: "" validation: "^/var/run/intdash/" display_strings_i18n: - locale: jpn name: FIFO Path description: intdash Edge Agent 2へデータを送信するためのFIFOのパス
前章から以下の変更を加えています。
イメージを
python:bullseye
に変更メッセージを
Mender
に変更
アップデートの処理を行うスクリプト
custom/custom_script.sh
を変更します。アーティファクトのインストール時に呼び出される関数
custom_artifact_install
に、アップデート処理を追記します。Hello.yml
をエッジコンピューターに配置した後、コミット操作でオーバーライドファイルを生成します。function custom_artifact_install() { # Custom install process # Contents are located in $CUSTOM_CONTENTS_DIR cp -f $CUSTOM_CONTENTS_DIR/Hello.yml /var/lib/core/docker-compose/measurement/services/Hello.yml curl -X POST http://localhost:8081/api/v3/device_connectors/-/commit }
アーティファクトの情報
config.sh
を変更します。以下の4つの変数の内容を例のように書き換えて下さい。
注意
ARTIFACT_NAME
には、Menderサーバーにアップロードされているアーティファクト名を設定しないでください。 Menderサーバーにアップロードされているアーティファクトは、Mender Web UIの[RELEASES]で確認することができます。例:
ARTIFACT_NAME="hello-update" DEVICE_TYPES=("edgeplant-t1") ARTIFACT_VERSION="1.0.0" SOFTWARE_FILESYSTEM="data-partition"
ARTIFACT_NAME
アーティファクトの名前DEVICE_TYPES
アーティファクトがサポートするデバイスタイプ(複数指定可能)ARTIFACT_VERSION
アーティファクトのバージョンSOFTWARE_FILESYSTEM
インストール先のファイルシステム
generate.sh
を実行して、カスタマイズしたアーティファクトhello-update_1.0.0.mender
を生成します。$ ./generate.sh ...omitted... Artifact "./hello-update_1.0.0.mender" generated successfully
アプリケーションアップデートアーティファクトを生成することができました。
リリースの作成とデプロイ
Menderサーバーにアーティファクトをアップロードし、リリースを作成します。
Mender Web UIにアクセスし、[RELEASES] > [UPLOAD]からアーティファクトをアップロードします。
リリースのリストに
hello-update_1.0.0
が新しく追加されていることを確認します。
作成したリリースをエッジコンピューターにデプロイします。
Mender Web UIの[DEVICES]をクリックし、リリースをデプロイしたいデバイスをクリックして、デバイス画面を表示します。
デバイス画面右下の
Device actions
をマウスオーバーし、[Create deployment for this device]をクリックします。[Select a Release to deploy]のプルダウンメニューから、リリース
hello-update_1.0.0
を選択します。[CREATE DEPLOYMENT]をクリックします。
自動的に、デプロイメントリスト画面に遷移します。
[View details]をクリックしてデプロイメント詳細画面を表示し、デプロイメントが成功していることを確認します。
デバイス画面の[Software]タブを表示し、作成したアプリケーションアップデートアーティファクトがインストールされていることを確認します。
計測を開始し、新しく追加したデバイスコネクターサービスで計測ができることを確認します。
アプリケーションアップデートアーティファクトを利用してコンテナを更新し、計測することができました。
動作確認後、計測を停止します。
動作確認のためにMenderサーバーにアップロードしたアーティファクトは、以降の操作に必要ないため削除してください。
Mender Web UIの[RELEASES]でアップロードしたアーティファクトのリリースをクリックし、 [Release actions] > [Delete release]でリリースを削除してください。
次章では、device-connector-intdashコンテナをカスタマイズする方法を説明します。