テクノロジーガイド

YoctoプロジェクトでUbuntu上に最小のLinuxディストリを作る手順

2 min read 組み込みLinux 更新されました 20 Oct 2025
YoctoでUbuntu上に最小Linuxを作る手順
YoctoでUbuntu上に最小Linuxを作る手順

目的と対象読者

このガイドは、組み込みLinux向けに最小限のディストリビューションをYoctoプロジェクトで作成し、qemuで実行する一連の手順を説明します。対象は次のような方です:

  • Yoctoで組み込みイメージを初めてビルドする開発者
  • Ubuntu上でYocto環境をセットアップしたいエンジニア
  • qemuで動作確認まで行いたい評価者

用語(1行定義):

  • Yocto: 組み込み用Linuxディストリ作成のためのビルドツール群。Pokyはそのリファレンスディストロ。
  • bitbake: Yoctoでレシピを処理しイメージをビルドするコマンドラインツール。
  • qemu: 汎用ソフトウェアエミュレータ(ここではx86_64向けの仮想環境として利用)。

前提(開発マシン)

  • メモリ: 少なくとも4〜6GBを推奨。
  • OS: Ubuntu(この記事ではUbuntu 16.04を想定)。
  • ディスク空き: 60〜80GB以上を推奨(ビルド・キャッシュを含むため)。
  • 以下で示す依存パッケージをインストール済みであること。
  • Yocto(Poky)の安定ブランチを取得すること。

実行例(パッケージリストと更新):

apt-get update
apt-get install wget git-core unzip make gcc g++ build-essential subversion sed autoconf automake texi2html texinfo coreutils diffstat python-pysqlite2 docbook-utils libsdl1.2-dev libxml-parser-perl libgl1-mesa-dev libglu1-mesa-dev xsltproc desktop-file-utils chrpath groff libtool xterm gawk fop

重要: 上記パッケージ群はYoctoビルドに必要なツールやライブラリです。Ubuntuのバージョンや配布物によってパッケージ名が変わる場合があります。

参考イメージ(スクリーンショット)

Yocto用の前提パッケージをインストールする画面

(インストールには約1GB程度の追加ダウンロードが必要になることが多いです)

開発用パッケージのインストール例


Poky(mortyブランチ)の取得

この記事ではPokyの「morty」安定リリースを使用しています。以下のコマンドでcloneします(ソースは公式gitサーバ)。

 git clone -b morty git://git.yoctoproject.org/poky.git

pokyをインストールする様子

クローン後、pokyディレクトリに移動し、ビルド環境設定スクリプトを読み込みます。

source oe-init-build-env

このスクリプトを実行すると、ターミナルのカレントディレクトリが自動的にbuildディレクトリに変更され、以後の設定ファイル(conf/local.confなど)とビルド出力はこの中を参照します。

OEビルド環境を準備する様子

local.confはYoctoビルドの中核となる設定ファイルです。ターゲットマシン、パッケージ形式、キャッシュ先などを指定します。


local.confの主要設定と意味

以下は本手順で特に重要な設定項目です。local.conf内でアンコメント(必要なら追記)して編集します。

  • ターゲットマシン(例: qemux86-64)

    ビルドするターゲットを指定します。記事の例ではqemu用のx86_64を指定しました。GUIや実機向けなら別のマシン名を指定します。

    ターゲットマシンをqemux86-64に設定するスクリーンショット

  • ダウンロード保存先(DL_DIR)

DL_DIR ?= "${TOPDIR}/downloads"

ここにはソースアーカイブが保存されます。

DL_DIRの設定例

  • sstateキャッシュ(SSTATE_DIR)
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"

再ビルドの高速化に必須の共有ステートキャッシュです。ネットワーク共有にして複数マシンで共有する運用も可能です。

SSTATE_DIRの設定例

  • 一時作業ディレクトリ(TMPDIR)
TMPDIR ?= "${TOPDIR}/tmp"
  • パッケージ形式(PACKAGE_CLASSES)
PACKAGE_CLASSES ?= "package_rpm"

Debian系環境でもRPMパッケージを生成するなど選択肢があります。目的に応じてrpm/deb/ipkなどを選んでください。

  • SDKビルド用マシン(SDKMACHINE)
SDKMACHINE ?= "i686"

クロスSDK生成時のホストアーキテクチャ指定です。ホストに合わせて調整します。

PACKAGE_CLASSESとSDKMACHINEの例

  • ルートユーザーの空パスワード設定(ログイン用)
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"

debug-tweaksを有効にすると、rootのパスワードが空になり、初期ログインが可能になります(テスト用)。本番では必ず適切な認証設定を行ってください。

debug-tweaksを有効にする画面

Note: Hob(GUIツール)はサポートされなくなっており、この記事ではコマンドラインで作業を行います。


ビルド(bitbake)手順

ビルドはbitbakeコマンドで実行します。ここでは最小イメージを作成する例を示します。

bitbake core-image-minimal

bitbakeを実行してビルドを開始する様子

重要: bitbakeは通常ユーザー(rootではない)で実行してください。rootで実行すると権限や環境周りでエラーになります。

rootで実行するとエラーになる例

もしエラーで環境変数が消えている場合は再度ビルド環境スクリプトを読み込んでください。

source oe-init-build-env

再度環境設定とビルド開始

ビルドの最初のステップはレシピの解析です。解析が完了すると、ターゲットやホストの情報が表示されます。

ビルドプロセスの進行

その後、SDKや必要なライブラリのダウンロード、パッケージのコンパイルが行われます。初回はソース取得とコンパイルがあるため長時間(数時間〜環境によりそれ以上)かかることが多いです。

