doc/mediated-links.txt
author Shawn Walker <shawn.walker@oracle.com>
Sat, 16 Jul 2011 08:45:13 -0700
changeset 2468 ce77b64883c4
parent 2453 330443795456
permissions -rw-r--r--
18710 conditional dependencies can cause install and uninstall failure when dependency cannot be installed
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2453
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
     1
Problem Statement
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
     2
=================
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
     3
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
     4
It's common to want multiple versions of a component installed on a system.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
     5
In order for this to work, each version must have no coincident pathnames.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
     6
For most pathnames, it's easy to put them in a versioned directory or give
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
     7
them a versioned name.  But for some frequently used pathnames (an
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
     8
executable expected to be in $PATH, or a man page), it's highly convenient
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
     9
to provide an unversioned path (possibly as a link to a versioned path) for
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    10
casual use.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    11
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    12
This of course leads to a conflict when multiple component versions all
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    13
want to provide the same unversioned path.  We need a mechanism by which we
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    14
can manage these paths.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    15
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    16
The most typical desired behavior for these paths is that they refer to the
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    17
latest version available; that is, if component foo has versions 1.2, 1.3,
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    18
and 1.4 installed, then unversioned pathnames for foo should refer to the
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    19
1.4 version.  However, there may be reasons that the package vendor, the
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    20
site administrator, or even the local system administrator may want to
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    21
override this choice.  Since properly written code uses the versioned
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    22
pathnames, the reference should be allowed to switch at arbitrary times.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    23
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    24
Another related problem is the delivery of different components which
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    25
provide similar functionality.  This differs from the previously stated
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    26
problem in that the components don't share the same versioning space, and
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    27
so need a different namespace from which the desired component can be
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    28
chosen.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    29
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    30
Finally, a versioned component may also have different implementations
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    31
(indeed, there may be multiple implementation axes), so we need to handle
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    32
both problems at once.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    33
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    34
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    35
Proposal
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    36
========
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    37
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    38
We assert that this problem can be restricted to pathnames which can be
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    39
replaced by symbolic links.  Although a solution could apply to other
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    40
filesystem entry types, the implementations would be significantly more
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    41
difficult, and likely wouldn't provide any real benefit.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    42
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    43
To that, we introduce the notion of "mediated links", being symlinks or
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    44
hardlinks which are subject -- when necessary -- to mediation in the case of
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    45
conflict.  Mediated links are link or hardlink actions with some extra metadata
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    46
that allows the packaging system to treat conflicts specially.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    47
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    48
The one required attribute is "mediator", whose value denotes the entry in
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    49
the namespace shared by all the pathnames participating in a given
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    50
mediation group.  For instance, the mediator attribute value for all
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    51
/usr/bin/python and /usr/share/man/man1/python.1 links might be "python".
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    52
The value of this attribute must be an alphanumeric string.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    53
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    54
For a link mediated solely by version, the "mediator-version" attribute is
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    55
required.  This is the version (expressed as a dot-separated sequence of
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    56
nonnegative integers) of the interface described by the "mediator"
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    57
attribute, and not necessarily related to the version of the implementation
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    58
delivered by the package, or by the version in the package FMRI.  For
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    59
instance, links participating in the "python" mediation might have
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    60
"mediator-version" set to "2.4", "2.6", "3.2", etc.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    61
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    62
When resolving the conflict in mediated links, pkg(5) will normally choose
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    63
the link with the greatest value of "mediator-version".  The package vendor
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    64
may override this selection by adding the attribute "mediator-priority"
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    65
with the value "vendor" to its preferred link in a package it delivers.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    66
Similarly, site administrators may override the selection by version or the
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    67
vendor override by adding the attribute "mediator-priority" with the value
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    68
"site" to its preferred link.  The local system administrator may override
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    69
this selection with the commandline specified below.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    70
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    71
Mediation may be performed by implementation in addition to or instead of
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    72
by version.  In this case, the attribute is "mediator-implementation" and
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    73
the value must be a string containing only alphanumeric characters and '-'
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    74
(preferably short and descriptive).  Implementation strings are not considered
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    75
to be ordered, and so one must be chosen explicitly, or the system will choose
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    76
arbitrarily (first in lexical order).  As with versioned mediation,
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    77
"mediator-priority=vendor" and "mediator-priority=site" can be used to override
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    78
the default behavior, and the local administrator can set the preference
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    79
explicitly.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    80
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    81
If the implementation itself can be or is versioned, then the value may
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    82
have a '@' and a version appended to it.  If multiple versions of an
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    83
implementation exist, the default will be to choose the greatest as defined
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    84
by those versions, similarly to the purely version-mediated scenario.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    85
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    86
By default, every time a package operation is performed, the "best" mediation
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    87
will be selected and then applied to all packages.  However, the local
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    88
administrator may explicitly set both the version and implementation for a
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    89
mediation, or only one of them, in which case the system will select the "best"
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    90
mediation with the matching component.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    91
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    92
All links delivered to a given pathname must participate in mediation or not
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    93
at all.  If some links delivered to a given pathname are mediated, and some
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    94
are not, package operations will fail with a conflicting error message. Likewise,
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    95
all mediated links delivered to a given pathname must share the same mediator.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    96
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    97
However, not all mediator versions and implementations need to provide a link at
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    98
a given path.  If a version and/or implementation doesn't provide a link, then the
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
    99
