Author: | Sergio Talens-Oliag |
---|---|
Contact: | sto@debian.org |
Date: | 2006-01-30 00:34:25 +0100 (dl, 30 gen 2006) |
There is a lot of people working on Custom Debian Distributions, but it seems that everyone is reinventing the wheel to do it.
This document describes the design of a Toolkit that tries to standardize the way developers define their CDD and provides tools to distribute, install, update and manage the customized systems.
The toolkit is being developed on the current CDD Project on alioth and discussed on the debian-custom@lists.debian.org mailing list.
On this document we will use the following terms:
Custom Debian Distribution (CDD): a subset of Debian that is configured to support a particular target group out-of-the-box.
CDD Flavour: installation profile provided by a CDD. When a CDD needs to support diferent installation types for the same target group (i.e. workstations and servers) we say that it provides different flavours of the distribution.
On the CDDT flavours are implemented as tasks.
CDD Task: set of values that define the packages we have to install and how they have to be configured to be able to do something with the computer (i.e. to be able to play we will use the task games, to be able to develop software we can install the devel task, etc.).
The CDDT supports different kind of tasks depending on where they are going to be used (debian-installer, debian) and allows to define tasks based on other tasks using dependencies.
CDD Description: file containing the Task definitions. The file can be split into multiple files using the Include keyword.
CDD Source Package: Package that contains a description of the CDD and all the metadata needed to install it. Note that there are some description fields that are references to files and are not included on the description file, so they have to be distributed on the source package, on a package that is a Build-Depends of the source package or has to be provided by a dependency of the binary packages that need it.
CDD Binary Package: Packages generated by the source package that can be used to install and upgrade one or more tasks of the CDD.
The system provides three sets of programs that are used for different purposes:
This package contains tools to parse the source CDD description, generate CDD .deb and .udeb packages and build CDD installers.
The most important tool available on this package is the cddt program.
This program is written in Python and currently only supports the following subcommands:
In the near future the cddt will be split into various programs:
This package contains support programs used to select, install, configure, upgrade and remove CDD tasks included on the CDD binary description packages currently installed on a system.
The scripts are written in shell to avoid additional dependencies (the CDD can be installed without requiring a Python interpreter).
The package includes a shell library with functions to build the frontend of configuration scripts (the same code can be used for X, console and text terminals), functions to read variables stored on files and replace the value of those variables on template files or functions to install customized versions of files while keeping copies of the original versions (this functionality is available to end users and developers through the cddt-divert program).
The package also contains hooks for apt and ifupdown that can be used to apply and remove customizations at package installation time (the apt hooks) and when the network interfaces are bought up or down. Those hooks call a set of scripts that can be installed directly on their place or put on separate directories and enabled and disabled by the system administrator.
Currently unnimplemented, the idea is to have an standard udeb that once included on the debian-installer allows the user to install a CDD directly; this tool will use as input the data included on a CDD udeb generated from the information included on the CDD description file.