先月新しく登場したGreengrass nucleus liteですが、現状ARM64デバイス向けのインストーラーのみが用意されており、CPUアーキテクチャが異なる場合は、自前でビルドする必要があります。
2025年も現役バリバリ(?)のラズパイ1で実際にビルドしてインストールしてみました。
ラズパイ1のスペック
我が家のラズパイ1はRaspberry Pi Model B
と思われます。
Raspberry Pi OSは最新版の「Raspberry Pi OS Lite」を使用しました。
uname -a
Linux raspberrypi 6.6.51+rpt-rpi-v6 #1 Raspbian 1:6.6.51-1+rpt3 (2024-10-08) armv6l GNU/Linux
armv6l
というCPUアーキテクチャのようです。
マネジメントコンソールでコアデバイスを登録
-
左メニューの「Greengrassデバイス」の「コアデバイス」を選択します
「コアデバイスをセットアップ」メニューの「1つのCoreデバイスをセットアップ」を選択します -
コアデバイス名とモノのグループの情報を入力します(とりあえずデフォルトでOK)
-
「Nucleus Lite」を選択します
「独自のカスタムビルドでデバイスをセットアップ」を選択します -
「モノを作成」ボタンをクリックします
「接続キットをダウンロード」をクリックし接続キット({コアデバイス名}-connectionKit.zip)をダウンロードしますダウンロード後、画面最下部の「コアデバイスを表示」をクリックします
(ラズパイ1側の設定が完了するまでは一覧にコアデバイスは表示されません)
ラズパイ1にインストールする
-
ラズパイ1に接続キットを転送します
scp {コアデバイス名}-connectionKit.zip pi@{ラズパイ1のIPアドレス}:/home/pi
-
ラズパイ1にSSHで接続します
ssh pi@{ラズパイ1のIPアドレス}
-
ビルドに必要な環境をセットアップします
sudo apt update sudo apt install -y libssl-dev libcurl4-openssl-dev libsqlite3-dev libyaml-dev \ libsystemd-dev liburiparser-dev uuid-dev libevent-dev libzip-dev cgroup-tools sudo apt install -y build-essential pkg-config cmake git curl
-
Greengrassの動作に必要なユーザーを作成します
sudo groupadd ggcore sudo useradd -Ng ggcore ggcore sudo groupadd gg_component sudo useradd -Ng gg_component gg_component
-
接続キットを展開します
unzip {コアデバイス名}-connectionKit.zip
4ファイルほど展開されます。
tree /home/pi/home/pi ├── AmazonRootCA1.pem ├── config.yaml ├── device.pem.crt └── private.pem.key
-
証明書を所定の位置に配置します
sudo mkdir /ggcredentials sudo cp AmazonRootCA1.pem device.pem.crt private.pem.key /ggcredentials/ sudo chown -R ggcore:ggcore /ggcredentials
-
設定ファイルを一部書き換えます
展開したconfig.yamlは以下のような内容となっています。
--- system: certificateFilePath: "{{config_dir}}/device.pem.crt" privateKeyPath: "{{config_dir}}/private.pem.key" rootCaPath: "{{config_dir}}/AmazonRootCA1.pem" thingName: "GreengrassQuickStartCore-19420944fac" services: {{nucleus_component}}: componentType: "NUCLEUS" configuration: awsRegion: "us-east-1" iotRoleAlias: "GreengrassV2TokenExchangeCoreDeviceRoleAlias" iotDataEndpoint: "**********-ats.iot.us-east-1.amazonaws.com" iotCredEndpoint: "**********.credentials.iot.us-east-1.amazonaws.com"
まずはこちらを参考に
{{config_dir}}
と{{nucleus_component}}
を置換します。sed -i -e s:{{config_dir}}:\/ggcredentials:g -e s:{{data_dir}}:\/var\/lib\/greengrass:g -e s:{{nucleus_component}}:aws.greengrass.NucleusLite:g config.yaml
rootCaPath
とthingName
の間にrootPath
を追加しますsystem: certificateFilePath: "/ggcredentials/device.pem.crt" privateKeyPath: "/ggcredentials/private.pem.key" rootCaPath: "/ggcredentials/AmazonRootCA1.pem" + rootPath: "/var/lib/greengrass" thingName: "GreengrassQuickStartCore-19420944fac" services:
-
設定ファイルを所定の位置に配置します
sudo mkdir -p /etc/greengrass sudo cp config.yaml /etc/greengrass/config.yaml sudo chown -R ggcore:ggcore /etc/greengrass
-
Greengrass nucleus liteを取得します
git clone https://github.com/aws-greengrass/aws-greengrass-lite.git cd aws-greengrass-lite
-
ビルドします
cmake -B build -D CMAKE_BUILD_TYPE=MinSizeRel -D GGL_LOG_LEVEL=DEBUG make -C build -j$(nproc) sudo make -C build install
インストールログ(一部抜粋)
Install the project... -- Install configuration: "MinSizeRel" -- Installing: /usr/local/bin/ggl-cli -- Installing: /usr/local/lib/systemd/system/ggl.core.ggipcd.service -- Installing: /usr/local/lib/systemd/system/ggl.gg-ipc.socket.socket -- Installing: /usr/local/lib/systemd/system/ggl.ipc_component.socket -- Installing: /usr/local/bin/ggipcd -- Installing: /usr/local/lib/systemd/system/ggl.core.ggconfigd.service -- Installing: /usr/local/lib/systemd/system/ggl.gg_config.socket -- Installing: /usr/local/bin/ggconfigd -- Installing: /usr/local/lib/systemd/system/ggl.core.gghealthd.service -- Installing: /usr/local/lib/systemd/system/ggl.gg_health.socket -- Installing: /usr/local/bin/gghealthd -- Installing: /usr/local/lib/systemd/system/ggl.aws_iot_mqtt.socket -- Installing: /usr/local/lib/systemd/system/ggl.core.iotcored.service -- Installing: /usr/local/bin/iotcored -- Installing: /usr/local/lib/systemd/system/ggl.core.ggpubsubd.service -- Installing: /usr/local/lib/systemd/system/ggl.gg_pubsub.socket -- Installing: /usr/local/bin/ggpubsubd -- Installing: /usr/local/lib/systemd/system/ggl.core.ggdeploymentd.service -- Installing: /usr/local/lib/systemd/system/ggl.gg_deployment.socket -- Installing: /usr/local/bin/ggdeploymentd -- Installing: /usr/local/lib/systemd/system/ggl.core.gg-fleet-statusd.service -- Installing: /usr/local/lib/systemd/system/ggl.gg_fleet_status.socket -- Installing: /usr/local/bin/gg-fleet-statusd -- Installing: /usr/local/lib/systemd/system/ggl.aws_iot_tes.socket -- Installing: /usr/local/lib/systemd/system/ggl.core.tesd.service -- Installing: /usr/local/bin/tesd -- Installing: /usr/local/bin/fleet-provisioning -- Installing: /usr/local/bin/ggl-config-init -- Installing: /usr/local/bin/recipe-runner -- Installing: /usr/local/lib/systemd/system/ggl.aws.greengrass.TokenExchangeService.service -- Installing: /usr/local/bin/tes-serverd -- Installing: /usr/local/lib/systemd/system/greengrass-lite.target -- Installing: /usr/local/lib/tmpfiles.d/greengrass_dir.conf -- Installing: /usr/local/bin/echo-server -- Installing: /usr/local/bin/example-client -- Installing: /usr/local/bin/mqtt-client -- Installing: /usr/local/bin/deployment-client -- Installing: /usr/local/bin/status-monitor-client -- Installing: /usr/local/bin/configtest -- Installing: /usr/local/bin/s3-get-test -- Installing: /usr/local/bin/tesd-test -- Installing: /usr/local/bin/recipe2unit-test -- Installing: /usr/local/bin/ggconfigd-test -- Installing: /usr/local/bin/semver-test make: Leaving directory '/home/pi/aws-greengrass-lite/build'
トータルで20分ぐらいで完了します
-
サービスを有効化し、起動します
(systemctl enable
とsystemctl start
をするだけなのですが、モジュールごとに有効化する必要があるのでスクリプトで実行すると楽ちんです)sudo ./misc/run_nucleus
うまく設定ができると、マネジメントコンソール上に表示されます。
(GreengrassQuickStartCore-19420944facが今回追加したコアデバイスです)
参考
https://github.com/aws-greengrass/aws-greengrass-lite/blob/main/docs/INSTALL.md
https://github.com/aws-greengrass/aws-greengrass-lite/blob/main/docs/SETUP.md
https://qiita.com/sparkgene/items/a6d4710e8d192b87e292