CentOS 7でカーネルのビルドに挑む(総集編)

Pocket

お楽しみはこれからだ! とか言っておきながら、ずいぶんと間が空いてしまいました。いったい何をしていたかと言いますと……すいません、ビギナーズラックでカーネル再構築に成功したことを鼻にかけて、カーネルのチューニング(というかシェイプアップ)にハマっておりましたorz いやもう、かれこれ10回以上はmake→仮想環境で動作チェック→動かない、を繰り返しましたね。睡眠時間も削られてしまって、心身ともにかなり厳しい日々でございました。

ですが、こうして過去を振り返っていられるのは、現在の成功があってのこと。軽くバラしてしまいますと、現在我がLIVAは専用のカーネルを得て、CentOS7で問題なく動作しております。

どうやってLIVAでCentOSを動かしたか、という過程は後日まとめるつもりですが、今回はその下準備であるカーネルのビルドの方法について、過去の記事を引きつつまとめてみたいと思います。

1.使用するOS

今回の目的はLIVAで動作させることだったので、バージョン3.13以上のカーネルを作らなければならず、その必要性からバージョン3.x系で動くOS、CentOSで言うならバージョン7である必要がありました。実機にインストールしたものでもいいとは思いますが、手軽にいろいろ試せるという点では仮想環境で行なった方が気持ち的には楽です。今回、仮想環境にはWindows10上で動くVMware Workstation Playerを使いました。タダなのでw

VMwareの使い方やCentOS 7のインストール手順については、たくさん解説記事がありますのでここでは割愛します。当ブログでも少し触れていますのでご参照ください。

2.ビルドに必要なツールのインストール

今回はカーネルのビルドだけではなく、RPMとして扱えるようにしたので、以下のツールをyumでごっそりインストールします(「その2」参照)。

yum install rpm-build
yum groupinstall "Development Tools"
yum install rpmdevtools
yum install asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel

3.ビルド作業

ここからは安全性を考慮して、root権限ではなく一般ユーザ権限で行ないます。

まずは必要なディレクトリ構成と.rpmmacrosの作成。

rpmdev-setuptree

そして、ターゲットとなるカーネルのソースを入手します。今回はThe Linux Kernel Archives(いわゆる”kernel.org”)から3.x系の(現時点での)最新バージョンである3.18.24を選択します。

cd ~/rpmbuild/SOURCES
wget https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.18.24.tar.xz
tar Jxf linux-3.18.24.tar.xz

展開が終わったら、ソースツリーに移動して、念のために(余計な.configやオブジェクトを消して)初期状態にします。

cd linux-3.18.24
make clean; make mrproper

現在のカーネルのconfigをコピーしてきて、.configを作成します。

cp /boot/config-`uname -r` .config

oldconfigを使って、新しく追加されたパラメータの設定をします。

make oldconfig

make oldconfigは現カーネルとターゲットとなるカーネルとのconfigの差分を埋める作業なのですが、バージョンの差が大きければ大きいほどより大量の差分が生まれます。これをひとつひとつチェックしていると日が暮れて夜が明けてしまいますので(「その2」後半参照)、ぶっちゃけEnterキー押しっぱなしで構いません。そうすればデフォルト値がどんどん入っていきますから。とりあえず、ここでは.configの更新を優先します。

その代わり、続く

make menuconfig

では、目を皿のようにして各項目をチェックしていきます。

導入したいモジュールがあっても、特定の項目を有効にしておかないとメニューに現れない場合がありますので、menuconfig内でのヘルプや検索を駆使して漏れなくチェックしていきましょう。

一方、デフォルトの設定では「これはどうしたって使わんだろう」というモジュールが入っていることが多々ありますので、そういうものはどんどん削っていきましょう。メーカー製のノートPCに特化したモジュールや、各種ゲームコントローラー対応のモジュールなどはサーバ用途には不要でしょう。また、言語サポートも英語と日本語以外に使うものがなければ、その他の言語は削ってしまって構わないと思います(CP437は削らないように!)

ただ、仮想環境でカーネルの動作試験を行なう場合は、仮想環境に対応するモジュールを削らないようにしましょう。これを忘れて、私はずいぶん時間を無駄にしました……orz

もうこれでいいだろう、となったら、あとは

make rpm

と入力して祈るだけです。足りないツールやライブラリがあればmakeが止まりますので、その都度エラーメッセージを見て対応していきましょう。この辺は、カーネルをビルドしようと思うだけの技量があれば、問題ないと思います。

4.導入、そして

無事makeが終われば、RPMS以下にカーネルのRPM、SRPMSにはソースのRPMが出来ているはずです。カーネルのRPMをインストールして、動くかどうか確認してみましょう。そうそう、CentOS 7であれば、GRUB2の設定変更が必要になります。

grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

再起動してどんな結果が出るかは、まあ、設定次第ということで……。

以上、カーネルのビルドの手順を簡単にまとめてみました。何かのお役に立てば幸いです。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)