GERMINATE(1) | General Commands Manual | GERMINATE(1) |
germinate
— expand
dependencies in a list of seed packages
germinate |
[-v ] [-S
source] [-s
dist] [-m
mirror] [-d
dist,...] [-a
arch] [-c
component,...]
[--vcs ={auto |bzr |git }]
[--no-rdepends ]
[--no-installer ] |
germinate
is a program to help with the
maintenance of large software distributions. It takes a list of seed
packages and a mirror of the distribution, and produces outputs with the
seed packages and their dependencies and build-dependencies expanded out in
full.
The contents of the Ubuntu distribution, and others, are managed by means of seeds. At their simplest, these are lists of packages which are considered important to have in the main component of the distribution, without explicitly listing all their dependencies and build-dependencies.
Seed lists are typically divided up by category: a
base
or minimal
seed might
list the core set of packages required to make the system run at all, while
a desktop
seed might list the set of packages
installed as part of a default desktop installation.
germinate
takes these seeds, adds their dependency
trees, and produces an
output for each
seed which contains a dependency-expanded list of package names. These
outputs may be handed on to archive maintenance or CD-building tools.
Some seeds may
inherit from
other seeds: they rely on those seeds to be installed. For example, a
desktop
seed will typically inherit from a
minimal
seed. germinate
understands these inheritance relationships. If a package in the
desktop
seed depends on ‘foo’, but
‘foo’ is already part of the minimal
seed or dependency list, then ‘foo’ will not be added to the
desktop
output.
Seeds are stored in text files downloaded from a given URL. Lines not beginning with ‘ * ’ (wiki-style list markup) are ignored.
Seed entries may simply consist of a package name, or may include any of the following special syntax:
germinate
's output, so that package relationships
can be fixed to stop that happening. It is not intended for the purpose of
working around buggy package relationships, and attempts to do so will not
work because apt
has no way to know about
blacklist entries in seeds.germinate
will typically need to treat snaps
differently from debs. germinate
will not check
remotely to see if a given snap is available, therefore seeds are expected
to explicitly list all architectures a snap is to be seeded on.
‘snap:’ entries can also be suffixed with
"/classic" to indicate that the snaps need to be installed with
classic confinement on end-user systems.germinate
itself. The Ubuntu
tasksel
package uses keys beginning with
‘Task-’ to define fields of similar names in its
.desc files.
germinate-update-metapackage(1) uses some of these
headers to reduce the need for fragile configuration; see its
documentation for further details.A STRUCTURE file alongside the seeds lists their inheritance relationships. It may also include lines beginning with ‘include’, causing other collections of seeds to be included as if they were part of the collection currently being germinated, or lines beginning with ‘feature’, which set flags for the processing of seeds. Features may also be set on a per-seed basis using lines beginning with ‘ * Feature:’ in the seed file.
The following flags are currently defined:
no-follow-build-depends
is set.There is typically no need for a default desktop installation to contain all the compilers and development libraries needed to build itself from source; if nothing else, it would consume much more space. Nevertheless, it is normally a requirement for the maintainers of a distribution to support all the packages necessary to build that distribution.
germinate
therefore does not add all the
packages that result from following build-dependencies of seed packages and
of their dependencies (the “build-dependency tree”) to every
output, unless they are also in the seed or in the dependency list. Instead,
it adds them to the output for the last seed in the
STRUCTURE file, conventionally called
supported
.
Like any other seed, the supported seed may contain its own list of packages. It is common to provide support for many software packages which are not in the default installation, such as debugging libraries, optimised kernels, alternative language support, and the like.
The output files are named after the seed to which they correspond. An additional output file is needed for supported, namely ‘supported+build-depends’, which contains the supported list and the build-depends lists of the other seeds all joined together. An ‘all’ output is produced to represent the entire archive.
Some other files are produced for occasional use by experts. See the README file for full details on these.
-v
,
--verbose
-S
,
--seed-source
source,...--vcs
=bzr option is used, or
git://git.launchpad.net/~ubuntu-core-dev/ubuntu-seeds/+git/
if the --vcs
=git option is used. You may use
file:// URLs here to fetch seeds from the local
file system; for example, if your seeds are stored in
/home/username/seeds/debian.unstable, then you
would use the options -S
file:///home/username/seeds/
-s
debian.unstable.-s
,
--seed-dist
distubuntu.mantic
.
When fetching seeds from git, the part after the rightmost ‘.’ character, if any, is treated as the branch name to check out; this rather strange style is for backward compatibility.
-m
,
--mirror
mirror--source-mirror
mirror-d
,
--dist
dist,...mantic
. Listing multiple distributions may be
useful, for example, when examining both a released distribution and its
security updates.-a
,
--arch
archamd64
.-c
,
--components
component,...main
.-C
,
--apt-config
conf--mirror
, --source-mirror
,
--dist
, -or
--components
.--vcs
={auto
|bzr
|git
}bzr
or
git
, as appropriate, to be installed. For
bzr
, use the branch found at
seed-source/seed-dist; for
git
, remove the part after the rightmost
‘.’ character of seed-dist and use it
as the branch name to check out from
seed-source/remainder-of-seed-dist.
For auto
, guess the version control system to use
from seed-source (trying both in ambiguous cases)
and then proceed as above.--bzr
bzr
branch found at
seed-source/seed-dist rather
than fetching them directly from a URL. Requires
bzr
to be installed. This option is deprecated and
is retained for backward compatibility; use
--vcs
=bzr instead.--no-rdepends
--no-installer
--seed-packages
parent/pkg,...germinate
to calculate the dependencies of
individual extra packages. For example,
--seed-packages
desktop/epiphany-browser will
create an epiphany-browser output file listing the
additional packages that need to be installed over and above the
desktop seed in order to install
epiphany-browser.--always-follow-build-depends
The wiki-style markup in seeds was inherited from an early implementation, and is a wart.
germinate
can sometimes be confused by
complicated situations involving the order in which it encounters
dependencies on virtual packages. Explicit entries in seeds may be required
to work around this.
Handling of installer packages (udebs) is complicated, poorly documented, and doesn't always work quite right: in particular, packages aren't demoted to the supported seed when they should be.
Scott James Remnant
⟨scott@canonical.com⟩
Colin Watson
⟨cjwatson@canonical.com⟩
germinate
is copyright © 2004,
2005, 2006, 2007, 2008 Canonical Ltd. See the GNU
General Public License version 2 or later for copying conditions. A copy of
the GNU General Public License is available in
/usr/share/common-licenses/GPL.
May 27, 2005 | Ubuntu |