View previous topic :: View next topic |
Author |
Message |
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Tue Jun 11, 2024 7:31 am Post subject: how to break the cycle? |
|
|
PC hadn't executed for 4.5 years.
I got almost all packages updated and switched profile from 17.0 to 17.1. After the finishing steps (rebuilding the toolchain) I ran and with the next command I got a surprise:
Code: |
# emerge --verbose --update --pretend portage
...
!!! The following update has been skipped due to unsatisfied dependencies:
sys-apps/portage:0
selected: (sys-apps/portage-2.3.79:0/0::gentoo, installed)
skipped: (sys-apps/portage-3.0.63-r1:0/0::gentoo, ebuild scheduled for merge) (see unsatisfied dependency below)
!!! All ebuilds that could satisfy "dev-lang/python:3.12[bzip2(+),threads(+)]" have been masked.
!!! One of the following masked packages is required to complete your request:
- dev-lang/python-3.13.0_beta2::gentoo (masked by: EAPI 8)
- dev-lang/python-3.13.0_beta1_p3::gentoo (masked by: EAPI 8)
- dev-lang/python-3.13.0_beta1_p2::gentoo (masked by: EAPI 8)
- dev-lang/python-3.13.0_beta1_p1::gentoo (masked by: EAPI 8)
- dev-lang/python-3.12.4::gentoo (masked by: EAPI 8)
- dev-lang/python-3.12.3-r1::gentoo (masked by: EAPI 8)
- dev-lang/python-3.12.3::gentoo (masked by: EAPI 8)
- dev-lang/python-3.11.9-r1::gentoo (masked by: EAPI 8)
- dev-lang/python-3.11.9::gentoo (masked by: EAPI 8)
- dev-lang/python-3.10.14_p1-r1::gentoo (masked by: EAPI 8)
- dev-lang/python-3.10.14_p1::gentoo (masked by: EAPI 8)
- dev-lang/python-3.9.19_p3::gentoo (masked by: EAPI 8)
- dev-lang/python-3.9.19_p2::gentoo (masked by: EAPI 8)
- dev-lang/python-3.8.19_p2::gentoo (masked by: EAPI 8)
- dev-lang/python-3.8.19_p1::gentoo (masked by: EAPI 8)
The current version of portage supports EAPI '7'. You must upgrade to a
newer version of portage before EAPI masked packages can be installed.
(dependency required by "sys-apps/portage-3.0.63-r1::gentoo[python_targets_python3_12]" [ebuild])
# emerge --verbose --nodeps --pretend portage
...
These are the packages that would be merged, in order:
[ebuild U ] sys-apps/portage-3.0.63-r1::gentoo [2.3.79::gentoo] USE="(ipc) native-extensions rsync-verify xattr -apidoc% -build -doc -gentoo-dev (-selinux) -test% (-epydoc%)" PYTHON_TARGETS="python3_12%* (-pypy3) -python3_10% -python3_11% (-pypy%) (-python2_7%*) (-python3_5%) (-python3_6%*) (-python3_7%) (-python3_8%)" 1,161 KiB
# python --version
Python 3.6.9
|
Is it safe to execute Code: | emerge --verbose --nodeps --oneshot portage | ?
Would the updated portage work with Python 3.6.9 while ebuild requires Quote: | PYTHON_COMPAT=( pypy3 python3_{10..12} ) | ?
Is there any other way to get python/portage (and then the whole system) updated without breaking it? |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54577 Location: 56N 3W
|
Posted: Tue Jun 11, 2024 8:46 am Post subject: |
|
|
ferdish,
Welcome to the forums.
It looks like you have been a user for some time but your install has been a bit neglected.
There are two or three ways to fix this.
1. HOWTO Update Old Gentoo
2. Get an old portage snapshot from https://distfiles.gentoo.org/snapshots/squashfs. Add squashfs support to your kernel and update to that.
Essentially, you update in baby steps until your install is current.
3. Install a newer python and portage in /root, so that they understand EAPI8 and call them directly. Upgrading Portage.
Lastly, you could reinstall but that would rob you of a wonderful learning opportunity. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22619
|
Posted: Tue Jun 11, 2024 12:15 pm Post subject: |
|
|
To expand on Neddy's welcome, could you tell us a bit about your experience level? There are two ways people bring us this problem:- The user installs Gentoo, sets it aside for some time, then comes back and hits this problem.
- User A installs Gentoo, neglects it, and eventually user B inherits the neglected system. User B then comes to us with this problem. (This problem is particularly likely in corporate environments, where user A left the company.)
In the first case, you probably know your way around Gentoo, and just need us to help with some of the more exotic points. In the second case, user B may be a complete novice to Gentoo, and will need guidance even for managing a system that is relatively current. Throwing such a user into a badly outdated system is a recipe for frustration, so if you are the second case, please tell us up front so that we do not gloss over points that a veteran user would just know. We can help you in either case, but we can better tailor our advice if we know how much you already know. |
|
Back to top |
|
|
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Wed Jun 12, 2024 4:00 am Post subject: |
|
|
Thank you NeddySeagoon for the warm welcome.
You provided great links - exactly what I was looking for (and even more).
Third suggestion looked interesting until I realized that EAPI 8 requires bash v5 (which I don't have yet) and most likely some other packages/utilities updated.
Currently I'm trying second approach (I didn't know there were portage snapshots out there. Nice finding for me). Some packages (distfiles) from them aren't available though. Doing a lot of manual work and having progress here. Basically I want to get bash v5, python 3.10+ and then I should be able to use the current portage snapshot and current portage package.
Reinstall suggestion is kind of troublesome as this system is so old that it cannot boot from USB. And I agree with you on this option - a lot of opportunities to learn would be missed.
Thank you very much for the options and links. Learning a lot from them and related pages.
Hu, I think I'm in the first category. This is my old system, that was put aside for a long time but now I think it could be useful and trying to bring it up to life.
I'm having some progress already - options from this topic are very useful.
If I hit some wall or have some good progress - I'll share it with you guys. Back to burning CPU for now |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54577 Location: 56N 3W
|
Posted: Wed Jun 12, 2024 7:25 am Post subject: |
|
|
ferdish,
All my distfiles from mid 2006 are at https://bloodnoc.org/~roy/olde-distfiles/ This is about 600G of stuff there so the page is very slow to autoindex.
Try Code: | GENTOO_MIRRORS="https://bloodnoc.org/~roy/olde-distfiles" emerge .... |
Also Code: | GENTOO_MIRRORS="" emerge .... | tells portage not to use the gentoo mirror system at all but go straight to the SRC_URI in the ebuild.
That's considered antisocial for everyday use but portage would get to the SRC_URI eventually anyway.
Lastly, you can do That will spit out a list of required files.
Hunt them down manually with the aid of the search engine of your choice. There are other distfiles archives out there. Not just mine. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Wed Jun 19, 2024 4:31 am Post subject: |
|
|
Updated system up to gentoo-20200701 (almost: less than 10 packages aren't updated).
Thank you, NeddySeagoon, for the link to your distfiles - that helped a lot.
QT libs from that time got changed links on the official site. Now they're under 'archive' - had to download them manually.
As before I tried to run emerge on the current portage, some packages got renamed and when I traveled back to 2020-07, got some interesting upgrade conflicts. The most hilarious one was when I had to uninstall renamed _make_ package and then I ended up with no make on the system. I think this is an upgraded case of Code: | chmod a-x /bin/chmod |
Frankly I thought baby step in less than a year would be much easier. Got bash v5, no needed portage or python (>=5.0) yet. Took much longer than I expected.
Now I'll try to update to gentoo-20220601, which should give me needed portage and python. |
|
Back to top |
|
|
logrusx Advocate
Joined: 22 Feb 2018 Posts: 2405
|
|
Back to top |
|
|
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Wed Jun 19, 2024 7:42 pm Post subject: |
|
|
Thank you for this advice. I actually hit this crypt wall at the full speed. I ended up loosing portage and currently forced to use /tmp/portage version (update: got system portage back!)
Your pinpoint of time is very useful. Stepping back in time for a bit |
|
Back to top |
|
|
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Sun Jul 14, 2024 1:05 am Post subject: |
|
|
A new obstacle on my path.
While updating packages (no time traveling now - current portage) to be ready to switch to new profile I decided to re-emerge already updated and working python
Code: | # python --version
Python 3.12.3
# emerge --verbose --oneshot dev-lang/python |
That was successful, but now portage got broken somehow. And even having temporary portage in /tmp/ doesn't help:
Code: | /tmp/portage # bin/emerge --info
Traceback (most recent call last):
File "/tmp/portage/bin/emerge", line 59, in <module>
retval = emerge_main()
^^^^^^^^^^^^^
File "/tmp/portage/lib/_emerge/main.py", line 1250, in emerge_main
exit_code = portage.process.spawn_bash(
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/portage/lib/portage/process.py", line 158, in spawn_bash
return spawn(args, opt_name=opt_name, **keywords)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/portage/lib/portage/process.py", line 421, in spawn
_has_ipv6()
File "/tmp/portage/lib/portage/process.py", line 587, in _has_ipv6
sock.bind(("::1", 0))
^^^^^^^^^
AttributeError: 'socket' object has no attribute 'bind'
|
Maybe somebody has any hints how it got broken and how can it be fixed? |
|
Back to top |
|
|
bstaletic Guru
Joined: 05 Apr 2014 Posts: 362
|
|
Back to top |
|
|
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Sun Jul 14, 2024 5:03 am Post subject: |
|
|
bstaletic wrote: | Does `python -c 'print(__import__("_socket").bind)'` work? |
Code: | # python -c 'print(__import__("_socket").bind)'
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: module '_socket' has no attribute 'bind'
|
Quote: | What USE flags do you have enabled for your python? |
I added 'sqlite' a very long time ago. emerge was working (that means python was too). The only change that broke it was - I re-emerged the same python version. |
|
Back to top |
|
|
bstaletic Guru
Joined: 05 Apr 2014 Posts: 362
|
Posted: Sun Jul 14, 2024 5:18 am Post subject: |
|
|
For the USE flags, you can check equery u python. If you don't have equery installed, you can check /var/db/pkg/dev-lang/python-3.12.3*/USE.
I am also guessing two things:
Code: | nm -CD /usr/lib/python3.12/lib-dynload/_socket.cpython*.so | grep bind |
outputs nothing for you, when it should say something like U bind@GLIBC_2.2.5.
Code: | nm -CD /lib*/libc.so* | grep bind |
outputs something. |
|
Back to top |
|
|
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Sun Jul 14, 2024 5:40 am Post subject: |
|
|
Oh, sorry, here's the whole output:
Code: | # equery uses dev-lang/python
[ Legend : U - final flag setting for installation]
[ : I - package is installed with flag ]
[ Colors : set, unset ]
* Found these USE flags for dev-lang/python-3.12.3-r1:
U I
- - bluetooth : Build Bluetooth protocol support in socket module
- - build : !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used for creating build images and the first half of bootstrapping [make stage1]
- - debug : Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
+ + ensurepip : Install the ensurepip module that uses bundled wheels to bootstrap pip and setuptools (if disabled, it will be only possible to use venv `--without-pip`)
- - examples : Install examples, usually source code
+ + gdbm : Add support for sys-libs/gdbm (GNU database libraries)
- - libedit : Link readline extension against dev-libs/libedit instead of sys-libs/readline
+ + ncurses : Add ncurses support (console display library)
- - pgo : Optimize the build using Profile Guided Optimization (PGO) by running Python's test suite and collecting statistics based on its performance. This will take longer to build.
+ + readline : Enable support for libreadline, a GNU line-editing library that almost everyone wants
+ + sqlite : Add support for sqlite - embedded sql database
+ + ssl : Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security)
- - test : Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently)
- - tk : Add support for Tk GUI toolkit
- - valgrind : Disable pymalloc when running under dev-debug/valgrind is detected (may incur minor performance penalty even when valgrind is not used)
- - verify-sig : Verify upstream signatures on distfiles
|
You're right that Code: | nm -CD /usr/lib/python3.12/lib-dynload/_socket.cpython*.so | grep bind | outputs nothing and
Code: | # nm -CD /lib*/libc.so* | grep bind
0000000000104dc0 W bind@@GLIBC_2.2.5
00000000001106a0 T bindresvport@@GLIBC_2.2.5
0000000000034a80 W bindtextdomain@@GLIBC_2.2.5
0000000000034ac0 W bind_textdomain_codeset@@GLIBC_2.2.5
U _dl_audit_symbind_alt@GLIBC_PRIVATE
00000000001cd998 B _nl_domain_bindings@@GLIBC_2.2.5
0012a130 W bind@@GLIBC_2.0
001379a0 T bindresvport@@GLIBC_2.0
00031340 W bindtextdomain@@GLIBC_2.0
00031370 W bind_textdomain_codeset@@GLIBC_2.2
U _dl_audit_symbind_alt@GLIBC_PRIVATE
00208060 B _nl_domain_bindings@@GLIBC_2.0
|
|
|
Back to top |
|
|
bstaletic Guru
Joined: 05 Apr 2014 Posts: 362
|
Posted: Sun Jul 14, 2024 6:04 am Post subject: |
|
|
That looks like autotools failed to detect your glibc's bind.
I don't know autotools, but during the configure step, autotools spits out Code: | checking for bind... yes | , but in your case I expect that "yes" was actually a "no".
If I am reading things right, the existence of bind is checked by compiling the following Code: | #include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int
main (void)
{
void *x=bind
;
return 0;
} |
and it is compiled with $CC -c $CFLAGS $CPPFLAGS test.c. That should work, as bind should be declared in sys/socket.h. |
|
Back to top |
|
|
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Sun Jul 14, 2024 6:23 am Post subject: |
|
|
Not sure how that helps me.
Seeing in /usr/lib that I have python 3.5, 3.7, 3.8, 3.9, 3.10, 3.11, 3.12. Was going to depclean after updating the world, but haven't reach that state.
Is there a way to switch python?
eselect python list shows only 3.10, 3.11, 3.12 and switching to none of these helps... |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22619
|
Posted: Sun Jul 14, 2024 2:55 pm Post subject: |
|
|
I think bstaletic is trying to help you find why your current Python failed to detect bind, because it should have detected it. Evidence you presented so far indicates it failed to detect bind. As for your older Python versions, most of them can be removed, but my preference would be to let emerge --depclean remove them at the end, after we fix this problem. At the very least, we will benefit from a working Python to rebuild the broken one. Hopefully, 3.11 is working well enough that it can be used for that purpose. On the assumption that rebuilding any Python without fixing your bind problem will break the rebuild, I suggest not rebuilding Python 3.10 or Python 3.11 at this time.
I further suggest running the test proposed above, so we can determine why Python 3.12 failed to detect bind. |
|
Back to top |
|
|
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Sun Jul 14, 2024 3:56 pm Post subject: |
|
|
Oh, yeah, bstaletic is right with his conclusions.
Code: | dev-lang:python-3.12.3-r1:20240713-232243.log.gz:
...
checking for bind... no
...
dev-lang:python-3.12.3-r1:20240705-115306.log.gz:
...
checking for bind... yes
...
dev-lang:python-3.11.9-r1:20240705-114646.log.gz:
...
checking for bind... yes
...
|
and the test:
Code: | # gcc test.c
# ./a.out && echo true
true |
btw, tried all my pythons like
Code: | /usr/lib/python-exec/python3.11/python -c 'print(__import__("_socket").bind)' |
they all fail in the same way. Which is weird because all those pythons were working correctly before I re-emerged 3.12.3-r1. |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22619
|
Posted: Sun Jul 14, 2024 4:25 pm Post subject: |
|
|
I don't think that Python -c line is right. It fails for me too, even on a working Python.
I suggest you run the src_configure phase for Python 3.12, then inspect the configure log to see why it decided bind is not available. |
|
Back to top |
|
|
bstaletic Guru
Joined: 05 Apr 2014 Posts: 362
|
Posted: Sun Jul 14, 2024 4:35 pm Post subject: |
|
|
ferdish wrote: | and the test:
Code: | # gcc test.c
# ./a.out && echo true
true |
|
Well, I did say I am not too familiar with autotools!
I see two options:
First is to try configuring cpython in some temporary directory and seeing if it detects bind. If it doesn't, then mess around with the configure script to find out what went wrong. If it does find bind, well tough luck.
Second is to start a rebuild of python 3.12, but interrupt it after configuring cpython and then messing with the configure script in the portage build dir.
@Hu is also advocating for the latter option.
Just change it to exit after testing for bind, and then look what is in conftest.c and conftest.err.
This is the try-compile function:
Code: | ac_fn_c_try_compile ()
{
as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
rm -f conftest.$ac_objext conftest.beam
if { { ac_try="$ac_compile"
case "(($ac_try" in
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
*) ac_try_echo=$ac_try;;
esac
eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
printf "%s\n" "$ac_try_echo"; } >&5
(eval "$ac_compile") 2>conftest.err
ac_status=$?
if test -s conftest.err; then
grep -v '^ *+' conftest.err >conftest.er1
cat conftest.er1 >&5
mv -f conftest.er1 conftest.err
fi
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; } && {
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext
then :
ac_retval=0
else $as_nop
printf "%s\n" "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
ac_retval=1
fi
eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
as_fn_set_status $ac_retval
} # ac_fn_c_try_compile |
And this is the call regarding bind: Code: | { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bind" >&5
printf %s "checking for bind... " >&6; }
if test ${ac_cv_func_bind+y}
then :
printf %s "(cached) " >&6
else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int
main (void)
{
void *x=bind
;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"
then :
ac_cv_func_bind=yes
else $as_nop
ac_cv_func_bind=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_bind" >&5
printf "%s\n" "$ac_cv_func_bind" >&6; }
if test "x$ac_cv_func_bind" = xyes
then :
printf "%s\n" "#define HAVE_BIND 1" >>confdefs.h |
|
|
Back to top |
|
|
bstaletic Guru
Joined: 05 Apr 2014 Posts: 362
|
Posted: Sun Jul 14, 2024 4:37 pm Post subject: |
|
|
Hu wrote: | I don't think that Python -c line is right. It fails for me too, even on a working Python. |
My bad! The line should be
Code: | python -c 'print(__import__("_socket").socket.bind)' |
And the output should be
Code: | <method 'bind' of '_socket.socket' objects> |
_socket is the module, then socket is the class and bind is our missing function. |
|
Back to top |
|
|
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Sun Jul 14, 2024 4:38 pm Post subject: |
|
|
Hu wrote: | I don't think that Python -c line is right. It fails for me too, even on a working Python. |
That's a relief. I was puzzled by all my failures, but looks like the test isn't perfect. That gives me a hope.
Quote: | I suggest you run the src_configure phase for Python 3.12, then inspect the configure log to see why it decided bind is not available. |
How do I do that? Off-portage python and ./configure ? |
|
Back to top |
|
|
ferdish n00b
Joined: 11 Jun 2024 Posts: 23
|
Posted: Sun Jul 14, 2024 4:46 pm Post subject: |
|
|
bstaletic wrote: | Hu wrote: | I don't think that Python -c line is right. It fails for me too, even on a working Python. |
My bad! The line should be
Code: | python -c 'print(__import__("_socket").socket.bind)' |
And the output should be
Code: | <method 'bind' of '_socket.socket' objects> |
_socket is the module, then socket is the class and bind is our missing function. |
You're right again:
Code: | # /usr/lib/python-exec/python3.12/python -c 'print(__import__("_socket").socket.bind)'
Traceback (most recent call last):
File "<string>", line 1, in <module>
AttributeError: type object '_socket.socket' has no attribute 'bind'
# /usr/lib/python-exec/python3.11/python -c 'print(__import__("_socket").socket.bind)'
<method 'bind' of '_socket.socket' objects>
# /usr/lib/python-exec/python3.10/python -c 'print(__import__("_socket").socket.bind)'
<method 'bind' of '_socket.socket' objects>
|
Well, at least some of my pythons are working
As for the configure approaches - I'll try to dig there on my own, but most likely I'll need a guidance here. |
|
Back to top |
|
|
bstaletic Guru
Joined: 05 Apr 2014 Posts: 362
|
Posted: Sun Jul 14, 2024 5:03 pm Post subject: |
|
|
ferdish wrote: | You're right again: |
See, I know python! Sometimes...
ferdish wrote: | As for the configure approaches - I'll try to dig there on my own, but most likely I'll need a guidance here. |
Sure thing! Hint: qmerge can execute individual steps, instead of invoking the entire process like emerge. Check the man page for it. |
|
Back to top |
|
|
Hu Administrator
Joined: 06 Mar 2007 Posts: 22619
|
Posted: Sun Jul 14, 2024 5:04 pm Post subject: |
|
|
I was thinking start with ebuild /var/db/repos/gentoo/dev-lang/python/python-3.12.3-r1.ebuild configure, so that Portage would stop on its own. You might need to force use of an older Python by setting EPYTHON=python3.11 in the environment.
As I read the manual page for qmerge, that only works on binary packages. |
|
Back to top |
|
|
bstaletic Guru
Joined: 05 Apr 2014 Posts: 362
|
Posted: Sun Jul 14, 2024 5:29 pm Post subject: |
|
|
Hu wrote: | As I read the manual page for qmerge, that only works on binary packages. |
Right... I was thinking of ebuild.
Note to self: go eat something - your brain is clearly not working right now! |
|
Back to top |
|
|
|