Ubuntu 10.04 LTSでKernel再構築

カーネルの再構築をやってみた。

今回は、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]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Enter code * Time limit is exhausted. Please reload CAPTCHA.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください