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.