1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AWS IoT GreengrassのOTA更新をやってみた

Posted at

いきなりですがまとめです。

  • OTA更新は/greengrass/ggc/core/greengrassdではなく/greengrass/ota/ota_agent/ggc-otaが起動している必要がある
  • 更新モジュールはS3からとってきている
  • マネジメントコンソールでGreengrass Core 更新ジョブを作成する(APIも存在する)
  • Greengrass Core ソフトウェアだけでなくGreengrass Core OTA エージェントの更新も可能(別々に実施する必要がある)
  • ジョブ作成後、即座に反映される
  • 更新の前後に自前のスクリプトを実施させることが可能。
    更新前にsystemctl stopして、更新後にsystemctl startするんだと思う。
    ただし、OTAエージェントの更新前にstopすると、OTAエージェントの更新が途中で止まってしまったので、こっちは何もしなくて良さそう。
  • 2020/6/6に試したところ、OTA エージェントのバージョンを更新すると、ダウングレードする気がする

検証内容

環境

Docker上で検証(Docker Desktop 2.2.0.4 on Mac)

Greengrass(更新前) v1.10.0
OTAエージェント v1.2.0

Docker関連

Docerfile
FROM amazon/aws-iot-greengrass:1.10.0-amazonlinux

RUN yum install -y procps sysvinit-tools wget

OTA更新時に必要なものがあるので、追加インストールします。

docker-compose.yml
version: '3'
services: 
  greengrass:
    build:
      context: .
      dockerfile: Dockerfile
    volumes: 
      - ./greengrass/certs:/greengrass/certs
      - ./greengrass/config:/greengrass/config
      - ./greengrass/deployment:/greengrass/ggc/deployment
      - ./greengrass/log:/greengrass/ggc/var/log
      - ./greengrass/usr:/greengrass/usr
      - ./greengrass/var/log/greengrass:/var/log/greengrass
      - ./workspace:/workspace
    restart: always
    privileged: true
    command: /sbin/init
    environment: 
      TZ: Asia/Tokyo
    tty: true

volumesでcertsconfigをマウント。その他はログを見たりするためにマウントしました。

OTAエージェントのログは、Greengrass Coreのログとは別に/var/log/greengrassに出力されます。(Greengrass Coreのログは/greengrass/ggc/var/log

systemdを使用したいのでprivileged: truecommand: /sbin/initを追加しました。

systemd関連

greengrass.service
[Unit]
Description=Greengrass Daemon

[Service]
Type=forking
PIDFile=/var/run/greengrassd.pid
Restart=on-failure
ExecStart=/greengrass/ggc/core/greengrassd start
ExecReload=/greengrass/ggc/core/greengrassd restart
ExecStop=/greengrass/ggc/core/greengrassd stop

[Install]
WantedBy=multi-user.target
greengrass_ota.service
[Unit]
Description=Greengrass OTA Agent

[Service]
Type=forking
PIDFile=/var/run/ggc-ota.pid
Restart=on-failure
KillMode=mixed
ExecStart=/greengrass/ota/ota_agent/ggc-ota
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
[Install]
WantedBy=multi-user.target
bash-4.2# systemctl enable greengrass.service
bash-4.2# systemctl enable greengrass_ota.service

bash-4.2# systemctl start greengrass.service
bash-4.2# systemctl start greengrass_ota.service

Greengrass設定

config.json
{

   "coreThing": {                                                     
       
   },
   "runtime": {                                                       
        
   },
   "managedRespawn": true                                            

}
/greengrass/usr/scripts/ggc_pre_update.sh
systemctl stop greengrass.service
/greengrass/usr/scripts/ggc_post_update.sh
systemctl start greengrass.service

ota_pre_update.shota_post_update.shも配置できるので、同様にstopしてみたのですが、OTAエージェントの更新が途中で止まってしまいました。OTAエージェントは事前のstopも事後のstartも不要な感じです。

検証

OTA更新前の状態

bash-4.2# ls -l /greengrass/ggc/packages/
total 4
drwxr-xr-x 1 root root 4096 Jun  6 21:13 1.10.0

bash-4.2# ls -l /greengrass/ota/
total 4
lrwxrwxrwx 1 root root   16 Nov 26  2019 ota_agent -> ota_agent_v1.2.0
drwxr-xr-x 1 root root 4096 Jun  6 21:13 ota_agent_v1.2.0

bash-4.2# 

OTA更新後の状態

bash-4.2# ls -l /greengrass/ggc/packages/
total 4
drwxr-xr-x 8 root root 4096 Jun  6 21:57 1.10.1_1

bash-4.2# ls -l /greengrass/ota/
total 4
lrwxrwxrwx 1 root root   21 Jun  6 21:55 ota_agent -> ./ota_agent_v1.0.0_1/
drwxr-xr-x 4 root root 4096 Jun  6 21:55 ota_agent_v1.0.0_1

bash-4.2# 

OTAエージェントがバージョンダウンしてるよね?

参考にしたサイト

 https://docs.aws.amazon.com/ja_jp/greengrass/latest/developerguide/core-ota-update.html
 https://qiita.com/mikene_koko/items/4c71c969f55e3fe24190
 https://qiita.com/snaka/items/48c0998ffa1e34975a6f
 https://qiita.com/a_yasui/items/f2d8b57aa616e523ede4

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?