運用編

5.1. Armadillo を設置する

Armadillo を組み込んだ製品を設置する際の注意点や参考情報を紹介します。

5.1.1. 設置場所

開発時と同様に、水・湿気・ほこり・油煙等の多い場所に設置しないでください。 火災、故障、感電などの原因になる場合があります。

本製品に搭載されている部品の一部は、発熱により高温になる場合があります。 周囲温度や取扱いによってはやけどの原因となる恐れがあります。 本体の電源が入っている間、または電源切断後本体の温度が下がるまでの間は、基板上の電子部品、及びその周辺部分には触れないでください。

無線LAN機能を搭載した製品は、心臓ペースメーカーや補聴器などの医療機器、火災報知器や自動ドアなどの自動制御器、電子レンジ、高度な電子機器やテレビ・ラジオに近接する場所、移動体識別用の構内無線局および特定小電力無線局の近くで使用しないでください。 製品が発生する電波によりこれらの機器の誤作動を招く恐れがあります。

5.1.2. ケーブルの取り回し

一般的に以下の点を注意して設置してください。また、「ハードウェアの設計」「インターフェースの使用方法とデバイスの接続方法」の各章ハードウェア仕様に記載していることにも従ってください。

  • 設置時にケーブルを強く引っ張らないでください。
  • ケーブルはゆるやかに曲げてください。 ケーブルを結線する場合、きつくせず緩く束ねてください。

5.1.3. WLAN+BT コンボモジュール用アンテナの指向性

WLAN+BT コンボモジュール用アンテナはケースに貼り付けられており、図5.1「Armadillo-IoT ゲートウェイ A6E WLAN+BT アンテナの指向性」に示す指向性があります。

[ティップ]

Armadillo-IoT ゲートウェイ A6E 内部に搭載されているアンテナの指向性イメージです。 実際のアンテナの特性を正確に表しているものではありません。

images/a6e-d8a4-wlan-ant-radiation-pattern.svg

図5.1 Armadillo-IoT ゲートウェイ A6E WLAN+BT アンテナの指向性


5.1.4. LTE 外付け用アンテナの指向性

LTE アンテナは図5.2「LTE 外付け用アンテナの指向性」に示す指向性があります。

[ティップ]

一般的なλ/2ダイポールアンテナ、λ/4モノポールアンテナの指向性イメージです。 実際のアンテナの特性を正確に表しているものではありません

images/lte-ant-radiation-pattern.svg

図5.2 LTE 外付け用アンテナの指向性


5.1.5. LTE の電波品質に影響する事項

一般的には、周辺に障害物、特に鉄板や鉄筋コンクリート、電波シールドフィルムの貼られたガラスが存在する場合電波を大きく妨げます。また、周辺機器の電波出力、人通り(周辺のスマートフォン=機器が増える)、基地局との距離・方向など多くの要素によって変化します。

WWAN LED にて電波状況をチェックできますので、設置時に電波状況を確認の上運用ください。WWAN LED の状態と意味は表3.34「LED状態と製品状態の対応について」を参照ください。

5.1.6. サージ対策

サージ対策については、「ESD/雷サージ」を参照してください。

5.1.7. Armadillo の状態を表すインジケータ

LED にて状態を表示しています。

有線 LAN の状態は表3.16「CON4 LAN LEDの動作」を、Armadillo の状態を表示する LED に関しては表3.34「LED状態と製品状態の対応について」を参照ください。

5.1.8. 個体識別情報の取得

設置時に Armadillo を個体ごとに識別したい場合、以下の情報を個体識別情報として利用できます。

  • 個体番号
  • MAC アドレス

これらの情報を取得する方法は以下のとおりです。 状況に合わせて手段を選択してください。

  • 本体シールから取得する
  • コマンドによって取得する

5.1.8.1. 本体シールから取得

Armadillo の各種個体番号、 MAC アドレスなどの個体識別情報は、ケース裏や基板本体に貼付されているシールに記載されています。 製品モデル毎に記載されている内容やシールの位置が異なるので、詳細は各種納入仕様書を参照してください。

5.1.8.2. コマンドによる取得

シールだけでなくコマンドを実行することによっても個体識別情報を取得することができます。以下に個体番号とMACアドレスを取得する方法を説明します。

