<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.
* 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)
I suspect this has something to do with the slot-operator and the subslot on virtual/libcrypt. chutzpah: Why was the subslot added?
> 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.
> [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
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).
Maybe you can use || deps to break the cycle? Recent versions of portage have smart backtracking to break cycles via || choices (bug 703440).
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.
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(-)
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(-)