カーネルの再構築をやってみた。
今回は、2.6.38.5を使います。
http://www.kernel.org/
もう、3でてるのに。。。w
OS・・・Ubuntu 10.04 LTS 64bit
変更・・CPU関係でもやりますか。
# uname -r
2.6.32-31-generic
# apt-get install kernel-package libncurses5-dev
# cd /usr/src/
# wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.5.tar.bz2
# tar xf linux-2.6.38.5.tar.bz2
# cd linux-2.6.38.5
# cp /boot/config-2.6.32-31-generic .config
# make oldconfig
# make menuconfig
Processor type and features >
Processor family => Core 2/newer Xeon
Timer frequency => 100HZ
# vi Makefile
EXTRAVERSION = .5-esxi4.1
# make-kpkg clean
# CONCURRENCY_LEVEL=3 make-kpkg -initrd -revision=20110506 kernel_image kernel_headers
# cd ../
# dpkg -i linux-headers-2.6.38.5-esxi4.1_20110506_amd64.deb
# dpkg -i linux-image-2.6.38.5-esxi4.1_20110506_amd64.deb
Timer frequency・・物理環境だと1000HZにした方が良いらしい?
(仮想だと100HZじゃないと時刻がずれる)
EXTRAVERSION・・「uname -r」したときに表示される。
CONCURRENCY_LEVEL・・・・make -j[3]になる(CPU数+1)
revision・・・・・・・・・出来たファイル名に付加される。
ここからは、僕の環境だけかもしれません。。。
この時点ではなぜか、initrdが作られてない。。。
なので、手動で作成します。
# cd /boot/ # ls System.map-2.6.32-31-generic initrd.img-2.6.32-31-generic System.map-2.6.38.5-esxi4.1 memtest86+.bin abi-2.6.32-31-generic vmcoreinfo-2.6.32-31-generic config-2.6.32-31-generic vmlinuz-2.6.32-31-generic config-2.6.38.5-esxi4.1 vmlinuz-2.6.38.5-esxi4.1 grub
initrd.img-2.6.38.5-esxi4.1がありません。。。。
作成しましょ
# mkinitramfs -o initrd.img-2.6.38.5-esxi4.1 2.6.38.5-esxi4.1 # ls System.map-2.6.32-31-generic initrd.img-2.6.32-31-generic System.map-2.6.38.5-esxi4.1 initrd.img-2.6.38.5-esxi4.1 abi-2.6.32-31-generic memtest86+.bin config-2.6.32-31-generic vmcoreinfo-2.6.32-31-generic config-2.6.38.5-esxi4.1 vmlinuz-2.6.32-31-generic grub vmlinuz-2.6.38.5-esxi4.1
これでinitrd.img-2.6.38.5-esxi4.1が作成されました。
で、分からなかったのが「/boot/grub/menu.lst」が無い。
ググりました。。。
# view /etc/default/grub # If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="splash quiet" GRUB_CMDLINE_LINUX=""
とある。
見てみよう。
# view /boot/grub/grub.cfg
menuentry 'Ubuntu, with Linux 2.6.38.5-esxi4.1' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 31424221-1eda-4070-9ca5-1aea25a1df15
linux /boot/vmlinuz-2.6.38.5-esxi4.1 root=/dev/sda1 ro splash quiet
}
menuentry 'Ubuntu, with Linux 2.6.38.5-esxi4.1 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 31424221-1eda-4070-9ca5-1aea25a1df15
echo 'Loading Linux 2.6.38.5-esxi4.1 ...'
linux /boot/vmlinuz-2.6.38.5-esxi4.1 root=/dev/sda1 ro single
echo 'Loading initial ramdisk ...'
}
あれ。。。。initrdが指定されてない??
直接編集してもいいのですが、いろいろググルと
/boot/以下にあるファイルを認識して自動的に
「/boot/grub/grub.cfg」を再作成してくれる、
「update-grub」なるコマンドがあるらしい。
# update-grub update-grub Generating grub.cfg ... Found linux image: /boot/vmlinuz-2.6.38.5-esxi4.1 Found initrd image: /boot/initrd.img-2.6.38.5-esxi4.1 Found linux image: /boot/vmlinuz-2.6.32-31-generic Found initrd image: /boot/initrd.img-2.6.32-31-generic Found memtest86+ image: /boot/memtest86+.bin done
できたらしい。
再度見てみる。。
# view /boot/grub/grub.cfg
menuentry 'Ubuntu, with Linux 2.6.38.5-esxi4.1' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 31424221-1eda-4070-9ca5-1aea25a1df15
linux /boot/vmlinuz-2.6.38.5-esxi4.1 root=UUID=31424221-1eda-4070-9ca5-1aea25a1df15 ro splash quiet
initrd /boot/initrd.img-2.6.38.5-esxi4.1
}
menuentry 'Ubuntu, with Linux 2.6.38.5-esxi4.1 (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod ext2
set root='(hd0,1)'
search --no-floppy --fs-uuid --set 31424221-1eda-4070-9ca5-1aea25a1df15
echo 'Loading Linux 2.6.38.5-esxi4.1 ...'
linux /boot/vmlinuz-2.6.38.5-esxi4.1 root=UUID=31424221-1eda-4070-9ca5-1aea25a1df15 ro single
echo 'Loading initial ramdisk ...'
initrd /boot/initrd.img-2.6.38.5-esxi4.1
}
無事、記述されました。
これで再起動しましょう。
もし、Kernelパニックで起動出来なかったら、
「Shift」を押しながら起動すれば、Grubメニューが表示されます。
$ uname -r 2.6.38.5-esxi4.1
僕の場合はESXi上の仮想OSなので、
このあと、再度vmware-toolsをインストールしました。
(Kernel-headerを再度インストールしたのは内緒。。)
いらなくなったら、
# dpkg -r linux-headers-2.6.38.5-esxi4.1 # dpkg -r linux-image-2.6.38.5-esxi4.1 # cd /boot # rm *esxi4.1* # update-grub
この方法でいいのかしらw
[tegaki]Kernel-3.0でやらないとなぁ[/tegaki]