Bart's Blog

Now viewing: /20060410102824

Links

pictures
vimblog source

Search

Bookmarks

Tags

abiword adam apt asm ata audio bash bios board-game boot bug busybox c code debian debug desktop devel disk dpkg email firefox font fs fun gdb geode git git-find git-graft go google gpg hardware html inkscape ion3 ipsec irc irssi joke kdb kernel klips kqemu kvm laptop lastfm ldap linux lua lvm mail make meta mouse-free mpd mutt net nfs oclug ogre ols oom openswan opteron osx ottawa perl power pxe qemu raid redhat ruby sbc scm screen scsi security shell ssh svn tags talk thinkpad ubuntu uml unix urxvt usb vi video vim vimgit vpn web weechat wmii wmiirc-lua x x86 x86emu xen xen-box-setup xterm zsh

Posts

[ 20081112150409 ]
splitting patches with git

[ 20081011081638 ]
creating busybox symlinks

[ 20081002215121 ]
wmiirc-lua v0.2.5 release

[ 20080916155113 ]
git-svn strangeness

[ 20080915112959 ]
installilng git man pages quickly

[ 20080913112345 ]
wmiirc-lua v0.2.4 release

[ 20080825100454 ]
Kernel Walkthroughs - booting

[ 20080813210205 ]
Linux Kernel Booting

[ 20080719211329 ]
printable OLS/2008 schedule

[ 20080715214447 ]
wmiirc-lua updates

[ 20080713194704 ]
Git Screencast

[ 20080713143429 ]
four steps to reproducible Debian installs

[ 20080705150651 ]
USB2.0 enclosure benchmark

[ 20080703230924 ]
Linux Kernel Walkthroughs posted

[ 20080702113602 ]
Introducing the Ottawa Ruby folks to Git

[ 20080628160732 ]
Authenticating Linux against OSX LDAP directory

[ 20080627142123 ]
Canada Day Events 2008

[ 20080613162541 ]
Linux Kernel Walkthroughs

[ 20080510083828 ]
is my usb device connected to a fast port?

[ 20080509111534 ]
show more git info on zsh prompt

[ 20080430104202 ]
git-vim

[ 20080412100337 ]
color your word

[ 20080404105620 ]
show current git branch on zsh prompt (2)

[ 20080303200359 ]
how to track multiple svn branches in git

[ 20080301134220 ]
fixing X for GeodeLX

[ 20080108002540 ]
kvm nfs hang

[ 20080107160836 ]
screen -c relative path bug

[ 20080105132854 ]
WeeChat spell suggestions

[ 20071219221358 ]
show current git branch in zsh

[ 20071217141037 ]
wmiirc-lua kitchen sink repository

[ 20071212100316 ]
protecting sshd from OOM killer

[ 20071204234232 ]
wmiirc-lua v0.2.1 remembers a bit more

[ 20071013205336 ]
wmiirc-lua v0.2 has suspend and raw modes

[ 20070929112345 ]
wmiirc-lua debianization

[ 20070924104140 ]
zsh tip of the day - global aliases

[ 20070915094213 ]
wmiirc-lua v0.1.1

[ 20070913130838 ]
comparing two directories

[ 20070909204125 ]
git-rebase --interactive

[ 20070908115905 ]
zsh tab completion awesomeness

[ 20070902000736 ]
wmiirc in lua

[ 20070831150306 ]
debugging with -dbg libraries

[ 20070831142646 ]
svn status like output in git

[ 20070829141847 ]
Git Cheat Sheet

[ 20070821142038 ]
switching to abiword

[ 20070811105746 ]
forwarding ssh and X through screen

[ 20070807112531 ]
git-svnup

[ 20070724082355 ]
reducing power consumption

[ 20070722123734 ]
Makefile template

[ 20070722002649 ]
less, colourful

[ 20070719162359 ]
irssi docs

[ 20070716114553 ]
qemu eats up /dev/shm

[ 20070710214512 ]
git-clean in svn land

