Raspberry Piしたい(balenalib

DockerコンテナーでRaspberry Pi環境をエミュレートして、自作パッケージが実際のハードウェアで動作するかを事前確認できます。

BalenaがDockerHubに公開しているRaspberry Pi OSのイメージを使用します。RPi3/RPi4、Debianバージョン(bullseye/bookworm)などを組み合わせて選択できます。

利用可能なイメージ:

単一バージョンで確認したい

Dockerfile を作成

自作パッケージのインストール手順をDockerfileに記述します。 RPi4/bookwormの組み合わせが動作確認済みです。

 1FROM balenalib/raspberrypi4-64-python:bookworm-build-20240429
 2
 3# システムパッケージの更新
 4RUN apt update && \
 5    apt upgrade -y && \
 6    apt autoremove -y && \
 7    apt install -y pipx
 8
 9# 自作パッケージのインストール例
10RUN pipx install haniwers
11
12# または、ローカルのパッケージをコピーしてインストール
13# COPY . /app
14# WORKDIR /app
15# RUN pip install -e .
16
17ENTRYPOINT ["/bin/bash"]

compose.yaml を作成

# compose.yaml
services:
  raspi:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: raspi-dev
    stdin_open: true
    tty: true

起動と実行

# イメージをビルドしてコンテナーを起動
$ docker compose up -d

# コンテナーに接続
$ docker compose exec raspi bash

# ログを確認
$ docker compose logs -f

# 停止
$ docker compose down

複数バージョンで確認したい

異なるRaspberry PiのバージョンやDebianバージョンで同時にテストする場合は、 複数のDockerfileを作成して管理します。

Dockerfileの作成

各バージョン用のDockerfileを作成します。

1# Dockerfile.rpi4-bookworm
2FROM balenalib/raspberrypi4-64-python:bookworm-build-20240429
3RUN apt update && apt upgrade -y && apt autoremove -y && apt install -y pipx
4RUN pipx install haniwers
1# Dockerfile.rpi4-bullseye
2FROM balenalib/raspberrypi4-64-python:bullseye-build-20240429
3RUN apt update && apt upgrade -y && apt autoremove -y && apt install -y pipx
1# Dockerfile.rpi3-bookworm
2FROM balenalib/raspberrypi3-64-python:bookworm-build-20240429
3RUN apt update && apt upgrade -y && apt autoremove -y

compose.yaml を作成

# compose.yaml
services:
  rpi4-bookworm:
    build:
      context: .
      dockerfile: Dockerfile.rpi4-bookworm
    container_name: raspi-test-rpi4-bookworm
    stdin_open: true
    tty: true

  rpi4-bullseye:
    build:
      context: .
      dockerfile: Dockerfile.rpi4-bullseye
    container_name: raspi-test-rpi4-bullseye
    stdin_open: true
    tty: true

  rpi3-bookworm:
    build:
      context: .
      dockerfile: Dockerfile.rpi3-bookworm
    container_name: raspi-test-rpi3-bookworm
    stdin_open: true
    tty: true

起動と実行

# すべてのバージョンをビルド・起動
$ docker compose up -d

# 特定のバージョンに接続
$ docker compose exec rpi4-bookworm bash

# 特定のサービスのログを確認
$ docker compose logs -f rpi4-bookworm

# すべて停止
$ docker compose down

動作確認済み環境

宇宙線測定ツール(haniwers)のインストール検証では、以下の結果が得られました:

OS

Python

pipx

結果

エラー

RPi3 / bullseye

3.9

0.12.3.1

❌ 失敗

Cargo is not installed

RPi3 / bookworm

-

1.1.0

❌ 失敗

pip seemed to fail to build pendulum

RPi4 / bullseye

3.11.2

ない

⚠️ パッケージなし

RPi4 / bookworm

3.11.2

1.1.0

✅ 成功

推奨環境:RPi4 / bookworm

Raspberry PiおよびDebianバージョンについて

Raspberry Piのバージョン

モデル

アーキテクチャ

ハードウェア

特徴

RPi3 (Model B+)

ARMv7 (32/64-bit)

1.4GHz Cortex-A53

古いモデル、制限あり

RPi4 (Model B)

ARMv8 (64-bit)

1.5GHz Cortex-A72

推奨、高い互換性

RPi5

ARMv8 (64-bit)

2.4GHz Cortex-A76

最新モデル、高性能

Debianバージョン

コードネーム

リリース

サポート終了

特徴

bullseye (11)

2021年8月

2026年6月

旧バージョン、パッケージ不足の場合あり

bookworm (12)

2023年6月

2028年6月

推奨、modern toolchain対応

trixie (13)

2024年11月

2029年6月以降

テスト用途

推奨構成:RPi4 + bookworm

RPi4とDebianの組み合わせがもっとも安定しており、Rustコンパイラやpipパッケージのビルドで問題が少ないため、本番環境での使用をオススメします。

トラブルシューティング

“Cargo is not installed” エラー

Rustのツールチェーンが必要な場合、RPi3/bullseyeでは動作しません。 RPi4/bookwormの使用をオススメします。

“pip seemed to fail to build pendulum” エラー

C言語コンパイラが不足している可能性があります。 Dockerfileに以下を追加してください:

1RUN apt install -y build-essential python3-dev

Raspberry Piエミュレーションの特徴

メリット

  • 実ハードウェアなしでテスト可能 実Raspberry Piを購入しなくても、Dockerコンテナーで環境をシミュレート可能。

  • 複数バージョン同時テスト RPi3、RPi4、異なるDebianバージョンを同時に検証できる。

  • 開発~本番まで同じイメージで対応 開発環境で検証したイメージをそのまま本番ハードウェアにデプロイできる。

  • CI/CDパイプラインに統合可能 自動テスト環境として、Raspberry Pi対応のバイナリを事前検証できる。

デメリット

  • 完全な再現ではない GPIO、SPI、I2Cなどのハードウェアインターフェイスはエミュレートできない。

  • パフォーマンステストは参考値 実ハードウェアとCPU性能が異なるため、ベンチマークとして正確ではない。

  • 一部パッケージが動作しない Rustコンパイラなど、アーキテクチャ依存のツールで問題が発生することがある。

最適な用途

  • Raspberry Pi用自作パッケージの動作確認。

  • 複数バージョン対応の事前テスト。

  • CI/CDパイプラインでの自動テスト。

  • Raspberry Piアプリケーション開発の初期段階。

  • 実ハードウェアがない環境での開発。

リファレンス