別のシステムでカーネルをコンパイルする

別のシステムでカーネルをコンパイルする

私は Nimbix で働いており、かなり強力なマルチコア システムにアクセスできます。カーネル コンパイル サービスを作成するつもりです。

システムには最大 128 個のコアを搭載でき、32 個のコアを使用した最初のテストでは、非常に高速にコンパイルできました。Linux make -j324.8.12 の場合の時間は次のとおりです。

real    2m16.366s
user    29m18.732s
sys     2m28.616s

私の Dell Precision 6500 ラップトップでは、約 25 分経ってもまだコンパイルされませんでした。

最初のテストは、自分のシステム (Arch Linux) 用のカーネルをビルドしてみることです。

リモート システムのディレクトリからbzImage を/lib/modules自分のシステムにコピーしました。

今、実行しようとするとmkinitcpioエラーが発生します:

==> ERROR: '/lib/modules/4.8.14-2-ck-nehalem' is not a valid kernel module directory

(私は /proc/config.gz からベースカーネルの .config ファイルを取得しました - 私は ck-nehalem カーネルバージョンを持っています)

これを動作させるにはどうしたらいいですか? 別のシステムから initramfs イメージが構築されているシステムにモジュールを転送する一般的な方法は何ですか? initramfs はリモートでも構築できますか?

少し話がそれますが、このようなカーネル コンパイル サービスはカーネル開発者やカーネル エンジニアにとって役立つでしょうか? コンピューティング クラスターの使用コストは 1 時間あたり約 3 ドルなので、1 回のコンパイルにはほとんどコストがかかりません。

答え1

それで、他の誰かの役に立つかもしれないので、自分の質問に答えます。

実行すれば、initramfsをリモートで構築することは可能です。

make modules_install

リモートシステムでは、必要なモジュール、特にmd raidoのモジュールをイメージに含めることができませんでした。システムを起動するinitramfsを作成できませんでした。ただし、mkinitcpio.confですべてのモジュールを明示的に指定すれば、実行できると思います。

nvidia などの一部のモジュールでは、必要なモジュールを構築するために dkms を実行する必要もあります。

/lib/modules/ 内のモジュールをローカル システムにコピーする場合は、リンクを再作成しbuildsourceLinux カーネル ソースを含むディレクトリを指すようにする必要があります。リモート側で作成されたリンクは無効になります。

答え2

initramfs に不足している md raid モジュールについては、initramfs ファイルを開いて必要なモジュールを追加し、元の initramfs に基づいて新しい initramfs を再作成する方法もありますが、今回は追加したモジュールも含めます。私は Fedora でこれを何度か実行しましたが、Arch Linux でも実行できると思います。あるいは、mkinitcpio.conf ファイルを構成するか、mkinitcpio のパラメーターを使用してこれを行うこともできます。

ラミ・ローゼン

答え3

ローカルでカーネルをコンパイルし、コンパイルされたカーネルを .deb/.rpm パッケージとしてビルドして、リモートにインストールする必要があります。リポジトリからバイナリ カーネルをインストールするのと同じです。

関連情報