個体番号を取得する場合、図5.3「個体番号の取得方法(device-info)」に示すコマンドを実行してください。device-infoはバージョン v3.18.4-at.7 以降の ABOSに標準で組み込まれています。

[armadillo ~]# device-info -s
00C900010001 1

図5.3 個体番号の取得方法(device-info)


1

使用しているArmadilloの個体番号が表示されます。

device-infoがインストールされていない場合は図5.4「device-infoのインストール方法」に示すコマンドを実行することでインストールできます。

[armadillo ~]# persist_file -a update
[armadillo ~]# persist_file -a add device-info

図5.4 device-infoのインストール方法


上記の方法でdevice-infoをインストールできない場合は最新のバージョンのABOSにアップデートすることを強く推奨します。非推奨ですが、ABOSをアップデートせずに個体番号を取得したい場合は図5.5「個体番号の取得方法(get-board-info)」に示すようにget-board-infoを実行することでも取得できます。

[armadillo ~]# persist_file -a add get-board-info
[armadillo ~]# get-board-info -s
00C900010001 1

図5.5 個体番号の取得方法(get-board-info)


1

使用しているArmadilloの個体番号が表示されます。

[ティップ]

コンテナ上で個体番号を表示する場合は、個体番号を環境変数として設定することで可能となります。 図5.6「個体番号の環境変数をconfファイルに追記」に示す内容を/etc/atmark/containersの下のconfファイルに記入します。

add_args --env=SERIALNUM=$(device-info -s) 1

図5.6 個体番号の環境変数をconfファイルに追記


1

コンテナ起動毎に環境変数SERIALNUMに値がセットされます。

図5.7「コンテナ上で個体番号を確認する方法」に示すコマンドを実行することでコンテナ上で個体番号を確認することができます。

[container ~]# echo $SERIALNUM
00C900010001

図5.7 コンテナ上で個体番号を確認する方法


次にMACアドレスを取得する方法を説明します。 図5.8「MAC アドレスの確認方法」に示すコマンドを実行することで、各インターフェースの MAC アドレスを取得できます。

[armadillo ~]# ip addr
: (省略)
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:11:0c:12:34:56 brd ff:ff:ff:ff:ff:ff 1
: (省略)

図5.8 MAC アドレスの確認方法


1

link/etherに続くアドレスがMAC アドレスです。

また、出荷時にアットマークテクノが書き込んだEthernet MAC アドレスは図5.9「出荷時のEthernet MAC アドレスの確認方法」に示すコマンドを実行することで取得することができます。

[armadillo ~]# device-info -m
eth0: 00:11:0C:12:34:56 1

図5.9 出荷時のEthernet MAC アドレスの確認方法


1

出荷時にアットマークテクノが書き込んだEthernet MAC アドレスが表示されます。

ただし、図5.9「出荷時のEthernet MAC アドレスの確認方法」で示すコマンドでは、お客様自身で設定したEthernet MAC アドレスを取得することはできないのでご注意ください。お客様自身で設定したEthernet MAC アドレスを取得したい場合は図5.8「MAC アドレスの確認方法」に示すコマンドを実行してください。

5.1.9. 電源を切る

Armadillo の電源を切る場合は、 poweroff コマンドを実行してから電源を切るのが理想的です。 しかし、設置後はコマンドを実行できる環境にない場合が多いです。 この場合、条件が整えば poweroff コマンドを実行せずに電源を切断しても安全に終了できる場合があります。

詳細は、「Armadillo を終了する」を参照してください。

5.2. Armadillo のソフトウェアをアップデートする

設置後の Armadillo のソフトウェアアップデートは SWUpdate を使用することで実現できます。

ここでは、ソフトウェアのアップデートとして以下のような処理を行うことを例として説明します。

  • すでに Armadillo に sample_container_image というコンテナイメージがインストールされている
  • sample_container_image のバージョンを 1.0.0 から 1.0.1 にアップデートする
  • sample_container_image からコンテナを自動起動するための設定ファイル(sample_container.conf)もアップデートする

5.2.1. SWUイメージの作成

アップデートのために SWU イメージを作成します。 SWUイメージの作成には、 mkswu というツールを使います。 「開発の準備」で作成した環境で作業してください。

5.2.2. mkswu の desc ファイルを作成する

