32blogby StudioMitsu
yocto12 min read

Kirkstone→Scarthgap移行の完全チェックリスト

Yocto Kirkstone 4.0からScarthgap 5.0 LTSへの移行手順を、中間4バージョンの破壊的変更と実際のエラー例付きで解説。

yoctoembedded-linuxmigrationscarthgapkirkstone
目次

Kirkstone 4.0 LTSのサポート終了は 2026年4月27日。残り数週間だ。

次のLTSであるScarthgap 5.0は2028年4月までサポートが続く。移行は避けられない。しかし、KirkstoneとScarthgapの間には4つのバージョンが挟まっており、破壊的変更が積み重なっている。

この記事では、Kirkstone→Scarthgap移行で必要な変更を1つのチェックリストにまとめた。公式マイグレーションガイド4本分を、実際のエラー例付きで1記事に凝縮している。

なぜ今Scarthgapに移行すべきか

KirkstoneからScarthgapまで、4つのリリースが挟まっている。

リリースバージョンリリース日EOL
Kirkstone4.02022年4月2026年4月27日
Langdale4.12022年10月2023年5月
Mickledore4.22023年5月2023年11月
Nanbield4.32023年11月2024年6月
Scarthgap5.02024年4月2028年4月30日

Langdale・Mickledore・Nanbieldはすでにサポート終了済みだ。LTS間の直接移行(Kirkstone→Scarthgap)が現実的な選択肢になる。

移行すべき理由は3つある。

1. セキュリティパッチの停止

EOL後はCVEが公開されても修正パッチが提供されない。組み込み製品でパッチの出ないOSを使い続けるのは、セキュリティリスクそのものだ。

2. EU CRA対応

EU サイバーレジリエンス法は2027年12月に全要件が適用される。脆弱性管理が義務化されるが、EOLのビルドシステムではCVEスキャンやSBOM生成の継続的な更新ができない。

3. エコシステムの対応

BSPベンダーやコミュニティのメタレイヤーは、新しいLTSに対応を移す。Kirkstone対応のメンテナンスを続けるレイヤーは今後減少していく。

移行前の準備

コードを変更する前に、環境を整理する。

現在のレイヤー構成を記録する

bash
bitbake-layers show-layers

出力をファイルに保存しておく。移行後の差分確認に使う。

各レイヤーのScarthgap対応を確認する

OpenEmbedded Layer Indexで、使用しているレイヤーがScarthgapブランチを持っているか確認する。

# 各レイヤーのリモートブランチを確認
cd meta-custom-bsp
git branch -r | grep scarthgap

Scarthgapブランチがないレイヤーは、フォークして自分で対応するか、代替レイヤーを探す必要がある。

LAYERSERIES_COMPATを更新する

自作レイヤーの conf/layer.conf を更新する。

bash
# meta-mylayer/conf/layer.conf
LAYERSERIES_COMPAT_meta-mylayer = "scarthgap"

これを忘れると、BitBakeがレイヤーの読み込みを拒否する。

Gitブランチ戦略

Kirkstoneのビルドを壊さないよう、Scarthgap移行用のブランチを切って作業する。

bash
git checkout -b migration/scarthgap

破壊的変更チェックリスト

4バージョン分の破壊的変更を、影響の大きいものから順に整理した。自分のレシピに該当するものがないか、上から確認していこう。

classes ディレクトリ分割(4.1 Langdale)

Langdaleで、classes/ ディレクトリが3つに分割された。

ディレクトリ用途使い方
classes-recipe/レシピ内でのみ使うクラスinherit
classes-global/グローバルに適用するクラスINHERIT +=
classes/後方互換(両方で動く)どちらでも可

何が壊れるか: classes-recipe/ にあるクラスを INHERIT += で使おうとすると、パースエラーになる。

bash
# これはエラー(testimage は classes-recipe/ にある)
INHERIT += "testimage"

# 正しい書き方
IMAGE_CLASSES += "testimage"

自作クラスを classes/ に置いている場合はそのまま動く。ただし、将来的には適切なディレクトリに移動することが推奨されている。

SERIAL_CONSOLE の削除(4.2 Mickledore)

SERIAL_CONSOLE(単数形)は2.6(Thud、2018年)から非推奨だったが、Mickledoreで完全に削除された。

bash
# Kirkstone(動くが非推奨)
SERIAL_CONSOLE = "115200 ttyS0"

# Scarthgap(必須)
SERIAL_CONSOLES = "115200;ttyS0"

