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: '', '-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 (as in 4) e) Any packages from secondary tasksel tasks f) Any 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 -desktop tasks are always sorted before any --desktop tasks. Files involved ============== Static task files (can be found in tasks/codename): - Debian or Debian-: top level task file; defines order of other task files to be used, including task-essential[-] and task-full[-] - tasksel_d-i.languages: list of languages used to add language tasks at build time (see detailed explanation below) - task.list or task.list.: 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.list[.].essential: contains primary tasks from task.list[.] followed by corresponding language tasks - task.list[.].full: copy of task.list[.].essential; followed by secondary tasks from tasks from task.list[.] and corresponding language tasks - task-essential[-]: list of key packages generated using task.list[.].essential; corresponds to 3a/3b from overview above - task-full[-]: list of packages generated using task.list[.].full; corresponds to 3c-3f from overview above The generation of these files is done early in a build by the script tools/update_tasks. The file /tasksel_d-i.languages ========================================= This file contains the superset of all languages that have language tasks in the version of tasksel. The list should contain the language names as used in tasksel. Any languages that are not supported in the version of Debian Installer should be commented out. Reason is that it makes no sense to include them on early CDs as they will never be used during installations and thus the space can be better used for other packages. The following procedure can be used to update the language list: - delete the current list of languages (leaving leading comments) from /tasksel_d-i.languages - get the current source for tasksel and do: $ cd tasks $ grep -l "Test-lang" * | sed "s/-desktop//" | sort -u - add the resulting list to /tasksel_d-i.languages - check what languages are supported in the version of localechooser for by checking the file 'languagelist' in its source - comment out any languages not supported by localechooser (either not present or commented out in 'languagelist') - check the diff between the old and new version and double check any changes Language list used at build time ================================ The language list that is used to add languages tasks is a copy of tasks/$DI_CODENAME/$TASKSEL_LANGLIST. By default TASKSEL_LANGLIST is set to 'tasksel_d-i.languages' (see CONF.sh). Note that the file is taken based on DI_CODENAME and not CODENAME! Reason is that if those differ DI_CODENAME will almost always be the "newer" release and it is better to have a list that reflects the languages supported by the version of Debian Installer that is used, especially since any languages not supported by the CODENAME version of tasksel will be filtered out automatically by the tools/update_tasks script. Using a custom language list ---------------------------- In some cases it may be desirable to only include a subset of the language tasks available in tasksel. For example if you're building images for a derived distribution targeted at a specific language or set of languages and would prefer to not waste space on language-specific packages that would never be used but instead include as many "regular" package as possible. In that case you should create a custom language list file. We'd suggest to create it in one tasks/ directory and add symlinks in other tasks/ directories. Then change TASKSEL_LANGLIST in CONF.sh to use your custom list. Another option is to set 'TASKSEL_LANGLIST=empty' and add the desired language tasks (note: the full task names, not just the language names!) to all relevant task.list* files.