SWU イメージを生成するには、 desc ファイルを作成する必要があります。

images/abos-images/desc-to-swu.png

図5.10 desc ファイルから Armadillo へ SWU イメージをインストールする流れ


desc ファイルとは、 SWU イメージを Armadillo にインストールする際に行われる命令を記述したものです。 /usr/share/mkswu/examples/ ディレクトリ以下にサンプルを用意していますので、やりたいことに合わせて編集してお使いください。 なお、 desc ファイルの詳細な書式については、「mkswu の .desc ファイルを編集する」を参照してください。

まず、以下のようなディレクトリ構成で、 sample_container.conf を作成しておきます。 設定ファイルの内容については割愛します。

[ATDE ~/mkswu]$ tree container_start
container_start
└── etc
    └── atmark
        └── containers
            └── sample_container.conf

このような階層構造にしているのは、インストール先の Armadillo 上で sample_container.conf を /etc/atmark/containers/ の下に配置したいためです。

次に、アップデート先のコンテナイメージファイルである sample_container_image.tar を用意します。 コンテナイメージを tar ファイルとして出力する方法を図5.11「コンテナイメージアーカイブ作成例」に示します。

[armadillo ~]# podman save sample_container:[VERSION] -o sample_container_image.tar

図5.11 コンテナイメージアーカイブ作成例


次に、sample_container_update.desc という名前で desc ファイルを作成します。 図5.12「sample_container_update.desc の内容」に、今回の例で使用する sample_container_update.desc ファイルの内容を示します。 sample_container_image.tar と、コンテナ起動設定ファイルを Armadillo にインストールする処理が記述されています。

[ATDE ~/mkswu]$ cat sample_container_update.desc
swdesc_option version=1.0.1

swdesc_usb_container "sample_container_image.tar" 1
swdesc_files --extra-os "container_start" 2

図5.12 sample_container_update.desc の内容


1

sample_container_image.tar ファイルに保存されたコンテナをインストールします。

2

container_start ディレクトリの中身を転送します。

コマンドは書かれた順番でインストールされます。

5.2.3. desc ファイルから SWU イメージを生成する

mkswu コマンドを実行することで、 desc ファイルから SWU イメージを生成できます。

[ATDE ~/mkswu]$ mkswu -o sample_container_update.swu sample_container_update.desc 1
[ATDE ~/mkswu]$ ls sample_container_update.swu 2
sample_container_update.swu

図5.13 sample_container_update.desc の内容


1

mkswu コマンドで desc ファイルから SWUイメージを生成

2

sample_container_update.swu が生成されていることを確認

作成されたSWUイメージの内容を確認したい場合は、「SWU イメージの内容の確認」を参照してください。

5.2.4. イメージのインストール

インストールの手順については、「SWU イメージのインストール」を参照してください。

5.3. hawkBit サーバーから複数の Armadillo をアップデートする

5.3.1. hawkBitとは

hawkBitは、サーバー上で実行されるプログラムで、 ネットワーク経由で SWU イメージを配信し、デバイスのソフトウェアを更新することができます。

hawkBitは次のような機能を持っています。

  • ソフトウェアの管理
  • デバイスの管理

    • デバイス認証 (セキュリティトークン、証明書)
    • デバイスのグループ化
  • アップデート処理の管理

    • 進捗のモニタリング
    • スケジューリング、強制アップデート
  • RESTful APIでの直接操作

5.3.2. データ構造

hawkBitは、配信するソフトウェアを次のデータ構造で管理します。

images/hawkBit_data_structure.png

図5.14 hawkBitが扱うソフトウェアのデータ構造


5.3.3. hawkBitサーバーから複数のArmadilloに配信する

hawkBitサーバーを利用することで複数のArmadillo のソフトウェアをまとめてアップデートすることができます。