コンパイルには数時間かかることがあることを示すスクリーンショット

ビルド完了時はタスクリストの完了表示が出ます。

生成されたイメージは通常次のディレクトリに出力されます(今回のターゲット名はqemux86-64)。

build/tmp/deploy/images/qemux86-64

ビルド完了と出力ファイルの例


qemuでの実行と注意点

  • WindowsのPuttyなど一部のターミナルではコマンド実行時に文字列や端末動作の違いでエラーになる場合があります。UbuntuのローカルターミナルやRDP経由の端末で試してください。

    Puttyでのコマンドエラー例

    RDP経由ターミナルでは問題なく動く例

  • qemuを起動すると別ウィンドウでエミュレータが起動します。

    qemuエミュレータを起動した画面

  • デフォルトのログインはrootでパスワードは空(debug-tweaksを有効にした場合)です。ログイン後に基本的なコマンドで動作確認します(date、ifconfig、unameなど)。

    新しいディストロのログイン画面(rootで空パスワード)

    最小Linux上でdate, ifconfig, unameを実行している例


トラブルシューティングとよく起きる問題

  • ビルドが途中で止まる/依存が解決できない:
    • ネットワーク接続、DL_DIRの内容、プロキシ設定を確認。企業ネットワークではプロキシやミラー設定が必要になることが多いです。
  • bitbakeをrootで実行してしまった:
    • ビルドディレクトリやキャッシュのファイル所有権がrootになり、以後のビルドで権限エラーが出ます。可能ならキャッシュをクリアしてユーザー権限で再実行するか、ファイル所有権を修正します。
  • Puttyなどで端末が壊れる表示になる:
    • 端末エミュレーションの違いが原因です。ローカルのGNOME Terminalやxterm、あるいはRDP経由の端末で試してください。
  • ビルドが非常に遅い/メモリが足りない:
    • スワップを一時的に増やす、並列ジョブ数(BB_NUMBER_THREADSやPARALLEL_MAKE)を下げる、より大きなマシンでビルドするのが現実的です。

再ビルド時の効率化ミニ手順(SOP)

  1. SSTATE_DIRとDL_DIRを保存しておく(外付けやネットワーク共有も可)。
  2. 変更が少ない場合はbitbake -c rebuildやbitbake -C compile を活用する。
  3. 並列ジョブはlocal.confでBB_NUMBER_THREADSとPARALLEL_MAKEを設定する。
  4. クロスSDKが必要ならbitbake -c populate_sdk でSDKを作成する。

役割別チェックリスト

  • 開発者:

    • local.confのターゲットとパッケージクラスを確認
    • レシピ(layer)を追加したらレイヤの依存を確認
    • bitbake実行は通常ユーザーで
  • インテグレーター/CI担当:

    • SSTATEを共有してビルド時間短縮
    • キャッシュとDLの場所をバックアップ
    • 自動化スクリプトで環境初期化を統一
  • テスター:

    • qemu上で基本コマンドの動作確認
    • ファイルシステム、ネットワーク、ログ周りを確認

いつYoctoが向かないか(カウンター例)

  • 単純なデスクトップ向けLinuxディストリを作りたい場合は、Yoctoは過剰な場合があります。Debian/Ubuntuベースでカスタムパッケージを作る方が早いことがあります。
  • 既存のフレームワークやOSベンダーのツールチェーンが整っているハードウェアでは、Yoctoの学習コストが大きく感じられることがあります。

意思決定フローチャート

以下は「Yoctoを使うべきか」の簡易フローです。

flowchart TD
  A[組み込み機器のカスタムLinuxが必要か?] -->|はい| B[ハードウェア依存のビルドが必要か?]
  A -->|いいえ| Z[標準ディストリを検討]
  B -->|はい| C[クロスコンパイルとレシピ管理が必要]
  B -->|いいえ| Z
  C -->|はい| D[Yoctoが適切]
  C -->|いいえ| Z

よくある質問

ビルドにどれくらい時間がかかりますか?

初回はソースのダウンロードとコンパイルを行うため環境によりますが「数時間〜十数時間」みてください。SSTATEを使えば再ビルドは速くなります。

bitbakeはrootで実行して良いですか?

いいえ。通常ユーザーで実行してください。rootでの実行はキャッシュやファイル所有権の問題を引き起こします。

debug-tweaksを有効にしても良いですか?

開発・テスト用途では便宜上有効にしますが、本番では必ず認証やセキュリティ設定を見直してください。


要約

  • Yocto(Poky)を使うと、組み込み向けの最小Linuxを柔軟に作れる。
  • local.confの主要設定(DL_DIR、SSTATE_DIR、TMPDIR、PACKAGE_CLASSES、SDKMACHINE、EXTRA_IMAGE_FEATURES)を正しく設定することが重要。
  • bitbakeは通常ユーザーで実行し、初回ビルドは時間がかかることを見越して作業する。SSTATE共有で効率化可能。

重要: 本番用イメージ作成時はセキュリティ設定(パスワード、ユーザ管理、不要サービスの削除)を必ず行ってください。

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Debian 11 に Podman をインストールして使う
コンテナ

Debian 11 に Podman をインストールして使う

Apt-pinning入門:Debianで複数リポジトリを管理
Linux

Apt-pinning入門:Debianで複数リポジトリを管理

OptiScalerでFSR 4を全対応ゲームに導入する方法
ゲーム

OptiScalerでFSR 4を全対応ゲームに導入する方法

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法
ネットワーク

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法

AndroidでSDカードのインストールエラーを修正する方法
トラブルシューティング

AndroidでSDカードのインストールエラーを修正する方法

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定
Linux ネットワーク

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定