Help us understand the problem. What is going on with this article?

CentOS kernel version up

More than 3 years have passed since last update.

概要

docker の機能を使うためにCentOSkernel のversion を上げる必要があったのでその為の備忘録。

環境

  • OS : cent7.2
cat /etc/redhat-release
  # CentOS Linux release 7.2.1511 (Core)
  • kernel : 3.10
uname -r
  # 3.10.0-327.el7.x86_64

update 手順

今回はmake してupdate する方法とyum でupdate する方法を試してみた。

make

下準備

KERNEL_VERSION=`uname -r`
echo $KERNEL_VERSION
  # 3.10.0-327.el7.x86_64

yum -y update
yum -y install gcc bc

kernel module のダウンロード

cd /usr/local/src/
wget https://cdn.kernel.org/pub/linux/kernel/v3.x/linux-3.18.26.tar.xz

ls -l
  # total 79120 
  # -rw-r--r-- 1 root root 81017800 Jan 26 02:50 linux-3.18.26.tar.xz

kernel module の解凍

tar xvfJ linux-3.18.26.tar.xz

ls -l
  # total 79124
  # drwxrwxr-x 24 root root     4096 Feb 11 09:02 linux-3.18.26
  # -rw-r--r--  1 root root 81017800 Jan 26 02:50 linux-3.18.26.tar.xz

設定ファイルの作成

cd linux-3.18.26

cp -i /boot/config-$KERNEL_VERSION ./.config

make oldconfig
  #   HOSTCC  scripts/basic/fixdep
  #   HOSTCC  scripts/kconfig/conf.o
  #   SHIPPED scripts/kconfig/zconf.tab.c
  #   SHIPPED scripts/kconfig/zconf.lex.c
  #   SHIPPED scripts/kconfig/zconf.hash.c
  #                  ・
  #                  ・
  #                  ・
  ## いっぱい質問が出てくるがひたすらEnter

コンパイル

make -j4
  # scripts/kconfig/conf --silentoldconfig Kconfig
  #   SYSTBL  arch/x86/syscalls/../include/generated/asm/syscalls_32.h
  #   SYSHDR  arch/x86/syscalls/../include/generated/asm/unistd_32_ia32.h
  #   SYSHDR  arch/x86/syscalls/../include/generated/asm/unistd_64_x32.h
  #   SYSTBL  arch/x86/syscalls/../include/generated/asm/syscalls_64.h
  #   SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h
  #   HOSTCC  scripts/basic/bin2c
  #                  ・
  #                  ・
  #                  ・

make には時間がかかるため同時に実行できるジョブの数を指定するため-j オプションを用いています。

kernel module インストール

make modules_install
  #   INSTALL Documentation/connector/cn_test.ko
  #   INSTALL Documentation/filesystems/configfs/configfs_example_explicit.ko
  #   INSTALL Documentation/filesystems/configfs/configfs_example_macros.ko
  #   INSTALL arch/x86/crypto/aesni-intel.ko
  #                  ・
  #                  ・
  #                  ・

kernel インストール

make install
  # sh ./arch/x86/boot/install.sh 3.18.26 arch/x86/boot/bzImage \
  #     System.map "/boot"

grub 設定確認

awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
  # CentOS Linux (3.18.26) 7 (Core)
  # CentOS Linux 7 Rescue 7444b2222355f84187a4cda79dec6cc3   # (3.10.0-327.4.5.el7.x86_64)
  # CentOS Linux (3.10.0-327.4.5.el7.x86_64) 7 (Core)
  # CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core)
  # CentOS Linux (0-rescue-01fb3288265b4ee59a2301e4de11e3e6) 7 (Core)

3.18.26 のkernel が入っていることが確認できる。

grub 起動設定変更

## 起動kernel 変更
grub2-set-default 0
## 設定反映
grub2-mkconfig -o /boot/grub2/grub.cfg

再起動

reboot

起動後確認

uname -r
  # 3.18.26

無事にversion があがっていることを確認できた。

yum

下準備

yum -y install

repolist にelrepo を追加

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

elrepo-kernel の有効化

elrepo-kernelenabled1 に変更する

[elrepo-kernel]
name=ELRepo.org Community Enterprise Linux Kernel Repository - el7
baseurl=http://elrepo.org/linux/kernel/el7/$basearch/
        http://mirrors.coreix.net/elrepo/kernel/el7/$basearch/
        http://jur-linux.org/download/elrepo/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=1 <--- ここを`1` に変更する
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-elrepo.org
protect=0

既存のkernel のパッケージを確認

yum list installed | grep kernel
  # kernel.x86_64                      3.10.0-327.el7                 @anaconda
  # kernel.x86_64                      3.10.0-327.4.5.el7             @updates
  # kernel-tools.x86_64                3.10.0-327.4.5.el7             @updates
  # kernel-tools-libs.x86_64           3.10.0-327.4.5.el7             @updates

既存のkernel のパッケージを削除

yum -y remove kernel.x86_64 kernel-tools.x86_64 kernel-tools-libs.x86_64 
yum -y update

kernel インストール

yum -y install kernel-ml.x86_64 kernel-ml-devel.x86_64 kernel-ml-headers.x86_64 kernel-ml-tools.x86_64 kernel-ml-tools-libs.x86_64

grub 設定確認

awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
  # CentOS Linux (4.4.1-1.el7.elrepo.x86_64) 7 (Core)
  # CentOS Linux 7 Rescue 30e13afa85251a45b9ea22e336df111e (3.10.0-327.4.5.el7.x86_64)
  # CentOS Linux (3.10.0-327.4.5.el7.x86_64) 7 (Core)
  # CentOS Linux (0-rescue-01fb3288265b4ee59a2301e4de11e3e6) 7 (Core)

4.4.1 のkernel が入っていることが確認できる。

grub 起動設定変更

## 起動kernel 変更
grub2-set-default 0
## 設定反映
grub2-mkconfig -o /boot/grub2/grub.cfg

再起動

reboot

起動後確認

uname -r
  # 4.4.1-1.el7.elrepo.x86_64

無事にversion があがっていることを確認できた。

まとめ

無事にCentOSkernel のversion をアップデートすることができた。
しかし、Docker を使っていくにあたって、そろそろCoreOS を使ってみようかなと思いました。

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away