www.nico.schottelius.org/software/cinit/browse_source/cinit-0.3pre9/doc/user/meta.dependencies

59 lines
1.9 KiB
Text
Raw Normal View History

--------------------------------------------------------------------------------
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.