32blogby Studio Mitsu

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

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

by omitsu15 min read

当記事にはアフィリエイト広告が含まれています

目次

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

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

この記事では、Kirkstone→Scarthgap移行で必要な変更を1つのチェックリストにまとめた。公式マイグレーションガイド4本分(4.1 Langdale4.2 Mickledore4.3 Nanbield5.0 Scarthgap)を、実際のエラー例付きで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ブランチを持っているか確認する。

bash
# 各レイヤーのリモートブランチを確認
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/ に置いている場合はそのまま動く。ただし、将来的には適切なディレクトリに移動することが推奨されている。.bbappendファイルで既存クラスをオーバーライドしている場合も、inheritパスを確認しておこう。

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に直接移行できる?

できる。LTS間の直接移行が推奨されるアプローチだ。Langdale・Mickledore・Nanbieldはすでにサポート終了しており、段階的に移行するメリットはない。このチェックリストで4バージョン分の破壊的変更をまとめて対応すればいい。

移行にはどのくらいの期間がかかる?

カスタムレイヤーとサードパーティ依存の数による。カスタムレイヤー2-3個、標準的なBSPの場合は数日〜1週間程度。カスタムレシピが多い場合や、プリビルドバイナリ・32ビットターゲット(time_t ABI変更)がある場合はもう少しかかる。

2026年4月以降もKirkstoneを使い続けたらどうなる?

Yocto Projectからのセキュリティパッチが止まる。CVE修正がバックポートされず、コミュニティのメタレイヤーもKirkstoneブランチのメンテナンスを終了する。セキュリティパッチは全て自分で対応することになる。

BSPレイヤーは別途更新が必要?

必要だ。BSPベンダー(NXP、TI、Raspberry Pi Foundationなど)がScarthgap対応ブランチを提供しているか確認しよう。OpenEmbedded Layer Indexやベンダーのリポジトリで確認できる。Scarthgapブランチがない場合は、ベンダーに問い合わせるか、フォークして自分でポーティングする。

既存のsstate-cacheは移行後も使える?

使えない。Kirkstoneのsstate-cacheはScarthgapと互換性がない。フルリビルドが必要になる。初回ビルドはクリーンビルドと同じ時間がかかるが、2回目以降は新しいsstate-cacheが利用される。

64ビットプラットフォームだけをターゲットにしている場合、time_tの変更は関係ある?

関係ない。64-bit time_tの変更は32ビットターゲット(ARM32、MIPS32など)にのみ影響する。64ビットプラットフォームでは time_t は元から64ビットなので、2038年問題の影響はない。

cve-checkは移行中に有効にすべき?移行後?

移行中がおすすめだ。Scarthgapでは create-spdx がデフォルト有効で、移行と同時に cve-check を追加すれば、クリーンな脆弱性ベースラインから始められる。移行後に追加すると、ビルドの脆弱性を遡って監査する手間が増える。

まとめ

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に移行してほしい。

関連記事: