To try to pull everything together, I will walk through a complete install,
explaining what the user sees and what is going on behind the scenes. This
is a pretty long document, and it's just an example -- none of the details
really matter. I hope it gives readers an idea about how everything can fit
together.

First, the system boots up.

This particular machine cannot boot of its CD ROM for some reason, so the
user is booting off of a floppy. The kernel loads a ramdisk off the floppy.
In the filesystem are several preinstalled modules (a core module, a UI, a
busybox shell environment, a dpkg module, and two retriever modules).

The kernel runs init.

Init figures out what UI to use, and configures the UI. In this case,
it's a simple text UI rather like the current installer UI.

The UI displays a menu of available languages. User chooses some language.

The UI prompts the user to see if they have a color screen.

The UI prompts the user to configure the keyboard.

Control passes back to init, which assembles the main menu. The main
menu currently looks like:

- Configure installation media
- Reboot the system
- Run a shell

It runs each testprog in turn, and the first testprog returns 0, indicating
that item should be default.

The menu is then displayed to the user, who picks the default item.

The program associated with the item is now run. The program looks to see
what retriever modules are available in
/usr/lib/debian-installer/retriever/. There happen to be two: a cdrom
retriever and a floppy retriever. It generates a menu listing them and
prompts the user to pick their install media. They pick cdrom.

All the modules the cdrom retriever depends on are configured. It depends on 
only one, a cd driver module.

That module, when configured, goes out and probes for cd roms. It is 
prepared to ask the user what kind of cd they have if the probe fails, 
but luckily they have a modern cd drive, and it is easily autodetected.

The cdrom retriever itself is now configured. It mounts the cd, and tries
to find a debian archive on it. Since this is an official cd, it finds one
in the first place it looks.

With configuration of the retriever complete, control passes back to the 
"configure installation media" program. 

The program sees that it now has installation media configured, but before
exiting, it asks the cdrom retriever to retrieve a Packages file.

It calls another program to parse the file, and get a list of available
modules on the CD. It then asks the retriever to download them each in
turn, and unpacks (but doesn't configure) each of them. A bunch of modules
are unpacked (including a hard drive driver module, a partitioning module, a
disk formatter and mount module, a swap setup module, a base system installer
module, a lilo installer module, and a rescue floppy creator module). Then it
exits.

It is time to display the menu again, but a bunch of new modules have 
installed menu control files, so it has now grown to look like this:

- Configure installation media
- Partition disk
- Setup swap
- Format and mount partitions
- Install base system
- Install lilo
- Make a rescue floppy
- Reboot the system
- Run a shell

Once more, each testprog is run in turn. The first one sees that the
installation media are configured, and returns 1. The next one sees that
disks have not been partitioned, and returns 0, making that menu item the
new default.

The user decides to run a shell this time, so the associated program is
run. It switches to a fresh VT, displays info about getting back to the
menu, and runs the shell.

The menu is them redisplayed. The second menu item again becomes the
default. Eventually the user switches back to this VT and selects it, so
it's time to partition the disk.

All the modules the disk partitioner depends on are configured. It depends
on only one, a hard disk driver module.

That module, when configured, probes for hard disks. It finds an IDE disk.

The disk partitioner is run. It sees that there is an IDE disk, and walks
the user through partitioning it.

The main menu is displayed gain. The third menu item becomes the default,
and the user picks it, so it's time to set up swap. 

This is a pretty trivial process, and once it's completed, it's back to the
menu, where format and mount partitions becomes default and is selected by
the user.

The user made 2 partitions, plus the already set up swap partition.
The partitions are formatted, and the user is asked where each should be
mounted.

Back to the menu, where "install the base system" becomes the default, and
is picked by the user. This makes the base system installer module run.

This module sets up a fifo and causes the base system to be retrieved to the
fifo. As the CD retriever does that, another process runs, reading from the
fifo and unpacking the base system to the destination filesystem.

With the base system installed, a few more things are set up, like the
fstab file.

Then it's back to the menu, where "install lilo" is the default, and is
selected.

Installing lilo also involves setting up an initrd that will be used to
load drivers for stuff like the disk into the kernel when it boots.

Back to the menu, where make a rescue floppy is default. The user skips
that step and chooses to reboot the system.

The system boots back up.

The kernel loads its initrd, which loads a few modules into the kernel, and
mounts the real root filesystem. Normal bootup proceeds, into a full debian
system.

Init runs dpkg-reconfigure on several packages that need to be configured
on a fresh install, rather like base-config works now.
	- One of these packages prompts for a root password and sets up a
	  normal user.
	- Another configures X.
	- Another detects the sound card and sets that up.
	...

The user sees a login prompt.

