1.4. アーティファクトを作成してデプロイする

Menderのアプリケーションアップデートアーティファクトを利用したコンテナの更新方法を説明します。

習得する内容
  • Menderのアプリケーションアップデートの仕組み

  • アプリケーションアップデートアーティファクトを利用したコンテナの更新方法

アプリケーションアップデートの仕組み

Terminal System 2は、Menderのアプリケーションアップデートアーティファクトを利用したアップデートに対応しています。

注釈

Menderでは、ソフトウェアの更新に必要な作業をアーティファクトとしてパッケージ化し、Menderサーバーでリリースとして管理することができます。 また、作成したリリースを複数のエッジコンピューターへデプロイすることや、リリースのバージョン管理をすることができます。

アプリケーションアップデートは以下の手順で行います。

  1. 開発用PCでアップデートに必要なファイルやスクリプトを準備し、アプリケーションアップデートアーティファクト (例: 図中の hello-update ) を作成します。

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

  3. Mender Web UIでデプロイメントを作成し、作成したリリースをエッジコンピューターにデプロイします。

  4. エッジコンピューターは、アーティファクトに含まれるスクリプトを実行してアプリケーションをアップデートします。

../../_images/about_update_artifact.png

図 3 アプリケーションアップデートの仕組み

以降の手順で、アプリケーションアップデートアーティファクトを作成して、コンテナを更新する方法を説明します。

アーティファクトの作成

コンテナを更新するアプリケーションアップデートアーティファクトを作成する方法を説明します。

  1. 開発用PCで、アプリケーションアップデートアーティファクトを作成するためのテンプレートプロジェクトを取得します。

    $ git clone  https://github.com/aptpod/terminal-system-artifacts
    
  2. generate.sh を実行して、空のアーティファクト sample_1.0.0.mender が生成できることを確認します。

    $ cd custom-template
    $ ./generate.sh
    ...omitted...
    Artifact "./sample_1.0.0.mender" generated successfully
    
  3. アップデートに利用するファイルを、テンプレートプロジェクトの 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 に変更

  4. アップデートの処理を行うスクリプト 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
    }
    
  5. アーティファクトの情報 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 インストール先のファイルシステム

  6. generate.sh を実行して、カスタマイズしたアーティファクト hello-update_1.0.0.mender を生成します。

    $ ./generate.sh
    ...omitted...
    Artifact "./hello-update_1.0.0.mender" generated successfully
    

アプリケーションアップデートアーティファクトを生成することができました。

リリースの作成とデプロイ

Menderサーバーにアーティファクトをアップロードし、リリースを作成します。

  1. Mender Web UIにアクセスし、[RELEASES] > [UPLOAD]からアーティファクトをアップロードします。

  2. リリースのリストに hello-update_1.0.0 が新しく追加されていることを確認します。

作成したリリースをエッジコンピューターにデプロイします。

  1. Mender Web UIの[DEVICES]をクリックし、リリースをデプロイしたいデバイスをクリックして、デバイス画面を表示します。

  2. デバイス画面右下の Device actions をマウスオーバーし、[Create deployment for this device]をクリックします。

    ../../_images/setup_mender_device_actions_menu.png

    図 4 Device actions

  3. [Select a Release to deploy]のプルダウンメニューから、リリース hello-update_1.0.0 を選択します。

  4. [CREATE DEPLOYMENT]をクリックします。

  5. 自動的に、デプロイメントリスト画面に遷移します。

    ../../_images/setup_mender_deployments.png

    図 5 デプロイメントリスト画面

  6. [View details]をクリックしてデプロイメント詳細画面を表示し、デプロイメントが成功していることを確認します。

    ../../_images/setup_mender_deployments_result_ok.png

    図 6 デプロイメント詳細画面

  7. デバイス画面の[Software]タブを表示し、作成したアプリケーションアップデートアーティファクトがインストールされていることを確認します。

    ../../_images/mender_software_inventory_installed_hello_update.png

    図 7 [Software]タブ

  8. 計測を開始し、新しく追加したデバイスコネクターサービスで計測ができることを確認します。

    ../../_images/edge_finder_mender.png

    アプリケーションアップデートアーティファクトを利用してコンテナを更新し、計測することができました。

  9. 動作確認後、計測を停止します。

  10. 動作確認のためにMenderサーバーにアップロードしたアーティファクトは、以降の操作に必要ないため削除してください。

    Mender Web UIの[RELEASES]でアップロードしたアーティファクトのリリースをクリックし、 [Release actions] > [Delete release]でリリースを削除してください。

次章では、device-connector-intdashコンテナをカスタマイズする方法を説明します。