ADU: RasPi3BのオレオレOSイメージ作成手順
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
#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