新しいバニラカーネルの構築 - 生成された debs に若干の混乱あり

新しいバニラカーネルの構築 - 生成された debs に若干の混乱あり

そこで2.6.39-4をビルドしてみることにしました。ubuntu wiki「GitKernelBuild」ページ

簡単に言うと、tar.bz2をダウンロードして解凍し、古い設定をコピーしてoldconfigを作成し、

fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

すべてうまくいきました。現在このカーネルを使用していますが、1 つだけ問題があります。他のモジュールや DKMS をビルドできないのです。詳細情報は次のとおりです。

生成される deb ファイルは次の 2 つです。

linux-image-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb
linux-headers-2.6.39.4-custom_2.6.39.4-custom-10.00.Custom_amd64.deb

これについては少し混乱しています。

通常のUbuntuカーネルでは、mainline-ppaのカーネルであっても、3つのdebファイルがインストールされています。たとえば、メインラインPPA以下のパッケージが存在します:

linux-image-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904-generic_2.6.39-02063904.201108040905_amd64.deb
linux-headers-2.6.39-02063904_2.6.39-02063904.201108040905_all.deb

ご覧のとおり、2 つの異なるヘッダー パッケージがあります。実際、これらをインストールすると、メインライン PPA パッケージは /lib/modules の下にディレクトリを作成します。

/lib/modules/2.6.39-02063904-generic

そのディレクトリには、/usr/srcの下の-genericヘッダーを指すシンボリックリンクが存在します。

/lib/modules/2.6.39-02063904-generic/build -> /usr/src/linux-headers-2.6.39-02063904-generic

/usr/srcの下には、このカーネル用の2つの異なるディレクトリが存在します。

/usr/src/linux-headers-2.6.39-02063904-generic
/usr/src/linux-headers-2.6.39-02063904

さて、私の 2 つのパッケージには次のような問題があります。

/usr/srcにはフォルダが1つだけあります。

/usr/src/linux-headers-2.6.39.4-custom

/lib/modulesの下にはフォルダがあります

/lib/modules/linux-headers-2.6.39.4-custom

本当の問題、そして私がこの投稿を書いている理由は、上記のディレクトリに作成されるこのシンボリック リンクです。

/lib/modules/linux-headers-2.6.39.4-custom/build -> /home/nickped/projects/kernel/linux-2.6.39.4

ご覧のとおり、これはカーネルをビルドしたディレクトリにリンクされていますが、もちろんその後は存在しない可能性があります。これにより、重要なものが見つからないため、他のモジュール (vmware、virtualbox など) のビルドが失敗します。

なぜこのようなことが起こるのでしょうか? どうすれば修正できるのでしょうか? 3 つの deb ファイルではなく 2 つの deb ファイルが生成されるのはなぜでしょうか? 公式リリースに含まれる 3 つの異なる deb ファイルの目的は何ですか? また、他のユーザーがこれらを作成する方法はありますか?

答え1

最初の質問に答えるとパッケージが2つしかないのはなぜですか?またはなぜヘッダーファイルが 2 つないのですか?-- クロスコンパイルされると、あらゆるユースケースに対応できるようにパッケージ化されます。ヘッダーをより大きな全てパッケージとアーキテクチャ固有の小さなパッケージを用意すれば、ユーザーに配布する際の帯域幅を節約できます。自分で作成する場合は、1 つのアーキテクチャに対してのみ必要なので、ヘッダー ファイルも 1 つで済みます。

linux_sourceソースの場所へのシンボリックリンクに関しては、私も同じ問題を抱えていました。パッケージも生成し (後に追加するだけ)、シンボリックリンクを手動で修正する以外に、良い修正方法は見つかりませんkernel_image kernel_headersでした。

実はすでにこの側面に関する質問長期的な解決策としては、カーネルのインストール後に実行されるスクリプトをハッキングして、symink を修正することだと思われます。

関連情報