🙆

Raspberry Pi 4とBuildrootでRAUCを使ってアップデート環境を作ってみる

2024/03/16に公開

BuildrootでカスタムOSイメージを作ったとき、OTAなどでアップデートしたくなるのが世の常だと思います。そこで、オープンソースのアップデートシステムであるRAUCを組み込んでアップデート環境を作ってみます。

RAUCとは

プロジェクトのホームページはこちら(https://rauc.io/) です。これをBuildrootに組み込むためにbr2rauc(https://github.com/cdsteinkuehler/br2rauc) を使用します。本家は古いビルドにしか対応していなかったりSystemdを使うとgettyが正しく設定されないので修正したものを作りました。(https://github.com/kobayutapon/br2rauc )。
今回はこちらの修正したもので試します。

使い方

buildrootの取得

最新の2024.02を取得し、作業ディレクトリで展開します。

mkdir ./work
cd work
wget https://buildroot.org/downloads/buildroot-2024.02.tar.gz
tar xvzf buildroot-2024.02.tar.gz

br2raucの取得

githubからbr2raucを取得します。

git clone https://github.com/kobayutapon/br2rauc.git

証明書の作成

RAUCで使う証明書を以下のコマンドで作成します。

( cd br2rauc/ ; ./openssl-ca.sh )

Buildrootの環境をセットアップ

以下のコマンドを実行し、buildrootの環境をセットアップします。

make -C buildroot/ BR2_EXTERNAL=../br2rauc O=../output raspberrypi4-64-rauc_defconfig

設定とビルド

ビルドディレクトリを変更します。

cd ./output

設定が必要な場合、以下のコマンドで設定します。

make menuconfig
makw linux-menuconfig

必要な設定が終わったらビルドを実行します。

make

ソースのダウンロードなどを行うので初回は少し時間がかかります。

SDイメージの書き込みと起動確認

正常にビルドが完了すると、output/imagesディレクトリ以下にsdcard.img.xzというファイルが作成されます。これをRaspberry Pi Imagerなどを使ってSDカードに書き込みます。

書き込んだSDカードをRaspberry Pi 4に挿し、起動します。最初にu-bootが起動し、その後システムが起動します。ログインし、rauc statusコマンドを実行するとイメージの使用状況が表示されます。
これが正常に表示されていれば組み込みができています。

ちょっとした注意点

パーティションの構造

デフォルトで作成されるパーティションは以下のような構造になっています。

パーティション サイズ フォーマット 用途
P1 256M FAT32 Bootパーティション(u-boot用の起動イメージ、コンフィグなど)
P2 256M ext4 レスキュー用イメージ格納パーティション
P3 128M ext4 データ用(RAUCの設定などもここに保存される)
P4 - - 拡張パーティション
P5 900M ext4 rootfs(A面)
P6 900M ext4 rootfs(B面)
P7 900M ext4 Updater用

パーティションのサイズ

パッケージを追加していくと容量が足りなくなることがあります。その場合、make menuconfigでrootfsの最大サイズを変更するのに合わせて、br2rauc/board/raspberrypi
/genimage.cfgで定義されるパーティションサイズを調整する必要があります。

Updater用バンドルの作成

RAUCではアップデート用ファイルのことをBundleと称しています。これはイメージやアーカイブ、インストールに必要な各種情報やスクリプトをまとめたもので、SquashFSでパックされます。
br2raucでは、ビルドすると同時にバンドルが作成されます。バンドルはoutput/images以下に2種類作成されます。

  • update.raucb bootfs+rootfs
  • rootfs.raucb rootfs only

必要に応じて使い分けます。
インストールは以下で行えますが、device mapperが有効でないとエラーが出ますので注意が必要です。

sudo rauc install [Bundleファイル名]

USBメモリなどを使ってアップデートする方法までこれで行えました。
次はHawkbitを組み合わせたOTAを調べたいと思います。

Discussion