Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 720048 - virtual/libcrypt-1: Circular dependency involving sys-libs/glibc and dev-lang/python
Summary: virtual/libcrypt-1: Circular dependency involving sys-libs/glibc and dev-lang...
Status: RESOLVED FIXED
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: All Linux
: Normal normal (vote)
Assignee: Gentoo's Team for Core System packages
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-04-29 22:14 UTC by Sam James
Modified: 2020-06-28 13:07 UTC (History)
3 users (show)

See Also:
Package list:
Runtime testing required: ---


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sam James archtester Gentoo Infrastructure gentoo-dev Security 2020-04-29 22:14:49 UTC
<sam_c> [22:57:25]  <tinloaf> Hi. I've got a cyclic dependency glibc -> python -> libcrypt -> glibc, when I run 'emerge --oneshot portage' - and I'm really at a loss here. This is the (more or less) full output: https://pastebin.com/zWBbyPaK
<sam_c> this is a really common query in #gentoo at the moment, and they resolve it by --exclude glibc
<sam_c> is there something that could be done to avoid this?

It was suggested in #gentoo-toolchain to report it as a bug against virtual/libcrypt, and that glibc as a dependency may be wrong.
Comment 1 Mike Gilbert gentoo-dev 2020-04-29 22:42:56 UTC
 * Error: circular dependencies:
 
(sys-libs/glibc-2.30-r8:2.2/2.2::gentoo, ebuild scheduled for merge) depends on
 (dev-lang/python-3.7.7-r2:3.7/3.7m::gentoo, ebuild scheduled for merge) (buildtime)
  (virtual/libcrypt-1:0/1::gentoo, ebuild scheduled for merge) (buildtime_slot_op)
   (sys-libs/glibc-2.30-r8:2.2/2.2::gentoo, ebuild scheduled for merge) (runtime)
Comment 2 Mike Gilbert gentoo-dev 2020-04-29 22:46:56 UTC
I suspect this has something to do with the slot-operator and the subslot on virtual/libcrypt.

chutzpah: Why was the subslot added?
Comment 3 Mike Gilbert gentoo-dev 2020-04-29 22:50:20 UTC
> glibc as a dependency may be wrong

