Debian カーネルイメージパッケージのバージョン管理を理解しようとしています。
次の出力を例にしてみましょう。
$ apt search linux-image | grep amd64-unsigned
linux-image-5.10.0-10-amd64-unsigned/stable 5.10.84-1 amd64
linux-image-5.10.0-11-amd64-unsigned/stable-security 5.10.92-1 amd64
. . .
私が正しく理解したなら、
- カーネルバージョン5.10.84-1→ABIバージョン5.10.0-10
- カーネルバージョン5.10.92-1→ABIバージョン5.10.0-11
明らかに、Linuxカーネルは従わないようですサービスモデルABIはパッチバージョン間でランダムに変更されるためです。
では、Debian は ABI バージョン番号を変更する時期をどのように決定しますか?
答え1
この内容は次のように記録されます。Debian カーネルマニュアル(Debianユーザーもこのdebian-kernel-handbook
パッケージをインストールできます):
ABIのメンテナンスとアップデート
ユーザーがツリーの外部モジュールを頻繁に再構築するのを防ぐために、Debian の安定リリースまたは以前の安定リリースへの更新中にカーネル ABI を変更しないようにします。最も重要なことは、ツリーの外部モジュールがABIの対応する部分に依存しないように見えない限り、ABI名を変更せずにそのような変更を避けることです。
バグ修正やカーネル構成の変更により、ABIが変更されることがあります。関数を条件としてエクスポートする
CONFIG_FOO
場合、または定義が依存する型を使用している場合は、関数をオンまたはオフにするとそのCONFIG_FOO
関数CONFIG_FOO
のABIが変更されるため、カーネル全体のABIが変更されます。ほとんどのドライバは何もエクスポートしないため、個々のドライバの設定を有効または変更しても、通常はABIは変更されません。カーネルビルドプロセスは、エクスポートされた関数または変数ごとに「シンボルバージョン」を生成します。これは依存する定義のハッシュであり、関数のABIが変更されるたびに変更する必要があります。カーネルモジュールローダはシンボルバージョンを比較し、互換性のないモジュールを検出します。完全なシンボルバージョンセットはカーネルABIを表します。
このディレクトリに以前にアップロードされたパッケージのシンボルバージョンを収集し、新しいカーネルをこれらの
debian/abi
バージョンと比較します。 ABI名は変更されていないがABI自体が変更された場合(許可されているとマークされた追加または変更を除く)、ビルドは中断されます。
したがって、デフォルトで既存のモジュールとの互換性を保証できない場合は、ABIを変更する必要があります。 ABIの変更はパッケージ変更ログで追跡されますが、変更の具体的な理由は必ずしも含まれていません(複数の場合があります)。
バラよりDebian Linux カーネルのバージョン管理Debian カーネルのバージョン管理スキームのより一般的な説明です。