This README explains how packages are added to full CDs and DVDs based
on tasks defined in tasksel.

Note that this document describes the default configuration for debian-cd.

Overview
========
One of the main factors deciding in what order packages are added,
especially for the first DVD and earlier CDs, is the definition of which
tasksel tasks should be used.

The list of packages to be added is generated dynamically at build time.
The procedure is somewhat complex and involves a number of (intermediate)
files.

The general sequence in which packages are added for "complete" images is:
1) Packages required by Debian Installer
2) Packages required to install the base system (debootstrap)
3) Any packages with priority "standard" or higher
4) Packages from tasksel tasks
   a) Packages defined as "key" packages for primary tasksel tasks
   b) Packages defined as "key" packages for language tasks (in the order:
      '<language>', '<language>-desktop', '<language>-<desktop>-desktop');
      only language desktop tasks that correspond to a primary task are
      included
   c) Regular packages from primary tasksel tasks
   d) Regular packages from language tasks
   e) Key packages from secondary tasksel tasks
   f) Key packages from language tasks corresponding to secondary tasksel
      tasks
   g) Regular packages from secondary tasksel tasks
   h) Regular packages from language tasks corresponding to secondary
      tasksel tasks
5) Other packages in the order of their popularity (popcon score)

A tasksel task is defined as "secondary" by adding a '-' after its name
in a task.list file; other tasksel tasks are "primary".

Language tasks are added grouped per type, not per language. So with three
languages (A, B, C) and 'desktop' and 'gnome-desktop' as tasks you'll get:
A
B
C
A-desktop
B-desktop
C-desktop
A-gnome-desktop
B-gnome-desktop
C-gnome-desktop

Note that <language>-desktop tasks are always sorted before any
<language>-<desktop>-desktop tasks.

Files involved
==============
Static task files (can be found in tasks/codename):
- Debian-generic or Debian-<desktop>:
  top level task file; defines order of other task files to be used,
  including task-essential-[generic|<desktop>] and
  task-full-[generic|<desktop>]
- task.list.generic or task.list.<desktop>:
  tasksel tasks to be included

Dynamically generated task files created at build time (can be found in
the subdirectory tasks under the working directory for the build):
- task.languages
  copy of the actual language list to be used to add language tasks
  (see "Language list used at build time" below)
- task.gen.[generic|<desktop>].primary:
  contains primary tasks from task.list.[generic|<desktop>] followed by
  corresponding language tasks
- task.gen.[generic|<desktop>].secondary:
  contains secondary tasks from task.list.[generic|<desktop>] and
  corresponding language tasks
- task-essential-[generic|<desktop>]:
  list of key packages based on task.gen.[generic|<desktop>].primary;
  corresponds to 3a/3b from overview above
- task-full-[generic|<desktop>]:
  list of packages based on both task.gen.[generic|<desktop>].primary and
  task.gen.[generic|<desktop>].secondary; corresponds to 3c-3h from overview
  above

The generation of these files is done early in a build by the script
tools/update_tasks.
