CentOS 7でLinuxカーネルをコンパイルする方法


カスタムコンパイルされたLinuxカーネルを実行することは、特にデフォルトのディストリビューション提供のカーネルでは利用できない特定のカーネル機能を有効または無効にしようとしているときには常に便利です。

この記事では、 CentOS 7 ディストリビューションのソースから最新のLinuxカーネルをコンパイルして使用する方法を説明します(ここで説明する手順は RHEL Fedoraでも有効です)。

これらの複雑な設定をしたくない場合は、サードパーティのRPMリポジトリを使用してCentOS 7にカーネルをインストールまたはアップグレードする方法を説明している簡単な記事に従ってください。

カーネルコンパイルに必要なパッケージをインストールする

まず、ソフトウェアパッケージのリポジトリを更新し、カーネルのコンパイルに必要な開発ツールをインストールし、そして ncurses ライブラリを次のyumコマンドを使用してインストールします。

# yum update
# yum install -y ncurses-devel make gcc bc bison flex elfutils-libelf-devel openssl-devel grub2

CentOS 7でカーネルをコンパイルしてインストールする

/usr/src/ディレクトリにあるwgetコマンドを使用して最新のカーネル 4.17 ソースをダウンロードするか、kernel.orgにアクセスして最新のカーネルをダウンロードすることもできます。

# cd /usr/src/
# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.17.11.tar.xz

以下のコマンドを使用して、アーカイブファイルを解凍し、ディレクトリを変更します。

# tar -xvf linux-4.17.11.tar.xz
# cd linux-4.17.11/

CentOS 7でカーネルを設定する

CentOS 7 環境では、カーネルを次の必須設定オプションで正しく設定する必要があります。

CONFIG_KVM_GUEST=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_PCI_LEGACY=y
CONFIG_BLK_DEV_SD
CONFIG_SCSI_VIRTIO=y
CONFIG_VIRTIO_NET=y
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y

実行中のカーネル設定( .config )を/boot ディレクトリから新しいカーネル linux-4.17.11 ディレクトリにコピーすることを強くお勧めします。

# cp -v /boot/config-3.10.0-693.5.2.el7.x86_64 /usr/src/linux-4.17.11/.config

それではLinuxカーネルを設定するために make menuconfig コマンドを実行してください。下記のコマンドを実行すると、すべてのメニューを含むポップアップウィンドウが表示されます。ここでは、特定のカーネル機能を有効または無効にすることができます。これらのメニューに慣れていない場合は、 ESC キーを押して終了してください。

# cd /usr/src/linux-4.17.11/
# make menuconfig

カーネル設定オプションを設定したら、[保存]をクリックして設定インターフェイスを保存し、メニューを終了します。

CentOS 7でカーネルをコンパイルする

カーネルのコンパイルを始める前に、あなたのシステムがファイルシステムに 25GB 以上の空き容量を持っていることを確認してください。確認するには、図に示すようにdfコマンドを使用してファイルシステムの空き容量を確認します。

# df -h

次のコマンドでカーネルとモジュールをコンパイルしてインストールします(数時間かかる場合があります)。コンパイルプロセスはファイルを/boot ディレクトリの下に置き、また grub.conf ファイルに新しいカーネルエントリを作成します。

# make bzImage
# make modules
# make
# make install
# make modules_install

コンパイルが完了したら、システムを再起動して新しくインストールされたカーネルを確認します。

# uname -sr

それでおしまい。この記事が皆さんのお役に立つことを願っています。カーネルのコンパイルまたはインストール中に問題や困難に直面した場合は、下記のコメントフォームを使用して質問したり投稿してください。