Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
soc:2009:pravin:journal:ubuntubko [2009/06/25 13:36] less1 |
soc:2009:pravin:journal:ubuntubko [2009/07/27 05:26] (current) less1 |
||
---|---|---|---|
Line 2: | Line 2: | ||
===== Locating from where does the nfsboot is getting called ===== | ===== Locating from where does the nfsboot is getting called ===== | ||
- | - //do_nfsmount// function is getting called from ///scripts/casper +188// | + | ==== Mistory of do_nfsmount ==== |
- | - //do_nfsmount// is defined at two places, why? | + | //do_nfsmount// is defined at two places, why?\\ |
- | - My guess is that file //script/nfs// is not used, it is just present there. | + | - ///scripts/casper +198// |
+ | - ///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 <code>do_netmount()</code> and depend on variable <code>${NETBOOT}</code> | ||
+ | |||
+ | 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 | ||
+ | <code> | ||
+ | qemu -cdrom /var/www/ubuntu-9.04-desktop-i386.iso -net nic -net user | ||
+ | </code> | ||
+ | It gives error gives error : | ||
+ | <code> | ||
+ | [ 3.284007] ..MP-BIOS bug: 8254 timer not connected to IO-APIC | ||
+ | </code> | ||
+ | and freezes.\\ | ||
+ | I am using following version of qemu | ||
+ | <code> | ||
+ | $ qemu | ||
+ | QEMU PC emulator version 0.10.0, Copyright (c) 2003-2008 Fabrice Bellard | ||
+ | </code> | ||
+ | The BIOS number was found | ||
+ | and BIOS version used by qemu is as follows | ||
+ | <code> | ||
+ | QEMU BIOS - build: 08/15/08 | ||
+ | $Revision: 1.209 $date: 2008/06/02 20:08:10$ | ||
+ | </code> | ||
+ | |||
+ | I had to update my qemu to version 0.10.5 then it started working | ||
+ | <code> | ||
+ | $ qemu | ||
+ | QEMU PC emulator version 0.10.5, Copyright (c) 2003-2008 Fabrice Bellard | ||
+ | </code> | ||
+ | ===== SQUASHFS error ===== | ||
+ | |||
+ | 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. | ||
+ | <code> | ||
+ | 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 | ||
+ | </code> | ||
+ | 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 | ||
+ | <code> | ||
+ | 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 ... | ||
+ | Done. | ||
+ | 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 | ||
+ | |||
+ | </code> | ||
+ | |||
+ | Got some information about this error on [[http://wiki.debian.org/initramfs/More|debian wiki]] | ||
+ | which says that | ||
+ | <code> | ||
+ | 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.) | ||
+ | </code> | ||
+ | |||
+ | 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? | ||
+ | |||
+ | - 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. | ||
+ | - comparing ''d/bin/run-init'' with ''u/bin/run-init'', --- they are same. | ||
+ | - 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 | ||
+ | - 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? | ||
+ | - My guess is that, ''overmount /'' may fail. | ||
+ | - Now, I need to locate the source code of run_init.c | ||
+ | |||
+ | ===== Ubuntu over iscsi ===== | ||
+ | - Following the line of [[BKODebianISCSI|Debian over iscsi]], attempted the Ubuntu over iscsi, but it did not worked. | ||
+ | |||
+ | |||
+ | ===== Problem found ===== | ||
+ | - From the progress in fedora, it seems that problem is because network is restarting itself, which kills the the network and mounted HTTPFS. Culprits are | ||
+ | - ''/etc/init.d/network'' | ||
+ | - ''/etc/init.d/NetworkManager'' | ||
+ | |||
+ | ===== Solution ===== | ||
+ | The temporary hack implemented is **Delete these two files** before doing ''run-init''. This hack works fine in this case, only problem is that the ''/etc/resolver.conf'' | ||
+ | entry remains empty so dns resolving does not work. Need to fix this soon. | ||