Gentoo Archives: gentoo-dev

From: Federico Ferri <mescalinum@g.o>
To: gentoo-dev@l.g.o
Subject: [gentoo-dev] portage and conflict resolutions!? (really is about =cat/pkg-${VER}* dependencies)
Date: Wed, 05 Aug 2009 19:41:25
Message-Id: 4A79E05C.3010501@gentoo.org
1 -----BEGIN PGP SIGNED MESSAGE-----
2 Hash: SHA1
3
4 {{sorry if you receive this message twice. I've got smtp problems and I
5 had to switch smtp, so please reply to THIS message only}}
6
7 there are pieces of software that consist of multiple packages (either
8 by upstream decision, or by a Gentoo dev that splits a package) and
9 have the additional restriction that every component must have the
10 exact same version (or in some case the exact major version).
11
12 examples are Qt, and SynCE (I'll take the latter as example, as it is
13 my area of competence).
14
15 SynCE requires the same major version of other synce packages to work.
16 so, inside synce ebuilds I do this:
17
18
19 synce_PV=$(get_version_component_range 1-2)
20
21 DEPEND=" ... =app-pda/synce-libsynce-${synce_PV}* ... "
22
23
24 I introduced this in synce 0.13 series, without thinking to what would
25 be happened (today) when a user (me) would have tried to upgrade from
26 synce 0.13 to synce 0.14 (in my overlay now)
27
28 portage can't resolve the conflict by itself, because, as it tries to
29 touch one of dependencies (upgrading 0.13 => 0.14), the currently
30 installed synce meta ebuild 0.13 [which depends on =0.13* deps too]
31 won't allow that (that is: block everything that is not 0.13*)
32
33 as a consequence, the multiple-packages-per-slot error is shown when
34 upgrading packages [1].
35
36 after exchanging a few words with some devs on IRC, I understand no
37 solution actually exists for this. :-(
38
39 but still, that ebuild snippet is a formally legal directive (?)
40 what I want to state is that the user has to have installed all synce
41 of the same major version (0.13.*) to properly work
42
43 I can see also why portage is failing:
44 when (trying to) upgrading the first package, the whole package set
45 enters into a *transient* state, which is not valid for normal usage
46 (that is: one 0.14 lib, and all other 0.13 libs), but still has to be
47 valid in order for portage being able to upgrade correctly all the
48 packages, because when portage will end [successfully!], the system
49 will be again in a valid state.
50
51
52 what I am going to propose here is a resolution strategy for this
53 (although this whole thing simply tells me that portage misses some
54 knowledge about the problem, like for example that dependencies should
55 be enforced only at transaction boundaries, or simply that we have a
56 class of dependencies that is irrelevant while system is in transient
57 state)
58
59 but, without trying to introduce overcomplicated solutions, as an
60 user, I could solve the initial problem very easily:
61 resolution strategy for it is to unmerge the old synce-0.13 packages,
62 then the user will be able to install 0.14 packages.
63
64 so, if the user can do it, why can't portage handle it? (so that even
65 a not-so-smart user could painlessly get out of this mess)
66
67 many devs pointed out how Qt works, that is, only depends on
68 >=other-qt-library-${PV}, but that IMHO is an incomplete dep
69 specification (read: a workaround).
70
71 before I revert my changes to synce packages, are there any will to
72 change portage behavior in the near future to support and fix this?
73
74 [1]# emerge -auvDN world
75
76 These are the packages that would be merged, in order:
77
78 Calculating dependencies... done!
79 [ebuild U ] app-pda/synce-libsynce-0.14 [0.13] USE="hal" 364 kB [0=>1]
80 [ebuild U ] app-pda/synce-librapi2-0.14 [0.13.1] 483 kB [0=>1]
81 [ebuild U ] app-pda/synce-librra-0.14 [0.13] 414 kB [0=>1]
82 [ebuild U ] app-pda/synce-sync-engine-0.14 [0.13] 158 kB [0=>1]
83 [ebuild U ] app-pda/synce-hal-0.14 [0.13] 314 kB [0=>1]
84 [ebuild U ] app-pda/synce-kpm-0.14 [0.13] 90 kB [0=>1]
85 [ebuild U ] app-pda/synce-trayicon-0.14 [0.13] USE="-debug" 381 kB
86 [0=>1]
87 [ebuild U ] app-pda/synce-gvfs-0.3 [0.2.1] USE="-debug" 1,950 kB
88 [0=>1]
89 [ebuild U ] app-pda/synce-0.14 [0.13] USE="gnome hal -kde -serial"
90 0 kB [0=>1]
91
92 Total: 9 packages (9 upgrades), Size of downloads: 4,151 kB
93 Portage tree and overlays:
94 [0] /usr/portage
95 [1] /usr/local/portage/synce
96
97 !!! Multiple package instances within a single package slot have been
98 pulled
99 !!! into the dependency graph, resulting in a slot conflict:
100
101 app-pda/synce-librapi2:0
102
103 ('ebuild', '/', 'app-pda/synce-librapi2-0.14', 'merge') pulled in by
104 =app-pda/synce-librapi2-0.14* required by ('ebuild', '/',
105 'app-pda/synce-librra-0.14', 'merge')
106 =app-pda/synce-librapi2-0.14* required by ('ebuild', '/',
107 'app-pda/synce-hal-0.14', 'merge')
108 =app-pda/synce-librapi2-0.14* required by ('ebuild', '/',
109 'app-pda/synce-gvfs-0.3', 'merge')
110 (and 1 more)
111
112 ('installed', '/', 'app-pda/synce-librapi2-0.13.1', 'nomerge')
113 pulled in by
114 =app-pda/synce-librapi2-0.13* required by ('installed', '/',
115 'app-pda/synce-gnomevfs-0.13', 'nomerge')
116
117 app-pda/synce-libsynce:0
118
119 ('ebuild', '/', 'app-pda/synce-libsynce-0.14', 'merge') pulled in by
120 =app-pda/synce-libsynce-0.14* required by ('ebuild', '/',
121 'app-pda/synce-gvfs-0.3', 'merge')
122 =app-pda/synce-libsynce-0.14* required by ('ebuild', '/',
123 'app-pda/synce-hal-0.14', 'merge')
124 =app-pda/synce-libsynce-0.14* required by ('ebuild', '/',
125 'app-pda/synce-librapi2-0.14', 'merge')
126 (and 3 more)
127
128 ('installed', '/', 'app-pda/synce-libsynce-0.13', 'nomerge') pulled
129 in by
130 =app-pda/synce-libsynce-0.13* required by ('installed', '/',
131 'app-pda/synce-gnomevfs-0.13', 'nomerge')
132 =app-pda/synce-libsynce-0.13* required by ('installed', '/',
133 'app-pda/synce-librapi2-0.13.1', 'nomerge')
134 (and 1 more)
135
136
137 It may be possible to solve this problem by using package.mask to
138 prevent one of those packages from being selected. However, it is also
139 possible that conflicting dependencies exist such that they are
140 impossible to satisfy simultaneously. If such a conflict exists in the
141 dependencies of two different packages, then those packages can not be
142 installed simultaneously.
143
144 For more information, see MASKED PACKAGES section in the emerge man page
145 or refer to the Gentoo Handbook.
146
147 -----BEGIN PGP SIGNATURE-----
148 Version: GnuPG v2.0.11 (GNU/Linux)
149 Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
150
151 iEYEARECAAYFAkp54CAACgkQV/B5axfzrPuMNQCghJ3aeEWRlTvKfJfK1JSSY8+R
152 lGwAnAgaO4n4mR+1E/mPTO2syf29xJDz
153 =ZhkE
154 -----END PGP SIGNATURE-----

Replies