http://www.kernel.org
stable:	3.2.8	2012-02-27
3.2.8出てる。。。
ESXiで使っているUbuntuはgenericで
必要ないデバイスドライバがいっぱいあるので、
# cat /boot/config-2.6.32-38-generic |grep =y|wc -l 1227 # cat /boot/config-2.6.32-38-generic |grep =m|wc -l 2407 # cat /boot/config-2.6.32-38-generic |grep not\ set|wc -l 519
Kernel再構築してみた。
元Kernel・・・2.6.32-38-generic
新Kernel・・・3.2.8
DebianとRedhat系(CentOS、Scientific Linux)でも行けるはず。
変更点
CONFIG_MCORE2 *1 # CONFIG_ATA is not set *2 # CONFIG_IDE *2 # CONFIG_I2C_PIIX4 is not set *3 CONFIG_RTC_DRV_CMOS=y *4 CONFIG_VMWARE_BALLOON=y CONFIG_VMWARE_PVSCSI=y *5 CONFIG_VMXNET3=y CONFIG_SYSFS_DEPRECATED=y *6*7 CONFIG_SYSFS_DEPRECATED_V2=y *6*7 # CONFIG_SYSFS_DEPRECATED is not set *6*7 CONFIG_INOTIFY_USER=y *7 CONFIG_SIGNALFD=y *7
他にもいらないドライバも削っていく。
南十字さんありがとう〜
http://blog.thnetworks.info/
*1
CPUタイプ。僕の場合は
Core 2/newer Xeon
*2
使ってないので削除してもOKです。
*3
piix4_smbusでエラー吐くので削除。
# dmesg |grep piix4_smbus [ 3.457719] piix4_smbus 0000:00:07.3: Host SMBus controller not enabled!
ESXiでは使えない。
http://communities.vmware.com/thread/144562
*4
RTCを全部削除すると下記エラーが発生するので
CONFIG_RTC_DRV_CMOSのみビルドインする。
# dmesg |grep rtc [ 2.669216] drivers/rtc/hctosys.c: unable to open rtc device (rtc0) [ 10.447288] rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0 [ 10.447364] rtc0: alarms up to one month, y3k, 114 bytes nvram, hpet irqs
*5
ゲストOSのSCSIコントローラタイプを
「準仮想化」にしても起動できるようになります
includeしたほうが起動が速いです。
*6
Kernel2.6.3x以降から必要になったようです。
RedHat系のCentOSやScientificLinuxなどでは有効にして下さい。
(Denian/Ubuntuとは逆です!!)
Enable deprecated sysfs features to support old userspace tools
 SYSFS_DEPRECATED=y
Enable deprecated sysfs features by default
 SYSFS_DEPRECATED_V2=y
*7
Debian Squeez/ubuntuなどでは、無効にして下さい。
(Redhat系とは逆です!!)
Enable deprecated sysfs features to support old userspace tools
 # CONFIG_SYSFS_DEPRECATED is not set
Enable deprecated sysfs features by default
 # CONFIG_SYSFS_DEPRECATED_V2 is not set
Inotify support for userspace
 CONFIG_INOTIFY_USER=y
Enable signalfd() system call
 CONFIG_SIGNALFD=y
1)オプション変更
# apt-get install libncurses-dev kernel-package # cp cp /boot/config-2.6.32-38-generic linux-3.2.8/.config # cd linux-3.2.8 # make oldconfig # make menuconfig
2)コンパイル
・Kernelリリース名
 3.2.8-custom
・出来上がるKernelファイル名
 linux-headers-3.2.8-custom_20120228_amd64.deb
 linux-image-3.2.8-custom_20120228_amd64.deb
・オプション
 CONCURRENCY_LEVEL=CPU-Core数+1