手順は次のとおりです。

  1. コンテナ環境の準備

    Dockerを利用すると簡単にサーバーを準備できます。 Dockerの準備については https://docs.docker.com/get-docker/ を参照してください。

    Dockerの準備ができたら、要件に合わせてコンテナの設定を行います。

    • ATDE の場合

    • ATDE以外の場合

      • Armadillo-IoT ゲートウェイ A6E 開発用ツール から 「Hawkbit docker-composeコンテナ」 をダウンロードして展開してください。 この場合、以下に /usr/share/mkswu/hawkbit-compose を使う際に展開先のディレクトリとして扱ってください。
      • dockerがアクセスできるホストネームやアドレスを控えておいてください。
  2. hawkBitサーバーの準備

    /usr/share/mkswu/hawkbit-compose/setup_container.sh を実行して、質問に答えてください。

    以下に簡単な(TLSを有効にしない)テスト用の場合と、 TLSを有効にした場合の例を示します。

    setup_container.sh を一度実行した場合はデータのディレクトリにある setup_container.sh のリンクを実行して、ユーザーの追加等のオプション変更を行うこともできます。 詳細は`--help` を参考にしてください。

    [ATDE ~]$ /usr/share/mkswu/hawkbit-compose/setup_container.sh
    docker-compose の設定ファイルと hawkBit のデータをどこに保存しますか? [/home/atmark/hawkbit-compose] 1
    setup_container.sh へのリンクを /home/atmark/hawkbit-compose に作ります。
    docker サービスに接続できませんでした。sudo でもう一度試します。
    [sudo] atmark のパスワード: 2
    OK!
    Hawkbit admin user name [admin] 3
    admin ユーザーのパスワード:  4
    パスワードを再入力してください:
    追加の管理人アカウントのユーザーネーム(空にすると追加しません) 5
    hawkBit の「device」ユーザーを登録しますか?(自動登録用) [Y/n]  6
    device ユーザーのパスワード:
    パスワードを再入力してください:
    hawkBit の「mkswu」ユーザーを登録しますか?(swuのアップロード用) [Y/n] 7
    ユーザーにロールアウトの権限を与えますか?(インストール要求を出すこと) [Y/n] 8
    mkswu ユーザーのパスワード:
    パスワードを再入力してください:
    Setup TLS reverse proxy? [y/N] 9
    
    コンテナの設定が完了しました。docker-compose コマンドでコンテナの管理が可能です。
    /home/atmark/hawkbit-compose/setup_container.sh を再び実行すると設定の変更が可能です。
    hawkBit コンテナを起動しますか? [Y/n] 10
    Creating network "hawkbit-compose_default" with the default driver
    Pulling mysql (mysql:5.7)...
    : (省略)
    Creating hawkbit-compose_hawkbit_1 ... done
    Creating hawkbit-compose_mysql_1   ... done

    図5.15 hawkBit コンテナのTLSなしの場合(テスト用)の実行例


    1

    コンテナのコンフィグレーションとデータベースの場所を設定します。

    2

    dockerの設定によってsudoが必要な場合もあります。

    3

    admin ユーザーのユーザー名を入力します。

    4

    admin ユーザーのパスワードを二回入力します。

    5

    追加のユーザーが必要な場合に追加できます。

    6

    examples/hawkbit_register.desc で armadillo を登録する場合に作っておいてください。 詳細は 「SWU で hawkBit を登録する」 を参考にしてください。

    7

    hawkbit_push_update でアップデートを CLI で扱う場合は、「Y」を入力してください。 詳細は 「hawkBit のアップデート管理を CLI で行う」 を参照してください。

    8

    hawkbit_push_update でアップデートを実行する場合は、「Y」を入力してください。

    9

    ここでは http でテストのコンテナを作成するので、「N」のままで進みます。

    10

    コンテナを起動します。初期化が終わったら <IP>:8080 でアクセス可能になります。

    [ATDE ~]$ /usr/share/mkswu/hawkbit-compose/setup_container.sh
    docker-compose の設定ファイルと hawkBit のデータをどこに保存しますか? [/home/atmark/hawkbit-compose]
    setup_container.sh へのリンクを /home/atmark/hawkbit-compose に作ります。
    docker サービスに接続できませんでした。sudo でもう一度試します。
    OK!
    Hawkbit admin user name [admin]
    admin ユーザーのパスワード:
    パスワードを再入力してください:
    パスワードが一致しません。
    admin ユーザーのパスワード:
    パスワードを再入力してください:
    追加の管理人アカウントのユーザーネーム(空にすると追加しません)
    hawkBit の「device」ユーザーを登録しますか?(自動登録用) [Y/n]
    device ユーザーのパスワード:
    パスワードを再入力してください:
    hawkBit の「mkswu」ユーザーを登録しますか?(swuのアップロード用) [Y/n]
    ユーザーにロールアウトの権限を与えますか?(インストール要求を出すこと) [Y/n]
    mkswu ユーザーのパスワード:
    パスワードを再入力してください:
    Setup TLS reverse proxy? [y/N] y 1
    lighttpd が起動中で、リバースプロキシ設定と競合しています。
    lighthttpd サービスを停止しますか? [Y/n] 2
    Synchronizing state of lighttpd.service with SysV service script with /lib/systemd/systemd-sysv-install.
    Executing: /lib/systemd/systemd-sysv-install disable lighttpd
    Removed /etc/systemd/system/multi-user.target.wants/lighttpd.service.
    リバースプロキシの設定に証明書の domain name が必要です。
    この domain はこのままデバイスからアクセスできる名前にしてください。
    例えば、https://hawkbit.domain.tld でアクセスしたら hawkbit.domain.tld、
    https://10.1.1.1 でしたら 10.1.1.1 にしてください。
    証明書の domain name: 10.1.1.1 3
    証明書の有効期限を指定する必要があります。Let's encryptを使用する場合、
    この値は新しい証明書が生成されるまでしか使用されないので、デフォルトの値
    のままにしておくことができます。Let's encryptを使用しない場合、
    数年ごとに証明書を新しくすることが最も好ましです。
    証明書の有効期間は何日間にしますか? [3650] 4
    クライアントのTLS認証を設定するためにCAが必要です。
    署名CAのファイルパス(空にするとクライアントTLS認証を無効になります) [] 5
    サーバーが直接インターネットにアクセス可能であれば、Let's Encryptの証明書
    を設定することができます。TOSへの同意を意味します。
    https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
    certbotコンテナを設定しますか? [y/N] 6
    
    /home/atmark/hawkbit-compose/data/nginx_certs/proxy.crt を /usr/local/share/ca-certificates/ にコピーして、 update-ca-certificates を実行する必要があります。
    このbase64でエンコードされたコピーをexamples/hawkbit_register.sh の
    SSL_CA_BASE64 に指定する手順が推奨されます。
    
    LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlekNDQVNHZ0F3SUJBZ0lVQTByZ0cwcTJF
    SFNnampmb0tUZWg3aGlaSVVVd0NnWUlLb1pJemowRUF3SXcKRXpFUk1BOEdBMVVFQXd3SU1UQXVN
    UzR4TGpFd0hoY05Nakl3TXpJMU1EVXhOVFU0V2hjTk16SXdNekl5TURVeApOVFU0V2pBVE1SRXdE
    d1lEVlFRRERBZ3hNQzR4TGpFdU1UQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VICkEwSUFC
    SDFFREhBN3NOTlFJUDlTdlhlUnNmWjl2dVVFWkRkMVE2TzViRlV2RTh4UjUwUlBCLzNlajMzd0VI
    NEoKYmZqb296bEpXaExlSG5SbGZsaHExVDlKdm5TalV6QlJNQjBHQTFVZERnUVdCQlFBUmYvSkdT
    dkVJek5xZ2JMNQpQamY2VGRpSk1EQWZCZ05WSFNNRUdEQVdnQlFBUmYvSkdTdkVJek5xZ2JMNVBq
    ZjZUZGlKTURBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Bb0dDQ3FHU000OUJBTUNBMGdBTUVVQ0lD
    Nis3ZzJlZk1SRXl0RVk5WDhDNC8vUEw1U1kKWUlGZHUxVFZiUEZrSlV0SUFpRUE4bm1VSnVQSFlz
    SHg2N2ErZFRwSXZ1QmJUSG1KbWd6dUl3bTJ2RXppRnZRPQotLS0tLUVORCBDRVJUSUZJQ0FURS0t
    LS0tCg== 7
    
    
    Let's encryptの設定は後で足したい場合にsetup_container.shを--letsencryptで実行してください。
    
    コンテナの設定が完了しました。docker-compose コマンドでコンテナの管理が可能です。
    /home/atmark/hawkbit-compose/setup_container.sh を再び実行すると設定の変更が可能です。
    hawkBit コンテナを起動しますか? [Y/n]

    図5.16 hawkBit コンテナのTLSありの場合の実行例


    1

    今回は TLS を有効にするので、「y」を入力します。

    2

    lighttpd サービスが起動している場合に聞かれます。不要なので、停止します。

    3

    証明書の common name を入力してください。ATDE の場合、 ポート転送によってホストのIPアドレスで接続しますのでそのアドレスを入力します。 Let’s encrypt を使用する場合には外部からアクセス可能なDNSを入力してください。

    4

    証明書の有効期間を設定します。デフォルトでは10年になっています。 Let’s encryptを使用する場合には使われていません。

    5

    クライアント側では x509 証明書で認証をとることができますが、この例では使用しません。

    6

    Let’s encrypt による証明書を作成できます。 ATDE の場合は外部からのアクセスが難しいので、この例では使用しません。

    7

    自己署名証明書を作成したので、 Armadillo に設置する必要があります。 この証明書の取扱いは 「SWU で hawkBit を登録する」 を参照してください。

  3. hawkBitへのログイン

    作成したコンテナによって http://<サーバーのIPアドレス>:8080https://<サーバーのアドレス> にアクセスすると、ログイン画面が表示されます。

    images/hawkBit_login.png

    デフォルトでは次のアカウントでログインできます。

    ユーザー

    admin

    パスワード

    admin

  4. ArmadilloをTargetに登録する

    左側のメニューから Deployment をクリックして、Deployment の画面に移ります。

    images/hawkBit_security_token.png

    "+"をクリックしてTargetを作成します。

    作成したターゲットをクリックすると、 下のペインに "Security token:<文字列>" と表示されるので、 <文字列>の部分をメモします。

    メモした<文字列>をArmadilloの /etc/swupdate.cfg に設定すると Hawkbit への接続認証が通るようになります。

  5. Target Filterを作成する

    左側のメニューから"Target Filters"をクリックして、Target Filters の画面に移ります。

    images/hawkBit_Target_filters.png

    "+" をクリックして新規にTarget Filterを作成します。

    images/hawkBit_Target_filters_new.png

    Filter name と フィルタリング条件を入力して保存します。

  6. Software moduleを作成する

    左側のメニューから"Upload"をクリックして、Upload Managementの画面に移ります。

    images/hawkBit_software_module.png

    "+" をクリックしてSoftware moduleを作成します。 type には OS/Application、 version には 任意の文字列を指定します。

  7. swuパッケージをアップロードしてSoftware moduleに関連付ける

    先程作成した Software module を選択して、ハイライトされた状態で、 "Upload File"ボタンをクリックするか、ファイルをドラッグアンドドロップしてアップロードします。

    images/hawkBit_software_module_result.png
  8. Distributionを作成してSoftware moduleを関連付ける

    左側のメニューから"Distribution"をクリックして、Distribution Managementの画面に移ります。

    images/hawkBit_distribution.png

    "+" をクリックしてDistributionを作成します。 type には OS/OSwithApp/Apps、 version には任意の文字列を指定します。

    images/hawkBit_distribution_new.png

    "Software module"のペインから先程作成した Softwareをドラッグして、作成したDistributionの上にドロップします。

    images/hawkBit_Distribution_assignment.png
  9. Rolloutを作成してアップデートを開始する

    左側のメニューから"Rollout"をクリックして、Rollout Managementの画面に移ります。

    images/hawkBit_Rollouts.png

    "+"をクリックしてRolloutを作成します。

    images/hawkBit_Rollouts_new.png

    項目

    説明

    Name

    任意の文字列を設定します。

    Distribution Set

    先程作成したDistributionを選択します。

    Custom Target Filter

    先程作成したTarget Filterを選択します。

    Action Type

    アップデート処理をどのように行うかを設定します。 ・Forced/Soft: 通常のアップデート ・Time Forced: 指定した時刻までにアップデートする ・Download only: ダウンロードのみ行う

    Start Type

    Rollout の実行をどのように始めるかを設定します。 ・Manual: 後で手動で開始する ・Auto: Targetからのハートビートで開始する ・Scheduled: 決まった時間から開始する

  10. アップデートの状態を確認する

    Rollout Managementの画面のDetail Statusで、各Rolloutのアップデートの状態を確認できます。

    アップデート中は黄色、アップデートが正常に完了すると緑色になります。

5.3.3.1. hawkBit のアップデート管理を CLI で行う

一つのアップデートを登録するには、hawkBit の Web UI で必要な手順が長いので CLI で行うことで 効率よく実行できます。

サーバーの設定の段階では、「mkswu」のユーザーを作成する必要があります。 作成していない場合は setup_container.sh --add-user mkswu で作成してください。

  1. hawkbit_push_update の実行例
[ATDE ~/mkswu]$ ls enable_sshd.swu 1
enable_sshd.swu

[ATDE ~/mkswu]$ hawkbit_push_update --help
Usage: /usr/bin/hawkbit_push_update [options] file.swu

rollout creation:
  --no-rollout: only upload the file without creating a rollout 2
  --new: create new rollout even if there already is an existing one 3
  --failed: Apply rollout only to nodes that previously failed update 4

post action:
  --start: start rollout immediately after creation 5

[ATDE ~/mkswu]$ hawkbit_push_update --start enable_sshd.swu 6
Uploaded (or checked) image extra_os.sshd 1 successfully
Created rollout extra_os.sshd 1 successfully
Started extra_os.sshd 1 successfully

1

この例ではあらかじめ作成されている enable_sshd.swu を hawkBit に登録します。

2

--no-rollout を使う場合に SWU を「distribution」として登録します。 デフォルトでは rollout も作成します。 テストする際、デバイスがまだ登録されていなければ rollout の段階で失敗します。

