Germinate

Differences between revisions 2 and 3
Revision 2 as of 2006-05-16 11:47:07
Size: 229
Editor: 83-216-156-196
Comment: moved to bzr
Revision 3 as of 2008-03-28 03:26:53
Size: 4893
Editor: 74
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
= Germinate =

== What is Germinate? ==

Germinate is a package available in Debian and Ubuntu which starts
with lists of packages (called seeds) and grows them into a full list
of packages including dependencies and (in additional lists) suggests,
recommends, and sources for each of these lists.

== Files You Need ==

The minimum set of seeds this author has used is:

 * STRUCTURE
 * required
 * minimal
 * standard
 * custom
 * blacklist
 * supported

It might be possible to exclude some of these (the full set of
seeds for Ubuntu is much larger), but this set works and at least
some of these are hard-coded into germinate.

Each required seed is a file that must exist. However any file you
don't actually want to use may be an empty file (e.g. created
with {{{ touch filename }}}

== Special Files ==

''STRUCTURE'' is special in that it is not actually a list of packages,
rather it is the list of seeds and how they depend on each other.

An example STRUCTURE is:

{{{
required:
minimal: required
standard: required minimal
custom:
blacklist:
supported:
}}}

The first thing on each line is the name of a seed followed by a
colon. For any seed list so defined, a file of the same name must
exist in the same directory as the STRUCTURE file.

After the colon is a space and a space separated list of seeds
the first seed on the line depends on. This is used in generating
the output such that each seed has a corresponding output list of
packages which includes the packages and depends in the seed
itself, plus any packages and dependencies for the seeds listed
as dependencies for the seed (recursively).

''blacklist'' is also special in that it doesn't define a list of
packages to include. Instead it lists packages which will never be
included in the output of germinate.

== Seed lists ==

For each seed you actually use, list each package you want to
include on line in wiki bullet list format. E.g.

{{{
 * packagename
}}}

If you wish you can use some additional wiki formatting for header and
text. Anything that is not a bullet item (i.e. package to include),
is ignored by germinate, but could be useful if you want to use a wiki
to group edit the lists.

== Germinate Invocation ==

Assuming you have your seeds in the directory
{{{/home/user/projects/seeds/ubuntu.hardy}}} and you are currently in
{{{/home/user/projects}}}, you would use the following command to generate
the output files (in {{{/home/user/projects}}}):

