Mailing List Archive

portage and conflict resolutions!? (really is about =cat/pkg-${VER}* dependencies)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

{{sorry if you receive this message twice. I've got smtp problems and I
had to switch smtp, so please reply to THIS message only}}

there are pieces of software that consist of multiple packages (either
by upstream decision, or by a Gentoo dev that splits a package) and
have the additional restriction that every component must have the
exact same version (or in some case the exact major version).

examples are Qt, and SynCE (I'll take the latter as example, as it is
my area of competence).

SynCE requires the same major version of other synce packages to work.
so, inside synce ebuilds I do this:


synce_PV=$(get_version_component_range 1-2)

DEPEND=" ... =app-pda/synce-libsynce-${synce_PV}* ... "


I introduced this in synce 0.13 series, without thinking to what would
be happened (today) when a user (me) would have tried to upgrade from
synce 0.13 to synce 0.14 (in my overlay now)

portage can't resolve the conflict by itself, because, as it tries to
touch one of dependencies (upgrading 0.13 => 0.14), the currently
installed synce meta ebuild 0.13 [which depends on =0.13* deps too]
won't allow that (that is: block everything that is not 0.13*)

as a consequence, the multiple-packages-per-slot error is shown when
upgrading packages [1].

after exchanging a few words with some devs on IRC, I understand no
solution actually exists for this. :-(

but still, that ebuild snippet is a formally legal directive (?)
what I want to state is that the user has to have installed all synce
of the same major version (0.13.*) to properly work

I can see also why portage is failing:
when (trying to) upgrading the first package, the whole package set
enters into a *transient* state, which is not valid for normal usage
(that is: one 0.14 lib, and all other 0.13 libs), but still has to be
valid in order for portage being able to upgrade correctly all the
packages, because when portage will end [successfully!], the system
will be again in a valid state.


what I am going to propose here is a resolution strategy for this
(although this whole thing simply tells me that portage misses some
knowledge about the problem, like for example that dependencies should
be enforced only at transaction boundaries, or simply that we have a
class of dependencies that is irrelevant while system is in transient
state)

but, without trying to introduce overcomplicated solutions, as an
user, I could solve the initial problem very easily:
resolution strategy for it is to unmerge the old synce-0.13 packages,
then the user will be able to install 0.14 packages.

so, if the user can do it, why can't portage handle it? (so that even
a not-so-smart user could painlessly get out of this mess)

many devs pointed out how Qt works, that is, only depends on
>=other-qt-library-${PV}, but that IMHO is an incomplete dep
specification (read: a workaround).

before I revert my changes to synce packages, are there any will to
change portage behavior in the near future to support and fix this?

[1]# emerge -auvDN world

These are the packages that would be merged, in order:

Calculating dependencies... done!
[ebuild U ] app-pda/synce-libsynce-0.14 [0.13] USE="hal" 364 kB [0=>1]
[ebuild U ] app-pda/synce-librapi2-0.14 [0.13.1] 483 kB [0=>1]
[ebuild U ] app-pda/synce-librra-0.14 [0.13] 414 kB [0=>1]
[ebuild U ] app-pda/synce-sync-engine-0.14 [0.13] 158 kB [0=>1]
[ebuild U ] app-pda/synce-hal-0.14 [0.13] 314 kB [0=>1]
[ebuild U ] app-pda/synce-kpm-0.14 [0.13] 90 kB [0=>1]
[ebuild U ] app-pda/synce-trayicon-0.14 [0.13] USE="-debug" 381 kB
[0=>1]
[ebuild U ] app-pda/synce-gvfs-0.3 [0.2.1] USE="-debug" 1,950 kB
[0=>1]
[ebuild U ] app-pda/synce-0.14 [0.13] USE="gnome hal -kde -serial"
0 kB [0=>1]

Total: 9 packages (9 upgrades), Size of downloads: 4,151 kB
Portage tree and overlays:
[0] /usr/portage
[1] /usr/local/portage/synce

!!! Multiple package instances within a single package slot have been
pulled
!!! into the dependency graph, resulting in a slot conflict:

app-pda/synce-librapi2:0

('ebuild', '/', 'app-pda/synce-librapi2-0.14', 'merge') pulled in by
=app-pda/synce-librapi2-0.14* required by ('ebuild', '/',
'app-pda/synce-librra-0.14', 'merge')
=app-pda/synce-librapi2-0.14* required by ('ebuild', '/',
'app-pda/synce-hal-0.14', 'merge')
=app-pda/synce-librapi2-0.14* required by ('ebuild', '/',
'app-pda/synce-gvfs-0.3', 'merge')
(and 1 more)

('installed', '/', 'app-pda/synce-librapi2-0.13.1', 'nomerge')
pulled in by
=app-pda/synce-librapi2-0.13* required by ('installed', '/',
'app-pda/synce-gnomevfs-0.13', 'nomerge')

app-pda/synce-libsynce:0

