はじめに
Yocto Projectとは?
Yocto Projectは、組み込みLinux向けのカスタムOSを作るための仕組みです。
UbuntuやDebianのような完成済みディストリビューションをそのまま使うのではなく、必要なパッケージ、カーネル、ブートローダー、ライブラリ、アプリケーションを組み合わせて、自分の用途に合ったLinuxイメージを生成します。
たとえば、以下のような用途で使われます。
- Raspberry Piや産業用ボード向けのLinuxイメージ作成
- 不要なパッケージを削った軽量Linuxの作成
- 製品ごとに固定された再現性のあるビルド環境
- カーネル、ドライバ、アプリをまとめた量産向けイメージ作成
Yoctoでよく出てくる言葉は、最初は次の4つだけ覚えれば十分です。
用語 | 意味 |
|---|---|
Poky | Yoctoのリファレンス環境 |
BitBake | レシピを読んでビルドするツール |
Recipe | パッケージのビルド手順を書いたファイル |
Layer | レシピや設定をまとめたもの |
必要なPCスペック
Yoctoはビルドが重いです。小さなサンプルでも、普通のアプリ開発より多くのディスク容量とメモリを使います。
公式Quick Buildでは、ビルドホストに 最低140GBの空き容量、最低32GBのRAM が必要とされています。また、複数ビルドや高速化を考えるなら、さらに多いディスク容量とCPUコア数が推奨されています。
この記事では以下の環境を想定します。
- OS: Ubuntu 24.04 LTS
- RAM: 32GB以上推奨
- ストレージ: 200GB以上推奨
- CPU: できれば8コア以上
WSL2でも試せますが、初回はネイティブLinuxかLinux仮想マシンの方がトラブルが少ないです。公式ドキュメントでも、Windows環境ではWSL2を使ったビルドホスト構築が案内されています。
手順
https://docs.yoctoproject.org/brief-yoctoprojectqs/index.htmlをもとに作成しています。
Ubuntuに必要なパッケージを入れる
まず、Yoctoのビルドに必要なパッケージをインストールします。
sudo apt-get install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 libcrypt-dev locales python3 python3-git python3-jinja2 python3-pexpect python3-pip python3-subunit socat texinfo unzip wget xz-utils zstdこのパッケージ一覧は、Yocto Project公式のQuick BuildでUbuntu/Debian向けに案内されているものです。
localeも確認しておきます。
locale -a | grep en_US.utf8何も表示されない場合は、次を実行します。
sudo dpkg-reconfigure localesBitBakeリポジトリをクローンする
git clone https://git.openembedded.org/bitbakeビルド環境をセットアップ
./bitbake/bin/bitbake-setup init --non-interactive poky-wrynose poky distro/poky machine/qemux86-64 --setup-dir-name my-yoctoビルド環境を初期化する
次に、ビルド用の環境変数を読み込みます。
source ./bitbake-builds/my-yocto/build/init-build-env実行すると、自動的に build ディレクトリへ移動します。
この中に設定ファイルやビルド成果物が作られます。
イメージをビルドする
まずはGUIありのイメージである core-image-sato をビルドします。
bitbake core-image-sato初回ビルドはかなり時間がかかります。PC性能や回線速度によっては長時間かかることもあります。
Ubuntu 24.04でBitBakeが失敗する場合
Ubuntu 24.04で bitbake core-image-sato を実行したところ、以下のエラーが出ました。
ERROR: User namespaces are not usable by BitBake, possibly due to AppArmor.
See https://discourse.ubuntu.com/t/ubuntu-24-04-lts-noble-numbat-release-notes/39890#unprivileged-user-namespace-restrictions for more information.
Summary: There was 1 ERROR message, returning a non-zero exit code.これはYoctoやBitBakeのバグというより、Ubuntu 24.04系のAppArmor設定による影響です。
Ubuntu 24.04では、AppArmorと組み合わせて、非特権ユーザーによる user namespace の利用が制限されています。BitBakeはビルド時の分離やサンドボックス処理で user namespace を使用するため、この制限に引っかかるとビルド開始前にエラーになります。
一時的な回避方法
まずは、再起動すると元に戻る一時的な方法で確認します。
echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns設定値を確認します。
cat /proc/sys/kernel/apparmor_restrict_unprivileged_userns以下のように 0 が表示されればOKです。
0その後、もう一度ビルドします。
bitbake core-image-satoこれでビルドが進み始めれば、原因はUbuntu 24.04 / Kubuntu 24.04のAppArmorによる user namespace 制限だったと判断できます。
永続的に設定する方法
毎回コマンドを実行するのが面倒な場合は、sysctlの設定ファイルを作成して永続化できます。
echo "kernel.apparmor_restrict_unprivileged_userns=0" | sudo tee /etc/sysctl.d/60-apparmor-namespace.conf設定を反映するには、再起動します。
sudo reboot再起動後、以下のコマンドで確認します。
cat /proc/sys/kernel/apparmor_restrict_unprivileged_userns0 と表示されれば設定は反映されています。
0セキュリティ上の注意点
この設定は、Ubuntu 24.04で追加・強化された user namespace の制限を緩めるものです。
user namespace は、コンテナやサンドボックス処理などで使われる仕組みですが、過去にはローカル権限昇格やコンテナ脱出系の攻撃に関係することもありました。そのため、Ubuntu 24.04ではAppArmorによって非特権ユーザーの user namespace 利用が制限されています。
個人の開発PCでYoctoをビルドする用途であれば、一時的に設定を変更して作業するのは現実的な回避策です。ただし、共有サーバー、本番環境、不特定多数のユーザーがログインする環境では注意が必要です。
まずは一時的な方法でビルドできることを確認し、問題なければ開発用PCに限って永続化する、という流れがおすすめです。
QEMUで起動する
ビルドが終わったら、QEMUで起動します。
runqemu snapshotよく使うイメージの違い
Yoctoには複数のサンプルイメージがあります。
イメージ名 | 内容 |
|---|---|
core-image-minimal | 最小構成 |
core-image-base | 基本的なLinux環境 |
core-image-sato | GUI付きサンプル環境 |
core-image-full-cmdline | コマンドライン向けに比較的機能が多い |
MACHINEを確認する
Yoctoでは、どのターゲット向けにビルドするかを MACHINE で指定します。
設定ファイルは以下です。
conf/local.conf初期状態では、たとえば次のようになっています。
MACHINE ??= "qemux86-64"これは、QEMUのx86_64環境向けにビルドする設定です。
Raspberry Piや特定の評価ボード向けにビルドする場合は、BSPレイヤを追加して MACHINE を変更します。
レイヤとは?
Yoctoで重要なのが「レイヤ」です。
レイヤは、レシピや設定をまとめたディレクトリです。公式ドキュメントでは、レイヤは関連する命令や設定を含むリポジトリであり、機能ごとにメタデータを分離することで再利用しやすくなると説明されています。
代表的なレイヤには次のようなものがあります。
レイヤ | 内容 |
|---|---|
meta | 基本レシピ |
meta-poky | Poky用設定 |
meta-yocto-bsp | 参照BSP |
meta-openembedded | 追加パッケージ群 |
meta-raspberrypi | Raspberry Pi向けBSP |
レイヤ名は慣習的に meta- から始まります。
自分のレイヤを作る
アプリや独自設定を追加する場合は、自分用のレイヤを作ります。
cd ~/yocto/poky/build
bitbake-layers create-layer ../meta-yamadori
bitbake-layers add-layer ../meta-yamadoriレイヤが追加されたか確認します。
bitbake-layers show-layers公式Quick Buildでも、bitbake-layers create-layer を使った独自レイヤ作成が紹介されています。
最初につまずきやすいポイント
ディスク容量不足
Yoctoの初回ビルドでは、ソース、ビルド中間生成物、キャッシュ、成果物が大量に作られます。
df -h空き容量が少ない場合は、最低でも200GB程度は確保してから始めるのがおすすめです。
メモリ不足
RAMが少ないと、ビルド中に落ちたり、極端に遅くなったりします。公式要件では最低32GBのRAMが示されています。
古いUbuntuを使っている
古いUbuntuでは、Python、gcc、カーネルヘッダなどのバージョンが足りずに失敗することがあります。たとえばScarthgap 5.0.16のリリースノートでは、Ubuntu 20.04がEOLであり、ホスト環境としての対応が切られたことが案内されています。
2026年に新しく始めるなら、Ubuntu 24.04 LTSなどの新しい環境を使うのが無難です。
よく使うコマンドまとめ
# ビルド環境に入る
source oe-init-build-env
# イメージをビルド
bitbake core-image-minimal
# QEMUで起動
runqemu qemux86-64
# レイヤ一覧
bitbake-layers show-layers
# レイヤ追加
bitbake-layers add-layer ../meta-example
# 設定ファイルを編集
nano conf/local.confおわりに
2026年にYocto Projectを始めるなら、まずは Wrynose 6.0 LTS を使って、QEMU向けの core-image-sato をビルドするところから始めるのがおすすめです。
Yoctoは最初のビルドこそ重いですが、一度流れを理解すると、独自Linuxイメージ、BSP、アプリ追加、製品向けカスタムOSの作成まで進められます。
最初に覚えるべき流れは次の通りです。
まずはQEMUで起動するところまでできれば、Yoctoの第一歩は完了です。
_ZI7BtJ.png)