Note: these instructions are as of today outdated. They refer to Ubuntu Breezy Badger, and are not valid starting with Dapper Draker.
NNote: they might just work with Alternate CDs, but I never tried..
To keep others from trying this hard, I documented the process here (note: most this steps usually need a bit of tinkering till they work right, but if you are up for the whole process, then I bet you'll get them right on your machine):
A slightly easier approach (I found this out recently):
1. install & boot the kernel you wish to install on the d-i disk
2. install kernel-wedge (the kernel splitter, this turns your modules into udebs)
$ apt-get install kernel-wedge
3. install a source for linux-kernel-di-i386-2.6 (this holds the rules to make the udebs)
$ apt-get source linux-kernel-di-i386-2.6
4. prepare all is needed
$ apt-get build-dep linux-kernel-di-i386-2.6
5. configure the process
in linux-kernel-di-i386-2.6/kernel-version change the lines to read your current version:
(in my case I had to use:
#arch version flavour installedname suffix build-depends
i386 2.6.12 magma 2.6.12-magma - linux-image-2.6.12-magma (>= 2.6.12-magma-cjr12)
next we generate the debian/control file:
$ kernel-wedge gen-control > debian/control
6. start the splitting
$ dpkg-buildpackage
6.1 this actually caused a bit of problems for me, as some modules were missing
(open the modules/foo file which specifies them, and add a ' ?' at the end).
example:
modules/i386/acpi-modules (*)
fan ?
thermal ?
(*) this actually includes /usr/share/kernel-wedge/modules/i386/acpi-modules, but you get the idea
6.2 another problem I had was that some modules weren't specified at all,
so they were pulled as dependencies into more than one udeb, causing an error at kernel-wedge check.
I had to look for the name, for the udebs that ended up having it and at 'package-list',
then I looked for a common package (in my case firmware-modules) and put the offending module in there
/usr/share/kernel-wedge/modules/i386/firmware-modules reads 'firmware_class'
The step #6 I had to repeat quite a few times till I got it right, but unlike the hard way, you
don't compile anything so it goes fairly fast. In this process, I eventually downloaded a more recent
linux-kernel-di-i386-2.6 package from SVN, and a more recent kernel-wedge from the debian repository.
7. build the CD (follow steps 8-12 from the 'Hard way')
The Hard way
1. get a fresh source for building kernels:
$ apt-get source linux-source-2.6.12
this will download 3 files
(linux-source-2.6.12_2.6.12-10.32.dsc,
linux-source-2.6.12_2.6.12-10.32.tar.gz,
linux-source-2.6.12_2.6.12-10.32.diff.gz)
the linux-source-2.6.12 sources will be automatically extracted in the following dir:
`pwd`/linux-source-2.6.12-2.6.12/
2. get the adeos patch from gna.org, copy to linux-source-2.6.12/debian/patches/
make file.dpatch from the .patch
(for that I added:
#!/bin/sh -e
. $(dirname $0)/DPATCH
@DPATCH@
on top of the file, and renamed to .dpatch)
3. update debian/changelog using:
$ dch -i
4. put the patch into debian/patches/00list-10.32 (the latest one,
if you made a new version with dch above, then copy the last 00list-* under this name, and edit):
hal-linux-2.6.12-i386-r12.dpatch (I added this line as the last one)
5. disable the builds you don't want (I only wanted to build for i386 here):
$ cd debian/config/i386
$ mkdir disabled
$ mv * disabled
$ mv disabled/386 .
6. update the kernel configs:
debian/config/i386/386 (for the 386 kernel)
debian/config/i386/686-smp (for the 686-SMP kernel)
etc.
7. run debuild to build everything (prepare to wait a while..)
debuild
8. I got an error by debuild at some point:
+vmlinux zone_table 0x00000000
make: *** [build] Error 1
debuild: fatal error at line 765:
dpkg-buildpackage failed!
after asking smarter people (Ben Collins), it seems I have an ABI bump, and I needed to run:
$ echo "Yes" > debian/abi/i386.ignore
9. after you have the udebs built, you need to rebuild the vmlinuz & initrd image for d-i
to do that you need to get debian-installer
$ sudo apt-get build-dep debian-installer
$ sudo apt-get source debian-installer
next copy the udebs to debian-installer-version/build/localudebs/
and configure debian-installer for the new version :
build/config/i386.cfg (put the kernel version here)
build the new d-i images
either using debuild, or (like me:
$ cd build/
$ make build_cdrom_isolinux
10. get the fresh built files from
build/dest/cdrom:
initrd.gz
initrd.list
vmlinuz
11. the next few steps are for an Ubuntu Live CD, so on your own CD they might differ
copy the initrd, initrd.gz & vmlinuz to
install/
copy the udebs to the proper place
pool/main/l/linux-source-2.6.12
rebuild the Packages
$ apt-ftparchive packages pool/main > dists/breezy/main/debian-installer/binary-i386/Packages
$ apt-ftparchive packages pool/main | gzip > dists/breezy/main/debian-installer/binary-i386/Packages.gz
rebuild the Release
$ rm dists/breezy/Release* (this also takes care of the .gpg)
$ apt-ftparchive release dists/breezy > dists/breezy/Release
12. make the new iso & burn it
(follow https://wiki.ubuntu.com/LiveCDCustomizationHowTo)