{{{
germinate -S file:///home/user/projects/seeds/ -s ubuntu.hardy -m http://ubuntu.com/ubuntu/ -d hardy,hardy-updates -a i386 -c main,contrib,non-free
}}}

 * {{{ -S file:///home/user/projects/seeds/ }}} is the URL of the seeds and
   can by any and may be local or remote (e.g. {{{ http:// }}} instead of
   {{{ file:// }}})
 * {{{ -s ubuntu.hardy }}} is the name of the subdirectory of the seeds URL for
   the distribution we are working on. Often named (as here) by the
   distribution the seeds are intended to be used with.
 * {{{ -m http://ubuntu.com/ubuntu/ }}} is the mirror containing the
   Packages.gz files and overrides (usually any valid ubuntu mirror)
 * {{{ -d hardy,hardy-updates }}} is the comma-separated list of
   distributions for which to find dependencies. Can be a single
   distribution (no ,) or any list of distribution names available on the
   mirror
 * {{{ -a i386 }}} is the architecture to generate output for (in this
   i386)
 * {{{ -c main,universe,restricted,multiverse }}} is the comma-separated set of distribution
   components to generate output for. May be only one, or anything
   the mirror supports.

== Output ==

 * A file named the same as the seed, for each seed, which
   contains the packages and required dependencies for those packages
 * files named filename.seed-recommends filename.build-depends and
   filename.build-sources where filename is the seed list filename and
   the files list the packages (and dependencies) which the apt
   understands as the recommends, build-depends, and build-sources
   (sources plus depends and build-depends sources) for the packages
   in the seed, respectively.
 * There are also files named all and all.sources which list all
   packages in all the other output lists and their source packages
 * packages resulting from following build-dependencies and their
   dependencies are added to the output for the last seed file in the
   STRUCTURE file, which is called supported.
 * Other files are also generated. See the README if you want to know
   about them.

== Source Code ==

Germinate

What is Germinate?

Germinate is a package available in Debian and Ubuntu which starts with lists of packages (called seeds) and grows them into a full list of packages including dependencies and (in additional lists) suggests, recommends, and sources for each of these lists.

Files You Need

The minimum set of seeds this author has used is:

  • STRUCTURE
  • required
  • minimal
  • standard
  • custom
  • blacklist
  • supported

It might be possible to exclude some of these (the full set of seeds for Ubuntu is much larger), but this set works and at least some of these are hard-coded into germinate.

Each required seed is a file that must exist. However any file you don't actually want to use may be an empty file (e.g. created with  touch filename 

Special Files

STRUCTURE is special in that it is not actually a list of packages, rather it is the list of seeds and how they depend on each other.

An example STRUCTURE is:

required:
minimal: required
standard: required minimal
custom:
blacklist:
supported:

The first thing on each line is the name of a seed followed by a colon. For any seed list so defined, a file of the same name must exist in the same directory as the STRUCTURE file.

After the colon is a space and a space separated list of seeds the first seed on the line depends on. This is used in generating the output such that each seed has a corresponding output list of packages which includes the packages and depends in the seed itself, plus any packages and dependencies for the seeds listed as dependencies for the seed (recursively).

blacklist is also special in that it doesn't define a list of packages to include. Instead it lists packages which will never be included in the output of germinate.

Seed lists

For each seed you actually use, list each package you want to include on line in wiki bullet list format. E.g.

 * packagename

If you wish you can use some additional wiki formatting for header and text. Anything that is not a bullet item (i.e. package to include), is ignored by germinate, but could be useful if you want to use a wiki to group edit the lists.

Germinate Invocation

Assuming you have your seeds in the directory /home/user/projects/seeds/ubuntu.hardy and you are currently in /home/user/projects, you would use the following command to generate the output files (in /home/user/projects):

germinate -S file:///home/user/projects/seeds/ -s ubuntu.hardy -m http://ubuntu.com/ubuntu/ -d hardy,hardy-updates -a i386 -c main,contrib,non-free 
  •  -S file:///home/user/projects/seeds/  is the URL of the seeds and

    • can by any and may be local or remote (e.g.  http://   instead of  file:// )

  •  -s ubuntu.hardy  is the name of the subdirectory of the seeds URL for

    • the distribution we are working on. Often named (as here) by the distribution the seeds are intended to be used with.
  •  -m http://ubuntu.com/ubuntu/  is the mirror containing the

    • Packages.gz files and overrides (usually any valid ubuntu mirror)
  •  -d hardy,hardy-updates  is the comma-separated list of

    • distributions for which to find dependencies. Can be a single distribution (no ,) or any list of distribution names available on the mirror
  •  -a i386  is the architecture to generate output for (in this

    • i386)
  •  -c main,universe,restricted,multiverse  is the comma-separated set of distribution

    • components to generate output for. May be only one, or anything the mirror supports.

Output

  • A file named the same as the seed, for each seed, which
    • contains the packages and required dependencies for those packages
  • files named filename.seed-recommends filename.build-depends and
    • filename.build-sources where filename is the seed list filename and the files list the packages (and dependencies) which the apt understands as the recommends, build-depends, and build-sources (sources plus depends and build-depends sources) for the packages in the seed, respectively.
  • There are also files named all and all.sources which list all
    • packages in all the other output lists and their source packages
  • packages resulting from following build-dependencies and their
    • dependencies are added to the output for the last seed file in the STRUCTURE file, which is called supported.
  • Other files are also generated. See the README if you want to know
    • about them.

Source Code

Germinate, the program that processes seeds and expands out their dependencies, is also available in bzr:

bzr get http://people.ubuntu.com/~cjwatson/bzr/germinate/mainline/ germinate

You will need at least bzr 0.8.

Germinate (last edited 2019-02-27 13:01:57 by cjwatson)