I think it is a legitimate circular dependency; glibc needs python to build, and python needs glibc to build and run.
Comment 4 Arfrever Frehtes Taifersar Arahesis 2020-04-29 23:16:02 UTC
> [nomerge       ] media-video/vlc-3.0.8:0/5-9::gentoo  USE="X alsa bluray chromecast dbus dts dvbpsi dvd encode ffmpeg gcrypt gnome-keyring gstreamer jpeg libnotify libsamplerate mp3 mpeg ncurses ogg png pulseaudio qt5 ssl theora truetype udev upnp vaapi vorbis x264 -a52 (-altivec) -aom -archive -aribsub -bidi -cddb -chromaprint -dav1d -dc1394 -debug (-directx) -faad -fdk -flac -fluidsynth -fontconfig -gme -ieee1394 -jack -kate -libass (-libav) -libcaca -libtar -libtiger -linsys -lirc -live -lua -macosx-notifications -mad -matroska -modplug -mtp -musepack -nfs -omxil -opencv -optimisememory -opus -postproc -projectm -rdp -run-as-root -samba -sdl-image -sftp -shout -sid -skins -soxr -speex -srt -svg -taglib -test -tremor -twolame -v4l -vdpau -vnc -vpx -wayland -x265 -xml -zeroconf -zvbi" CPU_FLAGS_X86="mmx sse" 
> [nomerge       ]  media-libs/gst-plugins-base-1.14.5-r1:1.0::gentoo  USE="X alsa egl introspection nls ogg opengl orc pango theora vorbis -gbm -gles2 -ivorbis -wayland" ABI_X86="32 (64) (-x32)" 
> [nomerge       ]   media-libs/graphene-1.8.6::gentoo  USE="introspection -doc -test" ABI_X86="32 (64) (-x32)" CPU_FLAGS_X86="sse2" 
> [ebuild     U  ]    dev-lang/python-3.7.7-r2:3.7/3.7m::gentoo [3.7.5-r1:3.7/3.7m::gentoo] USE="gdbm ipv6 ncurses readline sqlite ssl tk xml -bluetooth -build -examples -hardened -libressl -test -wininst" 16,879 KiB
> [nomerge       ] sys-apps/portage-2.3.89-r3::gentoo [2.3.89::gentoo] USE="(ipc) native-extensions rsync-verify xattr -apidoc -build -doc -gentoo-dev (-selinux)" PYTHON_TARGETS="python3_6 (-pypy3) -python3_7 (-python3_8) (-python2_7%*)" 
> [nomerge       ]  dev-lang/python-3.6.10-r2:3.6/3.6m::gentoo [3.6.9:3.6/3.6m::gentoo] USE="gdbm ipv6 ncurses readline sqlite ssl (threads) tk xml -bluetooth -build -examples -hardened -libressl -test -wininst" 
> [ebuild  N     ]   virtual/libcrypt-1:0/1::gentoo  USE="static-libs" ABI_X86="32 (64) (-x32)" 0 KiB
> [ebuild     U  ]    sys-libs/glibc-2.30-r8:2.2::gentoo [2.29-r7:2.2::gentoo] USE="(crypt%*) multiarch (multilib) ssp (static-libs%*) -audit -caps (-cet) -compile-locales -custom-cflags% -doc -gd -headers-only -nscd -profile (-selinux) -suid -systemtap -test (-vanilla)" 16,260 KiB
> [nomerge       ] x11-wm/i3-4.15-r1::gentoo  USE="-debug -doc -test" 
> [nomerge       ]  dev-libs/libev-4.25::gentoo  USE="-static-libs" ABI_X86="32 (64) (-x32)" 
> [nomerge       ]   sys-libs/glibc-2.30-r8:2.2::gentoo [2.29-r7:2.2::gentoo] USE="(crypt%*) multiarch (multilib) ssp (static-libs%*) -audit -caps (-cet) -compile-locales -custom-cflags% -doc -gd -headers-only -nscd -profile (-selinux) -suid -systemtap -test (-vanilla)" 
> [nomerge       ]    net-dns/libidn2-2.3.0:0/2::gentoo [2.1.1a-r1:0/2::gentoo] USE="-static-libs" ABI_X86="32 (64) (-x32)" 
> [nomerge       ]     dev-lang/perl-5.30.1:0/5.30::gentoo  USE="berkdb gdbm ithreads -debug -doc" 
> [nomerge       ]      app-admin/perl-cleaner-2.27::gentoo 
> [ebuild     U  ]       sys-apps/portage-2.3.89-r3::gentoo [2.3.89::gentoo] USE="(ipc) native-extensions rsync-verify xattr -apidoc -build -doc -gentoo-dev (-selinux)" PYTHON_TARGETS="python3_6 (-pypy3) -python3_7 (-python3_8) (-python2_7%*)" 2 KiB
> [nomerge       ] sys-devel/binutils-2.33.1-r1:2.33::gentoo [2.32-r1:2.32::gentoo] USE="gold nls plugins -default-gold -doc -multitarget -static-libs -test (-cxx%*)" 
> [nomerge       ]  sys-devel/gettext-0.20.1::gentoo  USE="acl cxx emacs ncurses nls openmp -cvs -doc -git -java -static-libs" ABI_X86="32 (64) (-x32)" 
> [nomerge       ]   dev-libs/libxml2-2.9.9-r3:2::gentoo  USE="icu ipv6 python readline -debug -examples -lzma -static-libs -test" ABI_X86="32 (64) (-x32)" PYTHON_TARGETS="python2_7 python3_6 -python3_7 (-python3_8)" 
> [ebuild     U  ]    dev-lang/python-3.6.10-r2:3.6/3.6m::gentoo [3.6.9:3.6/3.6m::gentoo] USE="gdbm ipv6 ncurses readline sqlite ssl (threads) tk xml -bluetooth -build -examples -hardened -libressl -test -wininst" 16,824 KiB
> 
> Total: 5 packages (4 upgrades, 1 new), Size of downloads: 49,964 KiB
> 
>  * Error: circular dependencies:
> 
> (sys-libs/glibc-2.30-r8:2.2/2.2::gentoo, ebuild scheduled for merge) depends on
>  (dev-lang/python-3.7.7-r2:3.7/3.7m::gentoo, ebuild scheduled for merge) (buildtime)
>   (virtual/libcrypt-1:0/1::gentoo, ebuild scheduled for merge) (buildtime_slot_op)
>    (sys-libs/glibc-2.30-r8:2.2/2.2::gentoo, ebuild scheduled for merge) (runtime)
> 
>  * Note that circular dependencies can often be avoided by temporarily
>  * disabling USE flags that trigger optional dependencies.