link is removed when that version is selected.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   100
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   101
The commandline used for locally administering mediated links is as
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   102
follows:
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   103
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   104
  - pkg set-mediator [-V <version>] [-I <implementation>] mediator ...
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   105
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   106
    Sets the mediator <mediator> to a given version and/or implementation.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   107
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   108
  - pkg unset-mediator [-V] [-I] mediator ...
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   109
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   110
    Reverts the mediator <mediator> to the system default.  If the -V option is
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   111
    supplied, revert the version-mediated aspect to the system default, but leave
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   112
    the implementation mediation in place.  If the -I option is supplied,
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   113
    revert the implementation-mediated aspect to the system default, but
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   114
    leave the version mediation in place.  If neither -V or -I are specified,
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   115
    both the version and implementation will be reverted to the system default.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   116
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   117
  - pkg mediator [<mediator> ...]
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   118
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   119
    Display information about the mediators on the system.  When one or
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   120
    more mediators are specified, display information only about the specified
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   121
    mediators.  The information should include the mediator name, selected
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   122
    version and implementation, and how each component was chosen by the system.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   123
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   124
Examples
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   125
========
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   126
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   127
Mediation by version
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   128
--------------------
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   129
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   130
The canonical case for version mediation is a language platform.  In this
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   131
case, we'll investigate Python.  Two paths that might be mediated are the
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   132
python interpreter executable and its manpage.  The runtime/python-26
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   133
package would deliver
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   134
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   135
    file path=usr/bin/python2.6 ...
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   136
    file path=usr/share/man/man1/python2.6.1 ...
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   137
    link path=usr/bin/python target=python2.6 mediator=python \
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   138
        mediator-version=2.6
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   139
    link path=usr/share/man/man1/python.1 target=python2.6.1 mediator=python \
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   140
        mediator-version=2.6
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   141
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   142
and the runtime/python-24 package would deliver
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   143
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   144
    file path=usr/bin/python2.4 ...
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   145
    file path=usr/share/man/man1/python2.4.1 ...
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   146
    link path=usr/bin/python target=python2.4 mediator=python \
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   147
        mediator-version=2.4
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   148
    link path=usr/share/man/man1/python.1 target=python2.4.1 mediator=python \
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   149
        mediator-version=2.4
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   150
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   151
If only runtime/python-26 were installed, then /usr/bin/python would be
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   152
linked to python2.6.  Likewise, if only runtime/python-24 were installed,
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   153
then /usr/bin/python would be linked to python2.4.  If both were installed,
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   154
then by default, 2.6 would be found to be greater than 2.4, and the link
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   155
would point to python2.6.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   156
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   157
If the vendor of the two packages wished, they could deliver a package
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   158
"runtime/python" which would simply have a dependency on the desired
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   159
default version.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   160
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   161
If the local administrator preferred /usr/bin/python to be version 2.4,
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   162
then she could run
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   163
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   164
    pkg set-mediator -V 2.4 python
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   165
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   166
after which running "python" would run the 2.4 interpreter, and "man
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   167
python" would display the manual for the 2.4 interpreter.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   168
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   169
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   170
Vendor override
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   171
---------------
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   172
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   173
If, in the above scenario, the vendor of runtime/python-26 and
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   174
runtime/python-24 wished to override the default behavior and have the 2.4
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   175
interpreter be the default, then the runtime/python-24 package would
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   176
deliver
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   177
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   178
    file path=usr/bin/python2.4 ...
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   179
    file path=usr/share/man/man1/python2.4.1 ...
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   180
    link path=usr/bin/python target=python2.4 mediator=python \
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   181
        mediator-version=2.4 mediator-priority=vendor
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   182
    link path=usr/share/man/man1/python.1 target=python2.4.1 mediator=python \
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   183
        mediator-version=2.4 mediator-priority=vendor
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   184
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   185
Thus in the case where both runtime/python-26 and runtime/python-24 were
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   186
installed, /usr/bin/python would point to python2.4, despite 2.6 being
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   187
greater than 2.4.  The "runtime/python" package would likely then contain a
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   188
a dependency on "runtime/python-24".  The local administrator could
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   189
override this choice to 2.6 by running
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   190
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   191
    pkg set-mediator -V 2.6 python
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   192
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   193
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   194
Mediation by implementation
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   195
---------------------------
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   196
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   197
The canonical case for implementation mediation is the editor vi.  There
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   198
are multiple implementations of vi, but there is no versioned specification
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   199
which each implements.  We will examine vim, nvi, and the legacy Solaris
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   200
vi.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   201
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   202
In the package editor/vim, we deliver
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   203
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   204
    file path=usr/bin/vim
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   205
    link path=usr/bin/vi target=vim mediator=vi mediator-implementation=vim
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   206
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   207
In the package editor/svr4-vi, we deliver
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   208
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   209
    file path=usr/has/bin/vi
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   210
    link path=usr/bin/vi target=../has/bin/vi mediator=vi mediator-implementation=svr4
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   211
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   212
And in the package editor/nvi, we deliver
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   213
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   214
    file path=usr/bin/nvi
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   215
    link path=usr/bin/vi target=nvi mediator=vi mediator-implementation=nvi
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   216
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   217
If editor/vim were installed on the system without either of the others,
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   218
then /usr/bin/vi would point to vim.  If either of the other packages were
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   219
later added, the /usr/bin/vi would continue to run vim, until the local
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   220
administrator were to run
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   221
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   222
    pkg set-mediator -I svr4 vi
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   223
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   224
which would switch the link to run legacy Solaris vi.  If the packages were
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   225
all installed simultaneously, the link would be chosen arbitrarily.  The
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   226
vendor ought to deliver a vendor priority tag:
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   227
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   228
    link path=usr/bin/vi target=vim mediator=vi mediator-implementation=vim \
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   229
        mediator-priority=vendor
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   230
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   231
so that the desired default is always chosen.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   232
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   233
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   234
Mediation with multiple implementations
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   235
---------------------------------------
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   236
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   237
Vim can be configured with a handful of different compile-time options.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   238
For this example, we'll focus on --with-features=tiny (the minimal
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   239
configuration) and --with-features=huge (the maximal configuration, sans
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   240
GUI and external languages).
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   241
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   242
As before, we deliver the package editor/svr4-vi:
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   243
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   244
    file path=usr/has/bin/vi
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   245
    link path=usr/bin/vi target=../has/bin/vi mediator=vi mediator-implementation=svr4
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   246
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   247
We deliver two vim packages -- one for tiny, one for huge -- with a new
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   248
"vim" implementation-based mediator, set to "tiny" for the tiny package and
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   249
"huge" for the huge package.  In addition, an implementation-based mediated
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   250
link is delivered to /usr/bin/vi which targets vim if the vi mediator is
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   251
set to vim.  Since these two actions are identical, there is no conflict.
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   252
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   253
Here is vim-tiny:
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   254
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   255
    file path=usr/bin/vim-tiny
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   256
    link path=usr/bin/vim target=vim-tiny mediator=vim mediator-implementation=tiny
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   257
    link path=usr/bin/vi target=vim mediator=vi mediator-implementation=vim
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   258
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   259
and editor/vim-huge:
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   260
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   261
    file path=usr/bin/vim-huge
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   262
    link path=usr/bin/vim target=vim-huge mediator=vim mediator-implementation=huge
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   263
    link path=usr/bin/vi target=vim mediator=vi mediator-implementation=vim
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   264
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   265
Thus to ensure that /usr/bin/vi is the huge vim, the administrator would
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   266
have to run
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   267
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   268
    pkg set-mediator -I huge vim
330443795456 18619 link mediation support needed
Shawn Walker <shawn.walker@oracle.com>
parents:
diff changeset
   269
    pkg set-mediator -I vim vi