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 |
|---|---|---|---|
| Kirkstone | 4.0 | 2022年4月 | 2026年4月27日 |
| Langdale | 4.1 | 2022年10月 | 2023年5月 |
| Mickledore | 4.2 | 2023年5月 | 2023年11月 |
| Nanbield | 4.3 | 2023年11月 | 2024年6月 |
| Scarthgap | 5.0 | 2024年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対応のメンテナンスを続けるレイヤーは今後減少していく。
移行前の準備
コードを変更する前に、環境を整理する。
現在のレイヤー構成を記録する
bitbake-layers show-layers
出力をファイルに保存しておく。移行後の差分確認に使う。
各レイヤーのScarthgap対応を確認する
OpenEmbedded Layer Indexで、使用しているレイヤーがScarthgapブランチを持っているか確認する。
# 各レイヤーのリモートブランチを確認
cd meta-custom-bsp
git branch -r | grep scarthgap
Scarthgapブランチがないレイヤーは、フォークして自分で対応するか、代替レイヤーを探す必要がある。
LAYERSERIES_COMPATを更新する
自作レイヤーの conf/layer.conf を更新する。
# meta-mylayer/conf/layer.conf
LAYERSERIES_COMPAT_meta-mylayer = "scarthgap"
これを忘れると、BitBakeがレイヤーの読み込みを拒否する。
Gitブランチ戦略
Kirkstoneのビルドを壊さないよう、Scarthgap移行用のブランチを切って作業する。
git checkout -b migration/scarthgap
破壊的変更チェックリスト
4バージョン分の破壊的変更を、影響の大きいものから順に整理した。自分のレシピに該当するものがないか、上から確認していこう。
classes ディレクトリ分割(4.1 Langdale)
Langdaleで、classes/ ディレクトリが3つに分割された。
| ディレクトリ | 用途 | 使い方 |
|---|---|---|
classes-recipe/ | レシピ内でのみ使うクラス | inherit |
classes-global/ | グローバルに適用するクラス | INHERIT += |
classes/ | 後方互換(両方で動く) | どちらでも可 |
何が壊れるか: classes-recipe/ にあるクラスを INHERIT += で使おうとすると、パースエラーになる。
# これはエラー(testimage は classes-recipe/ にある)
INHERIT += "testimage"
# 正しい書き方
IMAGE_CLASSES += "testimage"
自作クラスを classes/ に置いている場合はそのまま動く。ただし、将来的には適切なディレクトリに移動することが推奨されている。
SERIAL_CONSOLE の削除(4.2 Mickledore)
SERIAL_CONSOLE(単数形)は2.6(Thud、2018年)から非推奨だったが、Mickledoreで完全に削除された。
# 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の除外方法が変わった。
# 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対応版に更新するか、ビルド側で圧縮形式を戻す必要がある。
その他の変数削除・名称変更
| 変数(旧) | 変更内容 | バージョン |
|---|---|---|
PNBLACKLIST | SKIP_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_COMPAT に scarthgap が含まれていない。conf/layer.conf を修正する。
# meta-custom/conf/layer.conf
LAYERSERIES_COMPAT_meta-custom = "scarthgap"
エラーの詳細はビルドエラーデバッグガイドも参照してほしい。
クラスが見つからない
ERROR: ParseError: Could not inherit file classes/testimage.bbclass
4.1のclassesディレクトリ分割により、INHERIT += でレシピ専用クラスを使おうとするとこのエラーが出る。IMAGE_CLASSES や inherit に書き換える。
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)
対処法:
- ライブラリをScarthgap環境でリビルドする
- やむを得ない場合、レシピレベルで
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管理ガイドを参照。
プレッシャーベースのビルド制御
# 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の除外を理由ごとにグループ化できるようになった。
# 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_t | 32ビットターゲット | 中〜高(ABI互換性確認) |
| CVE_CHECK_IGNORE → CVE_STATUS | CVE管理設定 | 低(書き換え + 理由追加) |
| ipk zstd圧縮 | OTA配信 | 低(必要時のみ対応) |
移行の手順をまとめると:
- 各レイヤーのScarthgap対応を確認
LAYERSERIES_COMPATを更新- 上のチェックリストを
grep -rで照合 - ビルド → エラー対処 → 繰り返し
- cve-checkを有効化して脆弱性管理を開始
Kirkstoneのサポート終了まで残りわずかだ。このチェックリストで、最短ルートでScarthgapに移行してほしい。