カーネルの再構築をやってみた。
今回は、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]