
私は Nimbix で働いており、かなり強力なマルチコア システムにアクセスできます。カーネル コンパイル サービスを作成するつもりです。
システムには最大 128 個のコアを搭載でき、32 個のコアを使用した最初のテストでは、非常に高速にコンパイルできました。Linux make -j32
4.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/ 内のモジュールをローカル システムにコピーする場合は、リンクを再作成しbuild
、source
Linux カーネル ソースを含むディレクトリを指すようにする必要があります。リモート側で作成されたリンクは無効になります。
答え2
initramfs に不足している md raid モジュールについては、initramfs ファイルを開いて必要なモジュールを追加し、元の initramfs に基づいて新しい initramfs を再作成する方法もありますが、今回は追加したモジュールも含めます。私は Fedora でこれを何度か実行しましたが、Arch Linux でも実行できると思います。あるいは、mkinitcpio.conf ファイルを構成するか、mkinitcpio のパラメーターを使用してこれを行うこともできます。
ラミ・ローゼン
答え3
ローカルでカーネルをコンパイルし、コンパイルされたカーネルを .deb/.rpm パッケージとしてビルドして、リモートにインストールする必要があります。リポジトリからバイナリ カーネルをインストールするのと同じです。