423ba10303
Signed-off-by: Nico Schottelius <nico@ikn.schottelius.org>
58 lines
1.9 KiB
Text
58 lines
1.9 KiB
Text
--------------------------------------------------------------------------------
|
|
Meta-dependencies,
|
|
Nico Schottelius, 2005-05-24
|
|
--------------------------------------------------------------------------------
|
|
|
|
1. What are Meta-Dependencies?
|
|
2. What are the advantages / disadvantages of it?
|
|
3. The solutions
|
|
|
|
1. What are Meta-Dependencies?
|
|
|
|
A Meta-depedency describes the type of service another service wants, but
|
|
not the exact service.
|
|
|
|
Example:
|
|
remote-services/ssh wants a dns-resolver, it does not care about
|
|
what it is (tinycache, bind, maradns, ...), but that it does
|
|
name caching.
|
|
|
|
|
|
2. What are the advantages / disadvantages of it?
|
|
|
|
Meta means beeing indirect. Indirect means beeing slow. So, if
|
|
cinit would have to care about meta-dependencies, the code would become
|
|
much bigger and slower.
|
|
|
|
On the other hand, one would perhaps like to use meta-dependencies, if
|
|
one tests different services with the same functionality or switches
|
|
them dependending on the situation (see profile.support).
|
|
|
|
|
|
3. The solutions
|
|
|
|
As told above, cinit won't care about meta-dependencies and as you'll see
|
|
why it does not even need to.
|
|
|
|
The first solution would be to have a mapping table outside of cinit.
|
|
This table could be a file for every meta-dependency and contain the
|
|
possibilities:
|
|
|
|
dns-resolver:
|
|
remote-services/bind
|
|
local-services/tinydns
|
|
...
|
|
|
|
So one would have to call a program, which creates the real cinit
|
|
configuration. This is imho not a very elegant solution and could cause
|
|
problems, when handling self-written services.
|
|
|
|
Another possibility is to use symlinks: Create service-directories
|
|
for all services beeing installed, but do dependencies in "wants/"
|
|
and "needs/" to a symlink (for instance create /etc/cinit/meta
|
|
and link to real services in there):
|
|
|
|
/etc/cinit/meta/dns-resolver -> ../remote-services/bind/
|
|
|
|
This way you have the indirection (meta-dependencies) in the filesystem
|
|
and cinit does not need any additional code.
|