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のバージョンや配布物によってパッケージ名が変わる場合があります。
参考イメージ(スクリーンショット)
(インストールには約1GB程度の追加ダウンロードが必要になることが多いです)
Poky(mortyブランチ)の取得
この記事ではPokyの「morty」安定リリースを使用しています。以下のコマンドでcloneします(ソースは公式gitサーバ)。
git clone -b morty git://git.yoctoproject.org/poky.git
クローン後、pokyディレクトリに移動し、ビルド環境設定スクリプトを読み込みます。
source oe-init-build-env
このスクリプトを実行すると、ターミナルのカレントディレクトリが自動的にbuildディレクトリに変更され、以後の設定ファイル(conf/local.confなど)とビルド出力はこの中を参照します。
local.confはYoctoビルドの中核となる設定ファイルです。ターゲットマシン、パッケージ形式、キャッシュ先などを指定します。
local.confの主要設定と意味
以下は本手順で特に重要な設定項目です。local.conf内でアンコメント(必要なら追記)して編集します。
ターゲットマシン(例: qemux86-64)
ビルドするターゲットを指定します。記事の例ではqemu用のx86_64を指定しました。GUIや実機向けなら別のマシン名を指定します。
ダウンロード保存先(DL_DIR)
DL_DIR ?= "${TOPDIR}/downloads"
ここにはソースアーカイブが保存されます。
- sstateキャッシュ(SSTATE_DIR)
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
再ビルドの高速化に必須の共有ステートキャッシュです。ネットワーク共有にして複数マシンで共有する運用も可能です。
- 一時作業ディレクトリ(TMPDIR)
TMPDIR ?= "${TOPDIR}/tmp"
- パッケージ形式(PACKAGE_CLASSES)
PACKAGE_CLASSES ?= "package_rpm"
Debian系環境でもRPMパッケージを生成するなど選択肢があります。目的に応じてrpm/deb/ipkなどを選んでください。
- SDKビルド用マシン(SDKMACHINE)
SDKMACHINE ?= "i686"
クロスSDK生成時のホストアーキテクチャ指定です。ホストに合わせて調整します。
- ルートユーザーの空パスワード設定(ログイン用)
EXTRA_IMAGE_FEATURES ?= "debug-tweaks"
debug-tweaksを有効にすると、rootのパスワードが空になり、初期ログインが可能になります(テスト用)。本番では必ず適切な認証設定を行ってください。
Note: Hob(GUIツール)はサポートされなくなっており、この記事ではコマンドラインで作業を行います。
ビルド(bitbake)手順
ビルドはbitbakeコマンドで実行します。ここでは最小イメージを作成する例を示します。
bitbake core-image-minimal
重要: bitbakeは通常ユーザー(rootではない)で実行してください。rootで実行すると権限や環境周りでエラーになります。
もしエラーで環境変数が消えている場合は再度ビルド環境スクリプトを読み込んでください。
source oe-init-build-env
ビルドの最初のステップはレシピの解析です。解析が完了すると、ターゲットやホストの情報が表示されます。
その後、SDKや必要なライブラリのダウンロード、パッケージのコンパイルが行われます。初回はソース取得とコンパイルがあるため長時間(数時間〜環境によりそれ以上)かかることが多いです。
ビルド完了時はタスクリストの完了表示が出ます。
生成されたイメージは通常次のディレクトリに出力されます(今回のターゲット名はqemux86-64)。
build/tmp/deploy/images/qemux86-64
qemuでの実行と注意点
WindowsのPuttyなど一部のターミナルではコマンド実行時に文字列や端末動作の違いでエラーになる場合があります。UbuntuのローカルターミナルやRDP経由の端末で試してください。
qemuを起動すると別ウィンドウでエミュレータが起動します。
デフォルトのログインはrootでパスワードは空(debug-tweaksを有効にした場合)です。ログイン後に基本的なコマンドで動作確認します(date、ifconfig、unameなど)。
トラブルシューティングとよく起きる問題
- ビルドが途中で止まる/依存が解決できない:
- ネットワーク接続、DL_DIRの内容、プロキシ設定を確認。企業ネットワークではプロキシやミラー設定が必要になることが多いです。
- bitbakeをrootで実行してしまった:
- ビルドディレクトリやキャッシュのファイル所有権がrootになり、以後のビルドで権限エラーが出ます。可能ならキャッシュをクリアしてユーザー権限で再実行するか、ファイル所有権を修正します。
- Puttyなどで端末が壊れる表示になる:
- 端末エミュレーションの違いが原因です。ローカルのGNOME Terminalやxterm、あるいはRDP経由の端末で試してください。
- ビルドが非常に遅い/メモリが足りない:
- スワップを一時的に増やす、並列ジョブ数(BB_NUMBER_THREADSやPARALLEL_MAKE)を下げる、より大きなマシンでビルドするのが現実的です。
再ビルド時の効率化ミニ手順(SOP)
- SSTATE_DIRとDL_DIRを保存しておく(外付けやネットワーク共有も可)。
- 変更が少ない場合はbitbake
-c rebuildやbitbake -C compile を活用する。 - 並列ジョブはlocal.confでBB_NUMBER_THREADSとPARALLEL_MAKEを設定する。
- クロス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共有で効率化可能。
重要: 本番用イメージ作成時はセキュリティ設定(パスワード、ユーザ管理、不要サービスの削除)を必ず行ってください。