BCCD:Fossilizing
Contents
Fossilizing the BCCD
This section outlines the steps required to disassemble a BCCD ISO, manifest it on a hard disk drive, and boot from that hard drive. Most or all of this must be done as root.
Mount the Images
The Basic Images
cd /mnt # or where ever mkdir bccd mount -t iso9660 -o loop bccd-ppc-2005-08-30T00-0500.iso bccd # on PPC mkdir initrd gunzip < bccd/boot/root.bin > initrd.ext2 mount -t ext2 -o loop initrd.ext2 initrd # on x86 mkdir lnx mount -o loop bccd/lnx.img lnx mkdir root gunzip < lnx/root.bin > root.ext2 mount -o loop root.ext2 root
The singularity
First, decompress the singularity with the cloop utility extract_compressed_fs
:
wget http://developer.linuxtag.net/knoppix/sources/cloop_0.66-1.tar.gz tar xzf cloop_0.66-1.tar.gz cd cloop-0.66 vim Makefile # add APPSONLY=1 at the top make zcode make extract_compressed_fs ./extract_compressed_fs ../bccd/singularity > ../singularity.romfs cd ..
The latest currently-available version of cloop (2.01) doesn't work for this purpose; others might (I didn't experiment), but 0.66 definitely does.
Next, mount the singularity (you must have romfs support compiled into the kernel):
mkdir singularity mount -t romfs -o loop singularity.romfs singularity
Extract the singularity
cd singularity tar cf - . | (cd /path/to/destination/partition;tar xvf -)
Create a working initrd
Create an initrd for fossilized booting with the linuxrc at http://ppckernel.org/~tmcnulty/bccd/linuxrc:
cd /mnt/root # or where ever you mounted root.ext2 (from root.bin) wget http://ppckernel.org/~tmcnulty/bccd/linuxrc # replace the existing linuxrc chmod a+x linuxrc cd .. umount root gzip < root.ext2 > /path/to/destination/partition/boot/root.bin
Edit singularity-init
Add / remount read-write hook
Edit /sbin/singularity-init
to remount / read-write during init, using the following command:
debug "Remounting / read-write..." mount -o rw,remount /dev/root /
This can be placed somewhere around the proc mount command.
Add network setup to singularity-init
ifconfig eth0 inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255 up route add default gw 192.168.10.1 eth0
Configure the bootloader
Configure your bootloader (e.g., yaboot, lilo, or grub) as follows:
- boot the kernel
/boot/vmlinux
on PowerPC or/boot/bzImage
on x86 - use the initrd
/boot/root.bin
- execute the init script
/linuxrc
.
Here is a sample lilo.conf.
Setup Compatibility Nodes
Add the following to /linuxrc:
- /sbin/devfsd /dev
TODO
- fix the mounting commands so that / is only mounted once (?)
- decide how to handle directories like /etc that are mounted in ram at /dev/rw/etc and populated with items from /etc.ro (leave as is, or create a script to simplify the setup for hard disk booting?)
- Kevin's done this, we just need to document
- modify init scripts to make them appropriate for hard disk booting (e.g., remove the "Enter a password for the default user" prompt)
- finish setting up networking
- create a patch against the original singularity image for /sbin/singularity-init and other modified configuration files for automating the fossilize process
- package up any binary additions with list-packages (see the package instructions in the wiki)
- last but not least, keep track of all the changes we make!
Good luck! Direct questions and comments to tmcnulty@ppckernel.org.