[ 20070705113139 ]
ipw2200 not working

[ 20070627191916 ]
git slides updated

[ 20070618220649 ]
unpopular debian packages on my system

[ 20070611125852 ]
git-svn with multiple branches

[ 20070517085321 ]
Linus on Git at Google

[ 20070510134551 ]
vim modelines insecure

[ 20070504205042 ]
bios disassembler

[ 20070504124124 ]
dd hex arguments

[ 20070503013555 ]
urxvt mouseless url yanking

[ 20070502211941 ]
gitdiff.vba v2

[ 20070419234350 ]
india

[ 20070418155857 ]
zsh fun

[ 20070418143632 ]
pipe to pastey.net

[ 20070418094151 ]
vimgrep alias

[ 20070416202545 ]
mouse-free

[ 20070406141850 ]
ATA messages via SCSI layer

[ 20070330221019 ]
GITDiff vim plugin

[ 20070329011735 ]
git presentation for OCLUG

[ 20070328123631 ]
fixing vim's [[ and ]] for bad code

[ 20070316092236 ]
pxeboot and nfsroot with debian

[ 20070312134706 ]
etc snapshots with git

[ 20070307004041 ]
remote power switch

[ 20070222215355 ]
klips-less openswan git tree

[ 20070221041316 ]
git caching for v1.5.x

[ 20070218002214 ]
klips loses zlib

[ 20070209172606 ]
vim and linux CodingStyle

[ 20070207205427 ]
my kqemu install

[ 20070204100100 ]
leaner meaner openswan

[ 20070115111917 ]
wmii+ruby xlock action

[ 20070112131252 ]
cloning xterms in wmii+ruby

[ 20070102010551 ]
wmii+ruby talk for OCLUG

[ 20061228220641 ]
dump and restore

[ 20061218100219 ]
C style

[ 20061101002027 ]
fetching all git branches from remote

[ 20061028111607 ]
local caching for git repos

[ 20061020145437 ]
automatic version creation with git

[ 20061018213306 ]
wmii w/ ruby wmiirc

[ 20061018201907 ]
small fonts

[ 20061007151802 ]
google-codesearch from vim

[ 20060928020813 ]
shell commands

[ 20060920093957 ]
letting screen apps use the ssh-agent

[ 20060908223613 ]
mpdscribble stream support

[ 20060907125149 ]
glGo on ubuntu/dapper amd64

[ 20060906163240 ]
lbdb and mutt

[ 20060902145643 ]
vim tutorial

[ 20060902135722 ]
fixing your terminal

[ 20060828124713 ]
apt-get pdiffs

[ 20060824224842 ]
256 colour xterms

[ 20060824152658 ]
dynamic IPcomp

[ 20060824145428 ]
inkscape++

[ 20060818150516 ]
tags/cscope for system headers

[ 20060805131557 ]
opteron 170, part 4

[ 20060805101941 ]
opteron 170, part 3

[ 20060803233234 ]
opteron 170, part 2

[ 20060802210126 ]
opteron 170

[ 20060729144129 ]
OLS keysigning / 2006

[ 20060728105500 ]
git-find findings

[ 20060727162941 ]
starting on git-find

[ 20060727113632 ]
git-graft and git-find brainstorm

[ 20060726224531 ]
pretty function tracing

[ 20060713174723 ]
uml and multiple network segments

[ 20060707182236 ]
lastfm artist and title to clipboard

[ 20060706162256 ]
reverting a git changeset

[ 20060629212003 ]
user #3

[ 20060628083456 ]
firefox crashes with form input

[ 20060612222204 ]
ldap account management

[ 20060612194523 ]
stupid ldap

[ 20060608092157 ]
rpm hell is right

[ 20060605095726 ]
OpenSSH VPNs

[ 20060604114317 ]
Lenovo lost a customer

[ 20060601234010 ]
generating html colourized sourcecode

[ 20060601211716 ]
ion3 greatness and acting on X selections

[ 20060526085644 ]
software RAID10 performance