3

同じ SWU で rollout を二回作成した場合にエラーが出ます。 もう一度作成する場合は --new を使ってください。

4

一度 rollout をスタートして、 Armadillo で失敗した場合には 失敗したデバイスだけに対応した rollout を作れます。

5

作成した rollout をすぐ実行します。このオプションには追加の権限を許可する必要があります。

6

スタートまで行う実行例です。実行結果は Web UI で表示されます。

5.3.3.2. SWU で hawkBit を登録する

デバイスが多い場合は、SWUを一度作って armadillo を自己登録させることができます。

サーバーの設定の段階では、「device」のユーザーを作成する必要があります。 作成していない場合は setup_container.sh --add-user device で作成してください。

  1. hawkbit_register.desc で hawkBit の自己登録を行う例
[ATDE ~]$ cd mkswu/

[ATDE ~/mkswu]$ cp /usr/share/mkswu/examples/hawkbit_register.* . 1

[ATDE ~/mkswu]$ vi hawkbit_register.sh 2
# Script configuration: edit this if required!
# user given here must have CREATE_TARGET,READ_TARGET_SECURITY_TOKEN permissions
HAWKBIT_USER=device
HAWKBIT_PASSWORD="CS=wC,zJmrQeeKT.3" 3
HAWKBIT_URL=https://10.1.1.1 4
HAWKBIT_TENANT=default
# set custom options for suricatta block or in general in the config
CUSTOM_SWUPDATE_SURICATTA_CFG="" # e.g. "polldelay = 86400;"
CUSTOM_SWUPDATE_CFG=""
# set to non-empty if server certificate is invalid
SSL_NO_CHECK_CERT=
# or set to cafile that must have been updated first
SSL_CAFILE=
# ... or paste here base64 encoded crt content
SSL_CA_BASE64="
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlakNDQVNHZ0F3SUJBZ0lVYTMvYXpNSHZ0
bFFnaFZnZDhIZWhMaEwxNm5Bd0NnWUlLb1pJemowRUF3SXcKRXpFUk1BOEdBMVVFQXd3SU1UQXVN
UzR4TGpFd0hoY05Nakl3TWpFNE1EVTFNakV6V2hjTk16SXdNakUyTURVMQpNakV6V2pBVE1SRXdE
d1lEVlFRRERBZ3hNQzR4TGpFdU1UQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VICkEwSUFC
RFJGcnJVV3hHNnBHdWVoejRkRzVqYkVWTm5scHUwYXBHT1c3UVBPYUF4cWp1ZzJWYjk2UHNScWJY
Sk8KbEFDVVo2OStaMHk3clBqeDJHYnhDNms0czFHalV6QlJNQjBHQTFVZERnUVdCQlJtZzhxL2FV
OURRc3EvTGE1TgpaWFdkTHROUmNEQWZCZ05WSFNNRUdEQVdnQlJtZzhxL2FVOURRc3EvTGE1TlpY
V2RMdE5SY0RBUEJnTlZIUk1CCkFmOEVCVEFEQVFIL01Bb0dDQ3FHU000OUJBTUNBMGNBTUVRQ0lB
ZTRCQ0xKREpWZnFTQVdRcVBqNTFmMjJvQkYKRmVBbVlGY2VBMU45dE8rN0FpQXVvUEV1VGFxWjhH
UFYyRUg1UWdOMFRKS05SckJDOEtpNkZWcFlkRUowYWc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0t
LS0tCg== 5
"
# ... or add your own options if required
CURLOPT=-s

