CentOS6.7 カーネルアップデート

#経緯
`ipvsadm` + `iptables` でSNATできるLBを構築しようとしたらカーネルのアップデートが必要ぽかったので、やったことないしチャレンジしてみました。

#環境
* CentOS6.7 64bit
* VMware ESXi 5.5

#やりたいこと
カーネルを2.6.36以上にバージョンアップをしたい
※yum では2.6.32-573.3.1.el6 までしか上がらず

|変更前|変更後|
|:--:|:--:|
|2.6.32-504.el6.x86_64|2.6.36.4　　　　　　　|

#手順
##1. 事前準備
###1.1. 現在のカーネルバージョン確認

```shell-session
# uname -r
2.6.32-504.el6.x86_64
```

###1.2. カーネルモジュールのダウンロード

```shell-session
# cd /usr/local/src/
# wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.36.4.tar.bz2
# ll
合計 68616
-rw-r--r--. 1 root root 70262144  8月 19 13:55 2015 linux-2.6.36.4.tar.bz2
```

###1.3. カーネルモジュールの解凍

```shell-session
# tar xvfj linux-2.6.36.4.tar.bz2
# ll
合計 68620
drwxrwxr-x. 23 root root     4096  2月 18 08:14 2011 linux-2.6.36.4
-rw-r--r--.  1 root root 70262144  8月 19 13:55 2015 linux-2.6.36.4.tar.bz2
```

##2. インストール
###2.1. ディレクトリ移動

```shell-session
# cd linux-2.6.36.4
```

###2.2. 現在のカーネルビルド設定引き継ぎ

```shell-session
# cp -p /boot/config-2.6.32-504.el6.x86_64 ./.config
```

###2.3. 設定ファイルの作成
2.2. でコピーした設定ファイルを用いて新しい設定ファイルを作成

```shell-session
# make oldconfig
  HOSTCC  scripts/basic/fixdep
/bin/sh: gcc: コマンドが見つかりません
make[1]: *** [scripts/basic/fixdep] エラー 127
make: *** [scripts_basic] エラー 2
```

####2.3.1. gcc のインストール
gccがないと怒られたのでインストール

```shell-session
# yum -y install gcc
```

###2.4. 気を取り直して再度設定ファイルの作成

```shell-session
# make oldconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/basic/hash
  HOSTCC  scripts/kconfig/conf.o
  HOSTCC  scripts/kconfig/kxgettext.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/lex.zconf.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
...省略
```

###2.5. コンパイル
※ここがめっちゃ時間かかりました

```shell-session
# make
scripts/kconfig/conf --silentoldconfig arch/x86/Kconfig
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  CHK     include/generated/utsrelease.h
  UPD     include/generated/utsrelease.h
  CC      kernel/bounds.s
  GEN     include/generated/bounds.h
  CC      arch/x86/kernel/asm-offsets.s
  GEN     include/generated/asm-offsets.h
  CALL    scripts/checksyscalls.sh
...省略
```

###2.6. カーネルモジュールインストール

```shell-session
# make modules_install
```

###2.7. カーネルインストール
※なんか色々ERRORってなってるけど大丈夫なのだろうか？ｗ

```shell-session
# make install
sh /usr/local/src/linux-2.6.36.4/arch/x86/boot/install.sh 2.6.36.4 arch/x86/boot/bzImage \
		System.map "/boot"
ERROR: modinfo: could not find module nf_defrag_ipv6
ERROR: modinfo: could not find module vsock
ERROR: modinfo: could not find module vmware_balloon
ERROR: modinfo: could not find module vmci
```

##3. インストール後の確認
###3.1. /boot ディレクトリの確認

