Edited at

CentOS7でelrepoリポジトリを有効化してkernel-mlを入れる

More than 3 years have passed since last update.

CentOS7のカーネルバージョンは 3.10 で、これだとDocker 1.9 の swarm network で overlay ネットワークが使えません。またデフォカーネルではreiserfsが使えなかったりと色々不便だったので新しくしたい。でも kernel を自分でビルドするのは更新まで考えると面倒なので yum で入れたい。そこで ElRepo です。


ElRepo

http://elrepo.org/tiki/tiki-index.php

これはRHELに新しいカーネルやファイルシステムやドライバ等を提供してくれるリポジトリで、ここを使うとより新しいカーネルをyumでインストール出来るようになる。

セットアップ手順は上記URLに書いてある通り以下のようにすれば elrepo-release が入る。

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm


kernel-ml を入れる

で、elrepo-kernel リポジトリに kernel-ml っていうパッケージがあるのでこれを以下のように入れてやれば良い。

yum install --enablerepo=elrepo-kernel kernel-ml

で一度再起動して新しい方のカーネルを選択して起動(またはgrubのdefaultを弄って再起動)する。

起動したら uname とか見て新しくなってることも確認する。

[kawaz@r17 ~]$ uname -a

Linux r17.kawaz.jp 4.3.3-1.el7.elrepo.x86_64 #1 SMP Tue Dec 15 11:18:19 EST 2015 x86_64 x86_64 x86_64 GNU/Linux

あと以後も kernel-ml を使うならアップデート忘れをしないよう /etc/yum.repos.d/elrepo.repo[elrepo-kernel] セクションの enabled1 に修正しておきます。コピペで編集するなら以下を貼り付け。


elrepo.repo.patch

# elrepo-kernelをenabledする

sudo patch -p1 /etc/yum.repos.d/elrepo.repo <<EOF
diff --git a/etc/yum.repos.d/elrepo.repo.orig b/etc/yum.repos.d/elrepo.repo
index 86845cd..e9e17b5 100644
--- a/etc/yum.repos.d/elrepo.repo.orig
+++ b/etc/yum.repos.d/elrepo.repo
@@ -35,7 +35,7 @@ baseurl=http://elrepo.org/linux/kernel/el7/
$basearch/
http://repos.lax-noc.com/elrepo/kernel/el7/
$basearch/
http://mirror.ventraip.net.au/elrepo/kernel/el7/
$basearch/
mirrorlist=http://mirrors.elrepo.org/mirrors-elrepo-kernel.el7
-enabled=0
+enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0
EOF

ついでに kernel-ml で問題無さそうなら既存の kernel パッケージは消してしまって良い。

yum remove kernel

むしろ残しておくと kernel パッケージがアップデートした時に grub がそちらのカーネルを使うように書き換えられてしまうので再起動時に kernel-ml じゃなくなってハマるということが起こりうるので消したほうがすっきりする。


kernel-headers, kernel-tools, kernel-tools-libs とかも -ml に入れ替える

普通に yum で kernel-ml-* を入れようとすると既存の kernel-* とコンフリクトと言われるので既存の kernel-* のパッケージを削除すれば良い。だが、kernel-headers を削除するとそれに依存する gcc や glibc-devel とかも消えるので後で入れなおすのも面倒くさい。

こういうときは yum swap を利用するのが便利だ。

yum swap kernel-headers -- kernel-ml-headers

yum swap kernel-tools-libs kernel-tools -- kernel-ml-tools-libs kernel-ml-tools

こんな感じにしてやると既存パッケージに依存していたパッケージの削除と代わりのパッケージのインストールが依存関係を壊すこと無しに同時に行うことが出来る。

これでカーネル類は全部 kernel-ml なパッケージになってスッキリだ。

[kawaz@r17 ~]$ rpm -qa kernel\* | sort

kernel-ml-4.3.3-1.el7.elrepo.x86_64
kernel-ml-headers-4.3.3-1.el7.elrepo.x86_64
kernel-ml-tools-4.3.3-1.el7.elrepo.x86_64
kernel-ml-tools-libs-4.3.3-1.el7.elrepo.x86_64