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