The following is a little overview of the way Debian's boot floppies
work.  This is not a detailed description about the installation --
that can be found under the 'documentation' directory.  Rather, the
following gives an overview of the boot-floppies from a programmer's
perspective.

The following are the main steps of the installation process.  We try
to indicate what pieces of code are responsible for these steps.

- a boot loader starts a kernel with a root disk image as an initial
   RAM disk.  Note that this part of the installation is very
   system-dependent.

- A program called 'dbootstrap' is run from that root disk image.
   A shell may also be run on the second virtual console, and the root
   disk image contains a full set of tools for an expert to be able to do
   the installation "the hard way". That's why the boot disk is called the
   "rescue" disk.

- dbootstrap is used for the following:
   + partition the disks
   + initialize and activate swap and target partitions (using a set of
     tools linked into a sort of swiss-knife tool called busybox)
   + install kernel and modules: they may be installed from floppies,
     CD, local disk or the network
   + activate needed modules (ethernet card driver, PCMCIA subsystem...)
   + configure the network
   + install the base system -- The base system is a minimal set of
     essential packages that any Debian system needs to be able to boot
     and install other packages. It may also be installed from
     floppies, CD, local harddisk or network.
   + make the harddisk bootable and/or make a boot floppy
   + reboot

- After the system reboots, 'base-config' is run automatically. It
   does a few other "simple tasks" like setting root's passwd,
   activating shadow passwords, creating a non-root user, etc.
   'base-config' also prompts for the archive location and the means
   the user is going to use to install the rest of the system.  The
   user at this point can either use "simple" installation (tasksel
   and apt), or the "advanced" option, which goes right into dselect.

- tasksel lets the user choose one of the sets of task packages to
   install.  The user may skip this step and select the packages one
   by one using dselect "Select" menu.  Users can run tasksel anytime
   after installation it they want to add another task.  'apt-get'
   will be invoked automatically at this point and the selected tasks
   as well as "standard" level packages will be installed.

- dselect is still Debian's most mature front-end to the package
   installation tool, dpkg. It's not just a tool for first
   installations, but it may be used later anytime the user wants to
   update/install/remove some packages.  However, it was built when
   there were less than 500 packages, and it doesn't scale so well to
   the thousands and thousands we now have.  Therefore, it is provided
   for users who want to pick and choose their packages individually.

- After leaving dselect the common "login:" prompt will be shown. The
   installation is finished.

Now about the stages. With our current implementation we may divide
the installation in two stages:

- In the first stage a basic system is installed and configured:
   dbootstrap, base installation, manipulation of the boot loader, and
   some simple tasks which are minimized as much as possible.

- The second stage comprises base-config, tasksel, apt-get, dselect,
   and of course the packages themselves which are subsequently
   installed.  This stage includes any installation or configuration
   of any stuff after that first reboot into the new base system.

The boot-floppies team works just on the "1st stage" tools. The "2nd
stage" tools are maintained by other teams.  Note that the tasksel and
base-config teams are highly overlapping with the boot floppies team,
so <debian-boot@lists.debian.org> is as good a place as any to
discuss them.  For other bug reports or offers to help, you'll have to
track down the right package(s) and mailing lists.

Please send comments or suggestions to <debian-boot@lists.debian.org>.

						Enrique Zanardi
						<ezanard@debian.org>