In this particular case, previously installed versions of dev-lang/python, 3.6.9 and 3.7.5-r1, no longer satisfy build-time dependency of sys-libs/glibc since these changes in python-utils-r1.eclass:
https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=5da7d0165648d0a2ac96325f8b48b6ee12c4353c
https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7be602138f425a313f67dbca53f6ba7b1250c960
Comment 5 Arfrever Frehtes Taifersar Arahesis 2020-04-29 23:33:24 UTC
Some workaround in virtual/libcrypt-1 may be:

	elibc_glibc? (
		!sys-libs/glibc[-crypt(-)]
		static-libs? ( !sys-libs/glibc-2.30-r2[-static-libs(+)] )
	)


Problem should also automatically disappear after unmasking virtual/libcrypt-2 and sys-libs/libxcrypt[system] (which are rather ready for glibc systems, but not yet musl / uclibc).
Comment 6 Zac Medico gentoo-dev 2020-04-30 02:46:46 UTC
Maybe you can use  || deps to break the cycle? Recent versions of portage have smart backtracking to break cycles via || choices (bug 703440).
Comment 7 Patrick McLean gentoo-dev 2020-04-30 04:43:09 UTC
I think adding an "out" to the eclass, where the glibc ebuild can set a a variable that disables the minimum versions of the python implementations in python-utils-r1 might be the best approach.

I am not a big fan of the blocker approach, it might encourage some users that hit this to unmerge glibc. The dependency on glibc is legitimate, as it is one of the providers of libcrypt.so.
Comment 8 Larry the Git Cow gentoo-dev 2020-04-30 05:58:19 UTC
The bug has been closed via the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=700c2cde76eea5c777fefa52d3a26d2411cf1e19

commit 700c2cde76eea5c777fefa52d3a26d2411cf1e19
Author:     Michał Górny <mgorny@gentoo.org>
AuthorDate: 2020-04-30 05:54:14 +0000
Commit:     Michał Górny <mgorny@gentoo.org>
CommitDate: 2020-04-30 05:55:43 +0000

    python-utils-r1.eclass: Restore old CPython version reqs
    
    Closes: https://bugs.gentoo.org/720048
    Signed-off-by: Michał Górny <mgorny@gentoo.org>

 eclass/python-utils-r1.eclass | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)
Comment 9 Larry the Git Cow gentoo-dev 2020-05-02 10:58:55 UTC
The bug has been referenced in the following commit(s):

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=a3eaa162a568d52d49cdeba206cb47b9a7e29dd5

commit a3eaa162a568d52d49cdeba206cb47b9a7e29dd5
Author:     Andreas K. Hüttel <dilfridge@gentoo.org>
AuthorDate: 2020-05-02 10:57:45 +0000
Commit:     Andreas K. Hüttel <dilfridge@gentoo.org>
CommitDate: 2020-05-02 10:58:40 +0000

    virtual/libcrypt: Uncomplexificate
    
    The crypt useflag exists only recently, and there are currently no plans to make
    it go away again. There's absolutely no point in any || dependency.
    
    Bug: https://bugs.gentoo.org/720048
    Package-Manager: Portage-2.3.89, Repoman-2.3.20
    Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>

 virtual/libcrypt/{libcrypt-1.ebuild => libcrypt-1-r1.ebuild} | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)