[ 20060525234148 ]
learning to love git

[ 20060524121638 ]
recent vim7 articles

[ 20060516095748 ]
bootstrapping debian on my sbc

[ 20060428145140 ]
entropy injection

[ 20060423140628 ]
Adam

[ 20060414202507 ]
converting mp3s to CD

[ 20060413232836 ]
secure apt-get

[ 20060412194423 ]
xen domain0 on debian

[ 20060410220525 ]
LVM2 on RAID1 mirror

[ 20060410102824 ]
building a RHEL4 kernel w/ kdb support

[ 20060407230939 ]
xen on debian

[ 20060407230818 ]
Upgraded look

[ 20060330131334 ]
Flattered by a copy

[ 20060328165153 ]
vim7 from source

[ 20060308123539 ]
Perl, Catalyst, CPAN, and Debian

[ 20060308123302 ]
last.fm

[ 20060128124841 ]
carcassonne and zombies

[ 20060120135931 ]
Election Humour

[ 20050925130002 ]
ldap on debian

[ 20050528190034 ]
Error while mapping shared library sections

[ 20050124130158 ]
IRC over email gateway

[ 20050110225522 ]
brute force attacks sshd?

[ 20050108095026 ]
LDAP authentication (part 1)

[ 20040326082602 ]
bash vi editing mode

[ 20040305163216 ]
cool debian tools

...





RSS Feed - Full Content

Valid XHTML 1.0 Transitional

Created with Vim

Created with Perl


building a RHEL4 kernel w/ kdb support

[ link: 20060410102824 | tags: linux kernel kdb | updated: Wed, 22 Aug 2007 11:42:52 ]

Sometimes I have a need to reproduce bugs on other platforms. When that platform uses a heavily patched kernel, it makes it hard to debug. Below are some notes I took while building a RHEL4 kernel with kdb support.

1. get the kernel

It's not easy to find the kernel sources for RHEL4 if you don't have the CDs. I was working off-site so I didn't.

I finally found a security article on LinuxSecurity.com that talked about a security fix and referenced the FTP source for kernel-2.6.9-22.EL.src.rpm. I grabbed that.

2. install the rpm

This step is easy, just run rpm -i kernel-2.6.9-22.EL.src.rpm. The sources are unpacked into /usr/src/redhat directories.

3. prepare the kernel

This step unpacks the tarball and applies the millions of patches packages with the redhat kernel:

    $ rpmbuild --target=i686 -bp /usr/src/redhat/SPECS/kernel-2.6.spec

The kernel is now in /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9

4. getting the KDB patches

If you need help, read the README.

You need to get two KDB patches. One common, and one for your architecture. In my case that's i386.
(I hope that is your case too, if not email me and maybe I can help you with the conversion of the patches)

The original patches (see below) require some manual fixing.

    $ cd /usr/src/redhat/SOURCES/
    $ wget http://www.jukie.net/~bart/kernel/2.6.9-22+kdb/kdb-v4.4-2.6.9-22.EL-common-2.patch.bz2
    $ bunzip2 kdb-v4.4-2.6.9-22.EL-common-2.patch.bz2

    $ wget http://www.jukie.net/~bart/kernel/2.6.9-22+kdb/kdb-v4.4-2.6.9-22.EL-i386-1.patch.bz2
    $ bunzip2 kdb-v4.4-2.6.9-22.EL-i386-1.patch.bz2

here are the links: kdb-v4.4-2.6.9-22.EL-common-2.patch.bz2, kdb-v4.4-2.6.9-22.EL-i386-1.patch.bz2. Note that you don't apply these patches yourself, the build system will do that for you.

For reference, these are the original patches I started with:

    $ wget ftp://oss.sgi.com/projects/kdb/download/v4.4/kdb-v4.4-2.6.9-common-2.bz2
    $ wget ftp://oss.sgi.com/projects/kdb/download/v4.4/kdb-v4.4-2.6.9-i386-1.bz2

5. patching the .spec file

