CentOS7のカーネルバージョンは 3.10 で、これだとDocker 1.9 の swarm network で overlay ネットワークが使えません。またデフォカーネルではreiserfsが使えなかったりと色々不便だったので新しくしたい。でも kernel を自分でビルドするのは更新まで考えると面倒なので yum で入れたい。そこで ElRepo です。
ElRepo
これは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]
セクションの enabled
を 1
に修正しておきます。コピペで編集するなら以下を貼り付け。
# 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