# make-kpkg clean # CONCURRENCY_LEVEL=3 make-kpkg -initrd --revision=20120228 --append-to-version=-custom kernel_image kernel_headers # # cd ../ # ll drwxrwxr-x 25 root root 4.0K 2012-02-28 22:40 linux-3.2.8/ -rw-r--r-- 1 root root 75M 2012-02-28 07:07 linux-3.2.8.tar.bz2 -rw-r--r-- 1 root root 6.8M 2012-02-28 22:31 linux-headers-3.2.8-custom_20120228_amd64.deb -rw-r--r-- 1 root root 7.7M 2012-02-28 22:30 linux-image-3.2.8-custom_20120228_8amd64.deb
出来上がり。
!!重要!!
このままKernelをインストールすると
initrd.img-3.2.8-customが作成されず、
GRUBにinitrdの指定が追記されない。
# ll /boot -rw-r--r-- 1 root root 2.1M 2012-01-04 20:57 System.map-2.6.32-38-generic -rw-r--r-- 1 root root 1.9M 2012-02-2802-28 10:50 System.map-3.2.8-custom -rw-r--r-- 1 root root 632K 2012-01-04 20:57 abi-2.6.32-38-generic -rw-r--r-- 1 root root 108K 2012-01-04 20:57 config-2.6.32-38-generic -rw-r--r-- 1 root root 67K 2012-02-28 10:28 config-3.2.8-custom drwxr-xr-x 3 root root 4.0K 2012-02-28 22:04 grub/ -rw-r--r-- 1 root root 8.0M 2012-02-27 11:16 initrd.img-2.6.32-38-generic -rw-r--r-- 1 root root 157K 2010-03-23 18:40 memtest86+.bin -rw-r--r-- 1 root root 1.4K 2012-01-04 20:57 vmcoreinfo-2.6.32-38-generic -rw-r--r-- 1 root root 3.9M 2012-01-04 20:57 vmlinuz-2.6.32-38-generic -rw-r--r-- 1 root root 3.4M 2012-02-28 10:50 vmlinuz-3.2.8-custom
initrd.img-3.2.8-customが作成されていない。
# cat /boot/grub/grub.cfg
menuentry 'Ubuntu, with Linux 3.2.8-custom-10' --class ubuntu --class gnu-linux --class gnu --class os {
        recordfail
        insmod ext2
        set root='(hd0,1)'
        search --no-floppy --fs-uuid --set e0c6d136-59ee-445a-a0f6-347d83a5c4e9
        linux   /boot/vmlinuz-3.2.8-custom-10 root=UUID=e0c6d136-59ee-445a-a0f6-347d83a5c4e9 ro   splash quiet
}
本来あるはずの「initrd /boot/initrd.img-3.2.8-custom」の記述がない。
対策方法
# mkdir -p /etc/kernel/postinst.d/ # cp -a /usr/share/doc/kernel-package/examples/etc/kernel/postinst.d/initramfs /etc/kernel/postinst.d/
新Kernelのインストール
# dpkg -i linux-image-3.2.8-custom_20120228_amd64.deb 未選択パッケージ linux-image-3.2.8-custom を選択しています。 (データベースを読み込んでいます ... 現在 63145 個のファイルとディレクトリがインストールされています。) (linux-image-3.2.8-custom_20120228_amd64.deb から) linux-image-3.2.8-custom を展開しています... Examining /etc/kernel/preinst.d/ Done. linux-image-3.2.8-custom (20120228) を設定しています ... Running depmod. Examining /etc/kernel/postinst.d. run-parts: executing /etc/kernel/postinst.d/initramfs 3.2.8-custom /boot/vmlinuz-3.2.8-custom Running postinst hook script update-grub. Generating grub.cfg ... Found linux image: /boot/vmlinuz-3.2.8-custom Found initrd image: /boot/initrd.img-3.2.8-custom Found linux image: /boot/vmlinuz-2.6.32-38-generic Found initrd image: /boot/initrd.img-2.6.32-38-generic Found memtest86+ image: /boot/memtest86+.bin done
新Kernelヘッダをインストール
# dpkg -i linux-headers-3.2.8-custom_20120228_amd64.deb 未選択パッケージ linux-headers-3.2.8-custom を選択しています。 (データベースを読み込んでいます ... 現在 63917 個のファイルとディレクトリがインストールされています。) (linux-headers-3.2.8-custom_20120228_amd64.deb から) linux-headers-3.2.8-custom を展開しています... linux-headers-3.2.8-custom (20120228) を設定しています ... Examining /etc/kernel/header_postinst.d. # # shutdown -h now
SCSIコントローラタイプを「準仮想化」
ネットワークアダプタを「VMXNET3」
にして起動します。
起動したら、再度VMware-toolsをインストールします。
時々エラー吐きますがKernelにinclude&Module化されてるので大丈夫です。
3)補足
他のDebian/Ubuntuにインストールする場合、
/usr/share/doc/kernel-package/examples/etc/kernel/postinst.d/initramfs
が存在しない(kernel-packageに含まれています)ので、
インストールしたいOS上でファイルを作り、実行権限を与えます。
#vi /etc/kernel/postinst.d/initramfs
#! /bin/sh
set -e
if [ -n "$INITRD" ] && [ "$INITRD" = 'No' ]; then
    exit 0
fi
version="$1"
vmlinuz_location="$2"
if [ -n "$DEB_MAINT_PARAMS" ]; then
    eval set -- "$DEB_MAINT_PARAMS"
    if [ -z "$1" ] || [ "$1" != "configure" ]; then
        exit 0;
    fi
fi
# passing the kernel version is required
[ -z "$version" ] && exit 1
if [  -n "$vmlinuz_location" ]; then
    # Where is the image located? We'll place the initrd there.
    boot=$(dirname "$vmlinuz_location")
    bootarg="-b $boot"
fi
# 
if which update-initramfs >/dev/null ; then
    update-initramfs -c -t -k "$version" $bootarg
fi
実行権限を与えます
# chmod +x /etc/kernel/postinst.d/initramfs
これで、Kernel、Kernel-headerをインストールすれば、OK
ちなみに僕のKernel
# cat /boot/config-3.2.8-custom|grep =y|wc -l 719 # cat /boot/config-3.2.8-custom|grep =m|wc -l 529 # cat /boot/config-3.2.8-custom-11|grep not\ set|wc -l 869
こんな感じですw
[tegaki]削りましたw[/tegaki]
いつも分かりやすく書いてあって助かります。
自分もカーネル弄って遊んでますが、ドはまりしたことも書いてあるのでびっくりしました。
コメント有難うございます。
いつもお世話になっています。
一言書いておくのを忘れました。。。
南十字さんのKernelには負けます。。。。w