This is an old revision of the document!

Booting Ubuntu with BKO

Locating from where does the nfsboot is getting called

Mistory of do_nfsmount

do_nfsmount is defined at two places, why?

  1. /scripts/casper +198
  2. /scripts/nfs +8

My guess is that file /scripts/nfs is not used, it is just present there from older versions and has not been removed.

do_nfsmount function is getting called from /scripts/casper +188 which is from inside of


and depend on variable


The do_netmount() is getting called from mountroot() which is inside /scripts/casper +581 and the call depends on variable presense of variable ${NETBOOT} which is the boot parameter value of parameter netboot

qemu + ubuntu 9.04 Desktop i386 booting problem

ubuntu-9.04-desktop-i386.iso is refusing to boot over qemu. I am using command line

qemu -cdrom /var/www/ubuntu-9.04-desktop-i386.iso -net nic -net user

It gives error gives error :

[  3.284007]  ..MP-BIOS bug: 8254 timer not connected to IO-APIC

and freezes.
I am using following version of qemu

$ qemu
QEMU PC emulator version 0.10.0, Copyright (c) 2003-2008 Fabrice Bellard

The BIOS number was found and BIOS version used by qemu is as follows

QEMU BIOS - build: 08/15/08
$Revision: 1.209 $date: 2008/06/02 20:08:10$

I had to update my qemu to version 0.10.5 then it started working

$ qemu
QEMU PC emulator version 0.10.5, Copyright (c) 2003-2008 Fabrice Bellard


I am getting following errors in the process of booting. My guess is, most of these errors are related to failure of httpfs in providing requested logical block, but I need to confirm this.

Buffer I/O error on device loop0, logical block 272374
SQUASHFS error: sb_bread is failed reading block 0x845d5
SQUASHFS error: unable to read fragment cache block [211696cb]
SQUASHFS error: unable to read page, block 211696cb, size c115

I have seen this error before, but if I retry the booting then it works. But now, I have failed two consecutive time on local webserver, which is quite alarming.

Ubuntu revisited (in way of debian)

I was preparing to write an email to ubuntu mailing list, here is what I assembled for that email

I have tried booting Knoppix and debian over HTTP, and they work fine.
But I have problem in booting Ubuntu (ubuntu-9.04-desktop-i386.iso) over HTTP.

The procedure followed to boot linux over HTTPFS by me is as follows.
I get hold of ISO of live CD, and get the kernel, initramfs and 
filesystem.squashfs from it.
I host ISO of live CD and "filesystem.squashfs" on webserver.
I modify initramfs to include httpfs and related tools and modules.
I modify "/init" ( "/scripts/casper" in case of ubuntu ) to use httpfs 
for mounting. 
I pass boot parameter "httpfs=http://ip-of-webserver/filesystem.squashfs" 
or "httpfs=http://ip-of-webserver/ubuntu-9.04-desktop-i386.iso"

I have attempted booting with both livecd.iso and filesystem.squashfs.
In both cases, I get different errors.

I know that filesystem is getting mounted with HTTPFS. 
I have verified it from the rescue shell.
I get this rescue shell by executing wrong command in initramfs. 

When I mount "ubuntu-9.04-desktop-i386.iso" I get following error
Buffer I/O error on device loop0, logical block 272374
SQUASHFS error: sb_bread is failed reading block 0x845d5
SQUASHFS error: unable to read fragment cache block [211696cb]
SQUASHFS error: unable to read page, block 211696cb, size c115

Then I tried to use debian way of mounting "filesystem.squashfs" for booting.
I get error
Begin: Running /scripts/init-bottom ...
run-init: nuking initramfs contents: Directory not empty
Kernel panic - not syncing: Attempted to kill init!
Dumping ftrace buffer:
	(ftrace buffer empty)

My guess is that, this error is triggered because when "/bin/run-init" 
tries to remove initramfs and fails to remove some file. Most probably it 
can be /dev/loop0 as it is in use by loopback mount command.

I checked debian code, the use of loopback is avoided there.
So, I am doing the same for ubuntu now. 
I wont use loopback and see if it works.

I was wondering what I am doing wrong as the same method works fine with debian.
And when I try to mount ISO itself, I get kernel panic

Got some information about this error on debian wiki which says that

When switching another root device, initrd would pivot_root and then umount the ramdisk. But initramfs is rootfs: 
you shouldn't pivot_root rootfs and can't unmount it. Just delete everything out of it (except the new block device node, if any),
 overmount /, and exec the new init. (The klibc package contains a helper program in utils/run_init.c to do this for you, 
and other packages have adopted this as switch_root.) 

Now, I don't know for sure, which files are not getting deleated and hence causing problem.

A question

what is the differnece between debian script and ubuntu script that filesystem.squashfs is not working with ubuntu, but it works with debian?

  1. comparing d/scripts/live with u/scripts/casper — too different, diff went crazy with this command. They are as good as seperate program who do similar work.
  2. comparing d/bin/run-init with u/bin/run-init, — they are same.
  3. comparing d/init with u/init – not much of difference

This approach is not working for me, I will try another approach.

analyzing run_init.c

My guess is that, run_init.c is the one who is dying, and it seems he does allow you to specify the files which should not be deleted. I want to see how to tell that to run_init.c

  1. Another thing that I want to try out is, what if I dont delete the contents of initramfs? I will remove that check from run_init.c will system still boot?
    1. My guess is that, overmount / may fail.
  2. Now, I need to locate the source code of run_init.c

QR Code
QR Code soc:2009:pravin:journal:ubuntubko (generated for current page)