: (省略)

[ATDE ~/mkswu]$ cat hawkbit_register.desc 6
: (省略)
swdesc_script hawkbit_register.sh --version extra_os.hawkbit 1

[ATDE ~/mkswu]$ mkswu hawkbit_register.desc 7
hawkbit_register.swu を作成しました。

[ATDE ~/mkswu]$ mkswu initial_setup.desc hawkbit_register.desc 8
hawkbit_register.desc を組み込みました。
initial_setup.swu を作成しました。

1

hawkbit_register.sh と .desc ファイルをカレントディレクトリにコピーします。

2

hawkbit_register.sh を編集して、設定を記載します。

3

hawkBit の設定の時に入力した「device」ユーザーのパスワードを入力します。この例のパスワードは使用しないでください。

4

hawkBit サーバーのURLを入力します。

5

TLS を使用の場合に、コンテナ作成の時の証明書を base64 で入力します。

6

hawkbit_register.desc の中身を確認します。hawkbit_register.sh を実行するだけです。

7

SWU を作成して、initial_setupがすでにインストール済みの Armadillo にインストールできます。

8

または、initial_setup.desc と合わせて hawkbit_register を含んだ initial_setup.swu を作成します。

5.4. eMMC の寿命を確認する

5.4.1. eMMC について

eMMC とは embedded Multi Media Card の頭文字を取った略称でNAND型のフラッシュメモリを利用した内蔵ストレージです。当社で使用しているものは長期間運用を前提としている為、使用する容量を半分以下にしてSLCモードで使用しています。(例えば32GB製品を10GBで使用、残り22GBは予備領域とする)。

eMMC は耐性に問題が発生した個所を内部コントローラがマスクし、予備領域を割り当てて調整しています。絶対ではありませんが、この予備領域がなくなると書き込みが出来なくなる可能性があります。

5.4.2. eMMC 予備領域の確認方法

Armadillo Base OS には emmc-utils というパッケージがインストールされています。

図5.17「eMMC の予備領域使用率を確認する」示すコマンドを実行し、 EXT_CSD_PRE_EOL_INFO の内容を確認することで eMMC の予備領域の使用率がわかります。 EXT_CSD_PRE_EOL_INFO の値と意味の対応を表5.1「EXT_CSD_PRE_EOL_INFO の値の意味」に示します。

[armadillo ~]# mmc extcsd read /dev/mmcblk0 | grep EXT_CSD_PRE_EOL_INFO
eMMC Pre EOL information [EXT_CSD_PRE_EOL_INFO]: 0x01

図5.17 eMMC の予備領域使用率を確認する


表5.1 EXT_CSD_PRE_EOL_INFO の値の意味

意味

0x01

定常状態(問題無し)

0x02

予備領域 80% 以上使用

0x03

予備領域 90% 以上使用


5.5. Armadillo の部品変更情報を知る

Armadillo に搭載されている部品が変更された場合や、製品が EOL となった場合には以下のページから確認できます。

また、Armadillo サイトにユーザー登録していただくと、お知らせをメールで受信することが可能です。 変更通知についても、メールで受け取ることが可能ですので、ユーザー登録をお願いいたします。

ユーザー登録については「ユーザー登録」を参照してください。

5.6. Armadillo を廃棄する

運用を終了し Armadillo を廃棄する際、セキュリティーの観点から以下のようなことを実施する必要があります。

  • 設置場所に Armadillo を放置せず回収する
  • Armadillo をネットワークから遮断する

    • SIM カードが挿入されているのであれば抜き、プロバイダーとの契約を終了する
    • 無線 LAN の設定を削除する
    • 接続しているクラウドのデバイス証明書を削除・無効にすることでクラウドに接続できなくする
  • 物理的に起動できなくする