('ebuild', '/', 'app-pda/synce-libsynce-0.14', 'merge') pulled in by
=app-pda/synce-libsynce-0.14* required by ('ebuild', '/',
'app-pda/synce-gvfs-0.3', 'merge')
=app-pda/synce-libsynce-0.14* required by ('ebuild', '/',
'app-pda/synce-hal-0.14', 'merge')
=app-pda/synce-libsynce-0.14* required by ('ebuild', '/',
'app-pda/synce-librapi2-0.14', 'merge')
(and 3 more)

('installed', '/', 'app-pda/synce-libsynce-0.13', 'nomerge') pulled
in by
=app-pda/synce-libsynce-0.13* required by ('installed', '/',
'app-pda/synce-gnomevfs-0.13', 'nomerge')
=app-pda/synce-libsynce-0.13* required by ('installed', '/',
'app-pda/synce-librapi2-0.13.1', 'nomerge')
(and 1 more)


It may be possible to solve this problem by using package.mask to
prevent one of those packages from being selected. However, it is also
possible that conflicting dependencies exist such that they are
impossible to satisfy simultaneously. If such a conflict exists in the
dependencies of two different packages, then those packages can not be
installed simultaneously.

For more information, see MASKED PACKAGES section in the emerge man page
or refer to the Gentoo Handbook.

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkp54CAACgkQV/B5axfzrPuMNQCghJ3aeEWRlTvKfJfK1JSSY8+R
lGwAnAgaO4n4mR+1E/mPTO2syf29xJDz
=ZhkE
-----END PGP SIGNATURE-----
Re: portage and conflict resolutions!? (really is about =cat/pkg-${VER}* dependencies) [ In reply to ]
Federico Ferri wrote:
> I can see also why portage is failing:
> when (trying to) upgrading the first package, the whole package set
> enters into a *transient* state, which is not valid for normal usage
> (that is: one 0.14 lib, and all other 0.13 libs), but still has to be
> valid in order for portage being able to upgrade correctly all the
> packages, because when portage will end [successfully!], the system
> will be again in a valid state.

It seems that the root of the problem is in the
app-pda/synce-gnomevfs-0.13 dependencies. The
=app-pda/synce-librapi2-0.13* atom is causing the conflict. You'll
either need to adjust the dependencies of synce-gnomevfs-0.13 (if
possible), or else get a new version that's compatible with
synce-librapi2-0.14.

> what I am going to propose here is a resolution strategy for this
> (although this whole thing simply tells me that portage misses some
> knowledge about the problem, like for example that dependencies should
> be enforced only at transaction boundaries, or simply that we have a
> class of dependencies that is irrelevant while system is in transient
> state)
>
> but, without trying to introduce overcomplicated solutions, as an
> user, I could solve the initial problem very easily:
> resolution strategy for it is to unmerge the old synce-0.13 packages,
> then the user will be able to install 0.14 packages.

As said above, the problem is in the synce-gnomevfs-0.13
dependencies, and there's nothing portage can do to change that.

> so, if the user can do it, why can't portage handle it? (so that even
> a not-so-smart user could painlessly get out of this mess)

FWIW, portage can resolve slot conflicts like this automatically,
thanks to the patches from these two bugs:

http://bugs.gentoo.org/show_bug.cgi?id=137562
http://bugs.gentoo.org/show_bug.cgi?id=275217

I plan to release this code in portage-2.1.6.14 in approximately 2
weeks.
--
Thanks,
Zac
Re: portage and conflict resolutions!? (really is about =cat/pkg-${VER}* dependencies) [ In reply to ]
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Zac Medico wrote:
>
>> what I am going to propose here is a resolution strategy for this
>> (although this whole thing simply tells me that portage misses some
>> knowledge about the problem, like for example that dependencies should
>> be enforced only at transaction boundaries, or simply that we have a
>> class of dependencies that is irrelevant while system is in transient
>> state)
>>
>> but, without trying to introduce overcomplicated solutions, as an
>> user, I could solve the initial problem very easily:
>> resolution strategy for it is to unmerge the old synce-0.13 packages,
>> then the user will be able to install 0.14 packages.
>
> As said above, the problem is in the synce-gnomevfs-0.13
> dependencies, and there's nothing portage can do to change that.
>

ok, after discussion on IRC came out that the SynCE 0.14 suite didn't
include a synce-gnomevfs-0.14 package (so it has implicitly needed to
be uninstalled the old 0.13 version).

unfortunately portage doesn't handle this situation automatically.

I had to add a !app-pda/synce-gnomevfs dep to synce-0.14.
this will be never handled automatically by portage unfortunately,
because synce-gnomevfs has no reverse-depend on anything (my fault!),
so a user generally puts into the world set.

the user will see a blocker when upgrading, but that's little pain.

cheers

- --
Federico Ferri
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iEYEARECAAYFAkp5/sIACgkQV/B5axfzrPsIvgCfUFlEIwfZRsFxsMIKwrCzxwUQ
rAcAnAsj9ej5d4n14LqjL7/tvLAwAv7z
=hOZH
-----END PGP SIGNATURE-----