☁️

ADU: RasPi3BのオレオレOSイメージ作成手順

2024/01/31に公開

ADU: RasPi3BのオレオレOSイメージアップデートのRaspberry Pi OSイメージの作成手順です。(誰得?)

作業環境

作業環境はAzure Virtual MachineのUbuntu 20.04を使います。(Ubuntu 22.04も試してみましたが、ビルドできませんでした。)
ディスクがそれなりに必要です。データディスクを付けるのが面倒なので、OSディスクを256GiBにしておきます。
サイズはvCPUが多いとビルドが速いです。Standard D16ds v5 (vCPU 16, RAM 64GiB, OS Disk 256GiB)を使うと約1時間です。

構築環境をダウンロード

オレオレOSイメージ構築のスクリプトなどをダウンロードします。metaレイヤーをサブモジュールで紐づけてあるので--recurse-submodulesオプションを忘れずに指定してください。

cd ~
git clone -b honister --recurse-submodules https://github.com/matsujirushi/iot-hub-device-update-yocto
cd ~/iot-hub-device-update-yocto

秘密鍵を作成

アップデートファイルを署名する秘密鍵priv.pemを作成します。

cd ~/iot-hub-device-update-yocto/keys
echo "ADU!" > priv.pass
openssl genrsa -aes256 -passout file:priv.pass -out priv.pem

matsujirushiappバージョン番号変更

必要に応じて、OSイメージに仕込んでいるmatsujirushiappのバージョン番号を変更します。必須ではありません。
下記コードのv0.1.0の部分を好きなように変更してください。

vi ~/iot-hub-device-update-yocto/yocto/meta-matsujirushi/recipes-matsujirushi/matsujirushiapp/files/main.c
main.c
#include <stdio.h>

int main(int argc, char *argv[])
{
	printf("matsujirushiapp v0.1.0\n");
	return 0;
}

ビルド

ビルド!ビルド!ビルド!
引数のバージョン番号は適時変更してください。

cd ~/iot-hub-device-update-yocto
./scripts/build.sh -c -v 0.1.0

ビルド結果

以下の2ファイルです。

  • ~/iot-hub-device-update-yocto/build/build/tmp/deploy/images/raspberrypi3/adu-base-image-raspberrypi3.wic.gz

    OSイメージ。Raspberry Pi ImagerでmicroSDに書き込むのに使えるファイル。

  • ~/iot-hub-device-update-yocto/build/build/tmp/deploy/images/raspberrypi3/adu-update-image-raspberrypi3.swu

    アップデート用OSイメージ。ADUで配布するのに使えるファイル。

Appendix

ADUアップデートファイルについて

ADUでOSイメージの更新には、以下の3ファイルが必要です。

  • adu-update-image-raspberrypi3.swu

    アップデート用OSイメージ。rootfsが入っています。本記事の手順で作成。

  • example-a-b-update.sh

    SWUpdateでA/Bアップデートするスクリプト。使い回し。書き換えは不要。

  • matsujirushi.update-satellite-v1.importmanifest.json

    ADUのアップデートマニフェスト。adu-update-image-raspberrypi3.swuが変わる都度、ファイルサイズsizeInBytesとハッシュ値sha256を書き直す必要あり。sha256は下記スクリプトで計算できます。

    sha256sum adu-update-image-raspberrypi3.swu | cut -d ' ' -f 1 | xxd -r -p | base64
    

Discussion