ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

CentOS 7でVanilla Kernelを使う方法

追記 (2017/5/14)
* make prepareを追加
* 同じ方法で4.9.27をビルド完了 

最近のLinuxなら、なんらかのパッケージ管理システムがあって、yumとかdnfとかaptといったようなパッケージ管理用のコマンドがあり、パッケージをコマンドを使うなどで簡単に導入したり、アップデートができると思います。Linuxディストリビューションによっては自分でビルドすることを主眼においているものも存在します。

普段はLinuxディストリビューションが用意するパッケージを使っていればインストールが楽ですし、パッチの迅速な適用ができるので良いのですが、時に自らの手で欲しいバージョンのパッケージを作成して使いたいと思う時があります。

ちなみにVanilla KernelとはオリジナルのLinuxカーネルの事です。Linux KernelはThe Linux Kernel Organizationのコミュニティグループが開発、管理をしています。

さて、主題の「CentOS 7でVanilla Kernelを使う方法」ですが、下記のサイトの手順にあるように実行するだけです。 make rpmを実行したらすぐインストールできるrpmパッケージを生成することができます。簡単ですね。

…とだけ書いて終わりだと不親切すぎますし、実際その通りやろうとしてみると、いろいろと事前に準備するものもあったりするので、ブログにまとめようと思います。

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

今回はソースインストールではなく、インストールや設定を容易にするためにrpmパッケージを作ってみます。その場合に必要なパッケージは次の通りです。

# yum groupinstall "Development Tools"
# yum install openssl-devel bc ncurses ncurses-devel rpmdevtools yum-utils rpm-build

カーネルソースをダウンロード

Linuxカーネルを次の手順に従ってダウンロードします。

# git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
# cd linux-stable
# git checkout v4.9.26 <-目的のバージョンのソースに切り替え

もしくは次のサイトを開いて、目的のバージョンのtar.gzのファイルをダウンロードしたあと、展開してください。

カーネルのビルド

次のコマンドをそれぞれ実行してカーネルのビルドを行います。

# make oldconfig   #現在のカーネルと同じ設定を適用
# make menuconfig    #ビルドするカーネルのオプションを定義する
# make prepare

# make rpm                 #rpmパッケージを作る

カーネルのビルドには多くの時間がかかります。最後のmake rpmを実行したあとは、しばしなんらかの方法で時間を潰しましょう。 ビルドが完成すると~/rpmbuild/RPMSディレクトリーにrpmパッケージが、~/rpmbuild/SRPMSディレクトリーにソースRPMパッケージが展開されます。

ビルドしたrpmパッケージをインストー

f:id:ytooyama:20170513011414p:plain

~/rpmbuild/RPMSディレクトリーに移動して、yum localinstall "packagename"コマンドを使ってrpmパッケージをインストールします。

ビルドしたカーネルをデフォルトに設定する

インストールしたらCentOS 7を再起動します。GRUBの画面で新しいカーネルを選択するとそのカーネルでOSが起動します。起動したらログインしてdmesgコマンドを使って起動ログを閲覧し、変なログ、エラーが出ていないか確認します。

ちなみに新しいカーネルを標準のカーネルに設定したい場合は、次のようにしてデフォルトのカーネルを設定します。grep ^menuent /boot/grub2/grub.cfg | awk -F\' '{ print $2 }'コマンドでインストール済みのカーネル一覧を出力します。

# grep ^menuent /boot/grub2/grub.cfg | awk -F\' '{ print $2 }'
CentOS Linux (4.9.26) 7 (Core)
CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-9541e782676048f19421d05ff8b295a1) 7 (Core)

上から0,1,2…番と数えます。/etc/default/grubGRUB_DEFAULTに起動するkernelの番号を設定します。今回はビルドしたカーネル4.9.26を標準としたいので、0を設定します。

# vi /etc/default/grub
...
GRUB_DEFAULT=0

GRUB2はデフォルト設定を定義するファイルの設定を書き換えた後、起動時に読み込まれる新しいgrub.cfgファイルを生成する必要があります。CentOS 7ではupdate-grubといったコマンドはないので、次のように実行してください。最後に再起動して新しいカーネルを読み込んでみましょう。以降はGRUBカーネルを選択しなくてもカーネル4.9.28を使ってCentOS 7.3が起動するはずです。

# grub2-mkconfig -o /boot/grub2/grub.cfg
# reboot

無事に起動したようです。

f:id:ytooyama:20170513011355p:plain

以上、CentOS 7でVanilla Kernelを使う方法でした。

さてここまでやってみるとこう思うと思います。なんてパッケージのビルドって時間や手間暇がかかるんだと。昔はソースビルドするのが当たり前でしたが、ビルド済みパッケージがあるおかげで普段、色々ラクをさせてもらっているのです。その裏にいるのは人なのか機械なのかはわかりませんが、パッケージのメンテナーに感謝しましょう。

情報源へのリンク

今回の情報源のリンクを最後にまとめます。

このブログサイトはJavaScriptを使っていますが、読み込んでいるJavaScriptは全てはてなが提供しているものであり、筆者が設置しているものではありません。