![新しいバニラカーネルの構築 - 生成された debs に若干の混乱あり](https://rvso.com/image/1035886/%E6%96%B0%E3%81%97%E3%81%84%E3%83%90%E3%83%8B%E3%83%A9%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%AE%E6%A7%8B%E7%AF%89%20-%20%E7%94%9F%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%20debs%20%E3%81%AB%E8%8B%A5%E5%B9%B2%E3%81%AE%E6%B7%B7%E4%B9%B1%E3%81%82%E3%82%8A.png)
そこで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 を修正することだと思われます。