```shell-session
# ll /boot/
合計 109652
lrwxrwxrwx. 1 root root       25  8月 19 15:15 2015 System.map -> /boot/System.map-2.6.36.4
-rw-r--r--. 1 root root  2544748 10月 15 13:54 2014 System.map-2.6.32-504.el6.x86_64
-rw-r--r--. 1 root root  2585052  7月 26 02:34 2015 System.map-2.6.32-573.1.1.el6.x86_64
-rw-r--r--. 1 root root  2585088  8月 14 08:25 2015 System.map-2.6.32-573.3.1.el6.x86_64
-rw-r--r--. 1 root root  2140702  8月 19 15:15 2015 System.map-2.6.36.4
-rw-r--r--. 1 root root   106308 10月 15 13:54 2014 config-2.6.32-504.el6.x86_64
-rw-r--r--. 1 root root   107138  7月 26 02:34 2015 config-2.6.32-573.1.1.el6.x86_64
-rw-r--r--. 1 root root   107138  8月 14 08:25 2015 config-2.6.32-573.3.1.el6.x86_64
drwxr-xr-x. 3 root root     1024  8月 11 14:51 2015 efi
drwxr-xr-x. 2 root root     1024  8月 19 15:15 2015 grub
-rw-------. 1 root root 19194026  8月 11 15:11 2015 initramfs-2.6.32-504.el6.x86_64.img
-rw-------. 1 root root 24877833  8月 11 17:38 2015 initramfs-2.6.32-573.1.1.el6.x86_64.img
-rw-------. 1 root root 24896551  8月 19 13:44 2015 initramfs-2.6.32-573.3.1.el6.x86_64.img
-rw-------. 1 root root 10641846  8月 19 15:15 2015 initramfs-2.6.36.4.img
-rw-------. 1 root root  5481545  8月 11 17:35 2015 initrd-2.6.32-504.el6.x86_64kdump.img
drwx------. 2 root root    12288  8月 11 14:33 2015 lost+found
-rw-r--r--. 1 root root   200191 10月 15 13:55 2014 symvers-2.6.32-504.el6.x86_64.gz
-rw-r--r--. 1 root root   205998  7月 26 02:35 2015 symvers-2.6.32-573.1.1.el6.x86_64.gz
-rw-r--r--. 1 root root   205998  8月 14 08:25 2015 symvers-2.6.32-573.3.1.el6.x86_64.gz
lrwxrwxrwx. 1 root root       22  8月 19 15:15 2015 vmlinuz -> /boot/vmlinuz-2.6.36.4
-rwxr-xr-x. 1 root root  4152336 10月 15 13:54 2014 vmlinuz-2.6.32-504.el6.x86_64
-rwxr-xr-x. 1 root root  4220816  7月 26 02:34 2015 vmlinuz-2.6.32-573.1.1.el6.x86_64
-rwxr-xr-x. 1 root root  4221776  8月 14 08:25 2015 vmlinuz-2.6.32-573.3.1.el6.x86_64
-rw-r--r--. 1 root root  3758512  8月 19 15:15 2015 vmlinuz-2.6.36.4
```

###3.2. カーネルモジュールの確認

```shell-session
# ll /lib/modules/
合計 16
drwxr-xr-x. 8 root root 4096  8月 11 15:10 2015 2.6.32-504.el6.x86_64
drwxr-xr-x. 7 root root 4096  8月 11 17:37 2015 2.6.32-573.1.1.el6.x86_64
drwxr-xr-x. 7 root root 4096  8月 19 13:43 2015 2.6.32-573.3.1.el6.x86_64
drwxr-xr-x. 3 root root 4096  8月 19 15:15 2015 2.6.36.4
```

###3.3. grub.conf の確認

```shell-session:grub.conf
# cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/mapper/vg_lb01-lv_root
#          initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.36.4)
        root (hd0,0)
        kernel /vmlinuz-2.6.36.4 ro root=/dev/mapper/vg_lb01-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_lb01/lv_swap crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=vg_lb01/lv_root LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.36.4.img
title CentOS (2.6.32-573.3.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.3.1.el6.x86_64 ro root=/dev/mapper/vg_lb01-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_lb01/lv_swap crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=vg_lb01/lv_root LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-573.3.1.el6.x86_64.img
title CentOS (2.6.32-573.1.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.1.1.el6.x86_64 ro root=/dev/mapper/vg_lb01-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_lb01/lv_swap crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=vg_lb01/lv_root LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-573.1.1.el6.x86_64.img
title CentOS 6 (2.6.32-504.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg_lb01-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_lb01/lv_swap crashkernel=auto  KEYBOARDTYPE=pc KEYTABLE=jp106 rd_LVM_LV=vg_lb01/lv_root LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet
        initrd /initramfs-2.6.32-504.el6.x86_64.img
```

##4. 新しいバージョンのカーネルで起動
###4.1. 再起動

```shell-session
# reboot
```

###4.2. 新しいカーネルの選択
CentOS (2.6.36.4) を選択する

![WS000409.png](https://qiita-image-store.s3.amazonaws.com/0/79134/866a86f1-6830-3bcc-ceac-d400f7da198e.png)

###4.3. カーネルバージョンの確認

```shell-session
# uname -r
2.6.36.4
```

###4.4. デフォルト起動カーネルバージョンの設定
今後、デフォルト起動をカーネル2.6.36.4にしたい場合は下記ファイルを編集する

|変更前|変更後|
|:--:|:--:|
|default=1|default=0|

```shell-session:grub.conf
# vim /etc/grub.conf
default=0
...省略
```

#後記
わりとすんなりできてよかった！
後はSNATできるようになるかどうかが問題。。。
`make module_install`のコマンドが抜けていたので追記しましたorz