To build an RPM you need a spec file. The spec file shipped with the .src.rpm contains a list of all the patches that will be applied, so we just need to add the two kdb patches. Here is the diff you will have to make:

  1. add the patches into the list of patches at the end:

    after Patch10001 add:

    Patch10002: kdb-v4.4-2.6.9-22.EL-common-2.patch
    Patch10003: kdb-v4.4-2.6.9-22.EL-i386-1.patch
    
  2. add the options to pass to patch when applying our kdb patches:

    after %patch10001 add:

    # kdb-v4.4-2.6.9-22.EL-common-2.patch
    %patch10002 -p1
    # kdb-v4.4-2.6.9-22.EL-i386-1.patch
    %patch10003 -p1
    

You can just get my spec patch:

    $ cd /usr/src/redhat/SPECS/
    $ wget http://www.jukie.net/~bart/kernel/2.6.9-22+kdb/kernel-2.6.spec.patch

here is the link: kernel-2.6.spec.patch

Then apply it by running

    $ cd /usr/src/redhat/SPECS/
    $ patch -p1 < kernel-2.6.spec.patch

8. patching the configs

I added 4 lines to each of the i686 config files in /usr/src/redhat/SOURCES:

    +CONFIG_KDB=y
    +# CONFIG_KDB_MODULES is not set
    +# CONFIG_KDB_OFF is not set
    +CONFIG_KDB_CONTINUE_CATASTROPHIC=0

You can just get my config patch:

    $ wget http://www.jukie.net/~bart/kernel/2.6.9-22+kdb/kernel-2.6.9-i686-configs.patch

here is the link: kernel-2.6.9-i686-configs.patch

Then apply it by running

    $ cd /usr/src/redhat/SOURCES/
    $ patch -p1 < kernel-2.6.9-i686-configs.patch

7. building the rpm packages

To build both source and binary packages run:

    $ rpmbuild --target=i686 -ba /usr/src/redhat/SPECS/kernel-2.6.spec

The final products will be stored in /usr/src/redhat/RPMS/i686/ and /usr/src/redhat/SRPMS/. Should something fail you can review the tree in /usr/src/redhat/BUILD/kernel-2.6.9/linux-2.6.9 to see if you can fix it.

Note that this will build a 2.6.9-22.EL.root kernel. There is probably a good reason for including the user name of who built it. Eh, whatever.

This is what I get in the end:

    /usr/src/redhat/RPMS/i686/:
    total 40M
    9.9M kernel-2.6.9-22.EL.root.i686.rpm
    3.7M kernel-devel-2.6.9-22.EL.root.i686.rpm
    9.5M kernel-hugemem-2.6.9-22.EL.root.i686.rpm
    3.8M kernel-hugemem-devel-2.6.9-22.EL.root.i686.rpm
    9.6M kernel-smp-2.6.9-22.EL.root.i686.rpm
    3.7M kernel-smp-devel-2.6.9-22.EL.root.i686.rpm

    /usr/src/redhat/SRPMS:
    total 40M
    40M kernel-2.6.9-22.EL.root.src.rpm

8. installing the new rpms

To install the new package simply run

    $ cd /usr/src/redhat/RPMS/i686/
    $ rpm -i kernel-2.6.9-22.EL.root.i686.rpm kernel-devel-2.6.9-22.EL.root.i686.rpm

(I install the devel packages because I am building 3rd party modules against it)

I am not sure if this updates /etc/grub.conf. Check it. Make sure you have something like this:

    title Red Hat Enterprise Linux AS (2.6.9-22.EL.root)
            root (hd0,0)
            kernel /boot/vmlinuz-2.6.9-22.EL.root ro root=LABEL=/1 rhgb quiet
            initrd /boot/initrd-2.6.9-22.EL.root.img

Then cross your fingers and reboot.

9. using kdb

Read the Inside the Linux kernel debugger article from IBM.





Bart Trojanowski
http://www.jukie.net/~bart
bart@jukie.net