変更点は2つ:

  • 変数名が 複数形 になった(SERIAL_CONSOLES
  • 区切り文字が スペースからセミコロン に変わった

マシン設定ファイル(conf/machine/*.conf)を grep -r "SERIAL_CONSOLE " で検索し、該当箇所をすべて書き換える。

64-bit time_t のデフォルト化(4.3 Nanbield)

32ビットプラットフォーム(ARM32など)で、time_tデフォルトで64ビット になった。2038年問題への対応だ。

何が壊れるか:

  • 32ビットターゲットでABI互換性が壊れる
  • 古いバイナリとの混在ができなくなる
  • OLDEST_KERNEL"5.15" に変更。5.15より古いカーネルでは動作しない

32ビットターゲットを使っている場合、サードパーティのバイナリ(プリコンパイル済みライブラリなど)がtime_t 64ビットに対応しているか確認が必要だ。

CVE_CHECK_IGNORE の非推奨化(5.0 Scarthgap)

CVEの除外方法が変わった。

bash
# Kirkstone
CVE_CHECK_IGNORE += "CVE-2024-12345"

# Scarthgap(推奨)
CVE_STATUS[CVE-2024-12345] = "not-applicable-platform: Only affects Windows"

CVE_CHECK_IGNORE はScarthgapでもまだ動作するが、非推奨警告が出る。新しい CVE_STATUS は除外理由を記録できるので、SBOM/CVE管理の運用でも監査に耐える。

ipk の圧縮形式変更(5.0 Scarthgap)

ipkパッケージの圧縮が xz から zstd に変わった。

何が壊れるか: Scarthgapでビルドしたipkパッケージを、古いOpkg(zstd未対応)を搭載したターゲットにインストールできない。

OTA更新でScarthgapビルドのパッケージを旧デバイスに配信する場合は、ターゲット側のOpkgをzstd対応版に更新するか、ビルド側で圧縮形式を戻す必要がある。

その他の変数削除・名称変更

変数(旧)変更内容バージョン
PNBLACKLISTSKIP_RECIPE に名称変更4.0
SERIAL_CONSOLES_CHECK削除(自動チェック化)5.0
PYTHON_PN削除(Python 2廃止)5.0
USE_L10N削除5.0
bitbake-whatchangedスクリプト削除5.0

よくある移行エラーと対処法

実際の移行作業で遭遇しやすいエラーと、その対処法をまとめた。

レイヤー互換性エラー

ERROR: Layer 'meta-custom' is not compatible with the current set of layers

LAYERSERIES_COMPATscarthgap が含まれていない。conf/layer.conf を修正する。

bash
# meta-custom/conf/layer.conf
LAYERSERIES_COMPAT_meta-custom = "scarthgap"

エラーの詳細はビルドエラーデバッグガイドも参照してほしい。

クラスが見つからない

ERROR: ParseError: Could not inherit file classes/testimage.bbclass

4.1のclassesディレクトリ分割により、INHERIT += でレシピ専用クラスを使おうとするとこのエラーが出る。IMAGE_CLASSESinherit に書き換える。

SERIAL_CONSOLE 構文エラー

ERROR: Variable SERIAL_CONSOLE is no longer supported

旧変数名を使っている。SERIAL_CONSOLES(複数形)に書き換え、区切り文字をセミコロンに変更する。

time_t 関連のビルド失敗

32ビットターゲットで、サードパーティライブラリとのリンク時にサイズ不一致エラーが出ることがある。

error: size of 'timestamp' changed to 8 bytes (was 4)

対処法:

  1. ライブラリをScarthgap環境でリビルドする
  2. やむを得ない場合、レシピレベルで TIME_T_BITS = "32" を設定する(非推奨)

ipk インストール失敗

opkg install: Unknown compression type 'zstd'

Scarthgapでビルドしたipkを旧デバイスに配信した場合に発生する。ターゲット側のOpkgをzstd対応版に更新するのが正攻法だ。

Scarthgapの活用ポイント

移行のついでに、Scarthgapで使える機能も活用しよう。

SBOM生成がデフォルト有効

Scarthgapでは create-spdx クラスがPokyのデフォルト設定に含まれている。ビルドするだけでSPDX形式のSBOMが自動生成される。

EU CRA対応に必要なSBOM生成が、追加設定なしで手に入る。詳しい運用方法はSBOM/CVE管理ガイドを参照。

プレッシャーベースのビルド制御

bash
# conf/local.conf
BB_PRESSURE_MAX_CPU = "150"
BB_PRESSURE_MAX_IO = "80"
BB_PRESSURE_MAX_MEMORY = "50"

Linuxの /proc/pressure/ を利用して、CPU・I/O・メモリの負荷に応じてBitBakeが動的にタスク数を調整する。固定値より柔軟にハードウェアを活用できる。設定の詳細はビルド高速化ガイドにまとめている。

CVE_STATUS_GROUPS

CVEの除外を理由ごとにグループ化できるようになった。

bash
# conf/local.conf
CVE_STATUS_GROUPS = "CVE_STATUS_WIN"
CVE_STATUS_WIN = "CVE-2024-11111 CVE-2024-22222"
CVE_STATUS_WIN[status] = "not-applicable-platform: Windows-only"

大量のCVE除外を管理する場合に、個別設定よりはるかに見通しがよくなる。

まとめ

Kirkstone→Scarthgapの移行は、4バージョン分の変更が一度に押し寄せる。しかし、影響の大きい変更は限られている。

変更影響範囲対応の手間
LAYERSERIES_COMPAT更新全自作レイヤー低(1行追加)
classesディレクトリ分割INHERIT使用箇所低〜中(grep + 修正)
SERIAL_CONSOLE → SERIAL_CONSOLESマシン設定低(変数名 + 区切り文字)
64-bit time_t32ビットターゲット中〜高(ABI互換性確認)
CVE_CHECK_IGNORE → CVE_STATUSCVE管理設定低(書き換え + 理由追加)
ipk zstd圧縮OTA配信低(必要時のみ対応)

移行の手順をまとめると:

  1. 各レイヤーのScarthgap対応を確認
  2. LAYERSERIES_COMPAT を更新
  3. 上のチェックリストを grep -r で照合
  4. ビルド → エラー対処 → 繰り返し
  5. cve-checkを有効化して脆弱性管理を開始

Kirkstoneのサポート終了まで残りわずかだ。このチェックリストで、最短ルートでScarthgapに移行してほしい。

PRMastering Embedded Linux Development 4th Ed (2024)Amazonで見る
PREmbedded Linux Development Using Yocto Project 3rd Ed (2023)Amazonで見る
PRYocto Project Customization for Linux (Apress, 2025)Amazonで見る