View previous topic :: View next topic |
Author |
Message |
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Wed Jul 29, 2009 9:18 am Post subject: [SOLVED] - Portage or Python hosed? (glibc culprit!) |
|
|
Hi,
I updated my PPC install last night and this morning I came to 'dispatch-conf' and got the following error...
Code: |
# dispatch-conf
Traceback (most recent call last):
File "/usr/sbin/dispatch-conf", line 22, in <module>
import portage
File "//usr/lib/portage/pym/portage/__init__.py", line 96, in <module>
from portage.data import ostype, lchown, userland, secpass, uid, wheelgid, \
File "//usr/lib/portage/pym/portage/data.py", line 101, in <module>
mystatus, myoutput = getstatusoutput("id -G portage")
File "/usr/lib/python2.5/commands.py", line 53, in getstatusoutput
pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
OSError: [Errno 9] Bad file descriptor
|
"Oh dear" I thought, I'll just check whether I can update things quickly...
Code: |
# emerge -uDNa world
Traceback (most recent call last):
File "/usr/bin/emerge", line 29, in <module>
import _emerge
File "//usr/lib/portage/pym/_emerge/__init__.py", line 26, in <module>
import portage
File "//usr/lib/portage/pym/portage/__init__.py", line 96, in <module>
from portage.data import ostype, lchown, userland, secpass, uid, wheelgid, \
File "//usr/lib/portage/pym/portage/data.py", line 101, in <module>
mystatus, myoutput = getstatusoutput("id -G portage")
File "/usr/lib/python2.5/commands.py", line 53, in getstatusoutput
pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
OSError: [Errno 9] Bad file descriptor
|
No dice, looks like there's a problem with line 53 of /usr/lib/python2.5/commands.py
Code: |
...
# Ditto but preserving the exit status.
# Returns a pair (sts, output)
#
def getstatusoutput(cmd):
"""Return (status, output) of executing cmd in a shell."""
import os
pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r') <<< Problem line
text = pipe.read()
sts = pipe.close()
if sts is None: sts = 0
if text[-1:] == '\n': text = text[:-1]
return sts, text
...
|
I checked whether Python was updated last night and it went from dev-lang/python-2.5.4-r2 > dev-lang/python-2.5.4-r3 so no major version bump there...
Code: |
# genlop -l | grep python
Tue Jun 9 10:19:44 2009 >>> dev-python/numeric-24.2-r6
Tue Jun 9 12:39:31 2009 >>> dev-python/pycairo-1.8.2
Tue Jun 9 13:28:11 2009 >>> dev-python/pygobject-2.16.1
Tue Jun 9 14:45:28 2009 >>> dev-python/pygtk-2.14.1
Wed Jun 10 17:03:36 2009 >>> dev-lang/python-2.5.4-r2
Thu Jun 11 00:34:43 2009 >>> dev-python/pyxml-0.8.4-r1
Fri Jun 12 11:07:27 2009 >>> dev-python/pyrex-0.9.8.5
Fri Jun 12 11:24:48 2009 >>> dev-python/dbus-python-0.82.4
Fri Jun 12 12:14:05 2009 >>> dev-python/notify-python-0.1.1-r1
Tue Jun 16 00:57:02 2009 >>> dev-python/gnome-python-base-2.22.3
Tue Jun 16 00:58:06 2009 >>> dev-python/gconf-python-2.22.3
Tue Jul 28 23:39:57 2009 >>> app-admin/eselect-python-20090606
Tue Jul 28 23:50:47 2009 >>> dev-lang/python-2.5.4-r3
|
Any suggestions on how to correct this problem, I'm afraid I know now't about Python beyond the very, very basic "Hello World" level.
/etc/make.conf: |
$ more /etc/make.conf
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
CFLAGS="-O2 -pipe"
CXXFLAGS="-O2 -pipe"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult http://www.gentoo.org/doc/en/change-chost.xml before changing.
CHOST="powerpc-unknown-linux-gnu"
MAKEOPTS="-j2"
## Lets try out unstable
#ACCEPT_KEYWORDS="~ppc"
## Mirrors in the UK
GENTOO_MIRRORS="http://gentoo.virginmedia.com http://www.mirrorservice/sites/www.ibiblio.org/gentoo/"
#SYNC="rsync.uk.gentoo.org/gentoo-portage"
SYNC="rsync.gentoo.org/gentoo-portage"
## USE flags
USE="alsa bash-completion cups dbus emacs evdev exif geoip gimp gtk2 hal jpeg -kde -mozilla mpd mp3 ogg opengl pdf
perl png postgres qt scanner sqlite real tiff usb vorbis X xulrunner"
## Input
INPUT_DEVICES="evdev keyboard mouse joystick"
## Portage Overlay Directory
PORTDIR_OVERLAY="/usr/portage/local/"
## Emerge defaults
EMERGE_DEFAULT_OPTS="--verbose --keep-going"
## Portage features
FEATURES="nodoc parallel-fetch ccache"
## Linguas flag
LINGUAS="en_GB"
|
Thanks in advance,
slack _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth
Last edited by slackline on Mon Aug 17, 2009 8:39 am; edited 1 time in total |
|
Back to top |
|
|
gringo Advocate
Joined: 27 Apr 2003 Posts: 3793
|
Posted: Wed Jul 29, 2009 10:30 am Post subject: |
|
|
what portage version are you using ? i *think* i have read about similar issues that were hit by people mixing arch and ~arch.
IOW, are you running unstable portage and stable python ?
cheers _________________ Error: Failing not supported by current locale |
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Wed Jul 29, 2009 10:40 am Post subject: |
|
|
forgot some key info there didn't I!
Both Python and Portage versions are stable for this arch...
Code: |
# eix dev-lang/python
[I] dev-lang/python
Available versions:
(2.4) 2.4.6
(2.5) 2.5.4-r2 2.5.4-r3
(2.6) ~2.6.2-r1
{berkdb bootstrap build cxx doc elibc_uclibc examples gdbm ipv6 ncurses readline sqlite ssl threads tk ucs2 wininst xml}
Installed versions: 2.5.4-r3(2.5)(23:50:06 07/28/09)(berkdb gdbm ipv6 ncurses readline sqlite ssl threads xml -build -doc -elibc_uclibc -examples -tk -ucs2 -wininst)
Homepage: http://www.python.org/
Description: Python is an interpreted, interactive, object-oriented programming language.
# eix sys-apps/portage
[I] sys-apps/portage
Available versions: 2.1.4.5 2.1.6.7 2.1.6.13 [M]~2.2_rc33 {build doc epydoc linguas_pl selinux}
Installed versions: 2.1.6.13(16:42:27 06/10/09)(-build -doc -epydoc -linguas_pl -selinux)
Homepage: http://www.gentoo.org/proj/en/portage/index.xml
Description: Portage is the package management and distribution system for Gentoo
|
_________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
gringo Advocate
Joined: 27 Apr 2003 Posts: 3793
|
Posted: Wed Jul 29, 2009 11:06 am Post subject: |
|
|
the "id -G portage" thingy is quite strange : in case you are running this a user of the portage group, does it work if your run it as root ?
Digging a bit in b.g.o. i found this, not your exact problem but quite similar, maybe you find sth. that can help :
https://bugs.gentoo.org/show_bug.cgi?id=250342
cheers _________________ Error: Failing not supported by current locale |
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Wed Jul 29, 2009 11:15 am Post subject: |
|
|
gringo wrote: | the "id -G portage" thingy is quite strange : in case you are running this a user of the portage group, does it work if your run it as root ? |
They were being run as root (I've retained the 'default' prompt structure of '$' for user accounts and '#' for root)...
Code: |
# dispatch-conf
Traceback (most recent call last):
File "/usr/sbin/dispatch-conf", line 22, in <module>
import portage
File "//usr/lib/portage/pym/portage/__init__.py", line 96, in <module>
from portage.data import ostype, lchown, userland, secpass, uid, wheelgid, \
File "//usr/lib/portage/pym/portage/data.py", line 101, in <module>
mystatus, myoutput = getstatusoutput("id -G portage")
File "/usr/lib/python2.5/commands.py", line 53, in getstatusoutput
pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
OSError: [Errno 9] Bad file descriptor
|
Cheers for the pointers from b.g.o, just checked and glibc was updated last night, so that may be the cause of the breakage...
Code: |
# genlop -l | grep glibc
Wed Jul 29 01:42:09 2009 >>> sys-libs/glibc-2.9_p20081201-r2
|
Away from computers now for the rest of the day, but will try sifting through the suggested solutions from b.g.o.
Any more suggestions/pointers/solutions welcome
Cheers
slack _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
gerard27 Advocate
Joined: 04 Jan 2004 Posts: 2377 Location: Netherlands
|
Posted: Wed Jul 29, 2009 3:48 pm Post subject: |
|
|
On july 15 my box was updated with the same version of glibc.
No problems.
Gerard. _________________ To install Gentoo I use sysrescuecd.Based on Gentoo,has firefox to browse Gentoo docs and mc to browse (and edit) files.
The same disk can be used for 32 and 64 bit installs.
You can follow the Handbook verbatim.
http://www.sysresccd.org/Download |
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Thu Jul 30, 2009 7:02 am Post subject: |
|
|
Gerard van Vuuren wrote: | On july 15 my box was updated with the same version of glibc.
No problems.
Gerard. |
Lucky you
What about your portage and python versions, and what arch are you on? _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
gerard27 Advocate
Joined: 04 Jan 2004 Posts: 2377 Location: Netherlands
|
Posted: Thu Jul 30, 2009 10:31 am Post subject: |
|
|
Python-2.5.4-r3
Portage-2.1.6.13
x86_64
Gerard. _________________ To install Gentoo I use sysrescuecd.Based on Gentoo,has firefox to browse Gentoo docs and mc to browse (and edit) files.
The same disk can be used for 32 and 64 bit installs.
You can follow the Handbook verbatim.
http://www.sysresccd.org/Download |
|
Back to top |
|
|
John R. Graham Administrator
Joined: 08 Mar 2005 Posts: 10589 Location: Somewhere over Atlanta, Georgia
|
Posted: Thu Jul 30, 2009 11:24 am Post subject: |
|
|
@slack---line,
You could try selecting a different version of Python from the available installed slotted packages and try again: Code: | eselect python list
eselect python set {something else} | If you can get Portage to work, then you can run which cleans up various things.
- John _________________ I can confirm that I have received between 0 and 499 National Security Letters. |
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Thu Jul 30, 2009 11:35 am Post subject: |
|
|
Gerard van Vuuren wrote: | Python-2.5.4-r3
Portage-2.1.6.13
x86_64
Gerard. |
Same versions but different arch, hmm.
@john_r_graham
Had thought of that, but only have one slot filled and python-updater doesn't want to play ball...
Code: |
# eselect python list
Available python interpreters:
[1] python2.5 *
# python-updater
Traceback (most recent call last):
File "/usr/bin/portageq", line 609, in <module>
main()
File "/usr/bin/portageq", line 578, in main
import portage
File "//usr/lib/portage/pym/portage/__init__.py", line 96, in <module>
from portage.data import ostype, lchown, userland, secpass, uid, wheelgid, \
File "//usr/lib/portage/pym/portage/data.py", line 101, in <module>
mystatus, myoutput = getstatusoutput("id -G portage")
File "/usr/lib/python2.5/commands.py", line 53, in getstatusoutput
pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
OSError: [Errno 9] Bad file descriptor
|
Think I might have to get a livecd and chroot to sort stuff out (if I can work out what it is I need to do!).
Thanks for the help so far people, any more ideas are welcome.
slack _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
Mike Hunt Watchman
Joined: 19 Jul 2009 Posts: 5287
|
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Thu Jul 30, 2009 1:49 pm Post subject: |
|
|
Ahh, takes me back to my Slackware days!
Two things though...
1) The above listed bug suggests the problem may lie with sys-libs/glibc in which case fixing python isn't going to help (and the recent python upgrade only went from dev-lang/python-2.5.4-r2 -> dev-lang/python-2.5.4-r3 so its still going to be the same version of Python installed).
That aside...
2) I don't think it will, but will this guarantee that everythings installed in the correct place and would there be any clutter left hanging around afterwards?
Looks very similar, but seems to include the portage tree and not require the compilation of Python as it comes with the portage snapshot.
Cheers for the suggestion, going to wait and see if there are any suggestions about glibc (have raised a query in the glibc stabilisation bug.
slack _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
Mike Hunt Watchman
Joined: 19 Jul 2009 Posts: 5287
|
Posted: Thu Jul 30, 2009 2:05 pm Post subject: |
|
|
Okie dokie, now I understand why glibc-2.10 is masked in the funtoo portage. Code: | # grep -B 2 glibc /usr/portage/profiles/package.mask/funtoo-cautionary
# Daniel Robbins <drobbins@funtoo.org> (19 Jan 2008)
# Mask new versions for caution
>sys-libs/glibc-2.9_p20081201-r2 |
|
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Fri Jul 31, 2009 8:06 am Post subject: |
|
|
Just musing about how to repair this (from my desk at work) and was wondering is there any reason I couldn't drop a pre-compiled Funtoo binary for glibc in to get the system back up and running?
Any thoughts appreciated,
Cheers
slack _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
desultory Bodhisattva
Joined: 04 Nov 2005 Posts: 9410
|
Posted: Fri Jul 31, 2009 8:14 am Post subject: |
|
|
You could try one from Gentoo, so that you have less of a concern regarding patches differing between the two. Either way, considering that the version of sys-libs/glibc installed on that system is already one which would be allowed by the version range indicated by the Funtoo mask, this could well be missing the real cause of the problem. |
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Fri Jul 31, 2009 9:38 am Post subject: |
|
|
Ahh, cheers, didn't know about those tinderbox binaries, although the cross-compiled directories seem to only be for amd64 and x86 whilst this is a problem on ppc so I don't think I'd get very far?
desultory wrote: | Either way, considering that the version of sys-libs/glibc installed on that system is already one which would be allowed by the version range indicated by the Funtoo mask, this could well be missing the real cause of the problem.
|
I'm afraid I don't understand, since I've got this installed...
Code: |
# genlop -l | grep glibc
Wed Jul 29 01:42:09 2009 >>> sys-libs/glibc-2.9_p20081201-r2
|
...and it would appear that this version is masked under Funtoo...
Mike Hunt wrote: |
Okie dokie, now I understand why glibc-2.10 is masked in the funtoo portage.
Code: |
# grep -B 2 glibc /usr/portage/profiles/package.mask/funtoo-cautionary
# Daniel Robbins <drobbins@funtoo.org> (19 Jan 2008)
# Mask new versions for caution
>sys-libs/glibc-2.9_p20081201-r2 |
|
...and once installed I could mask on my system too with a similar entry in /etc/portage/package.mask no?
Although looking at the ebuilds I'll probably have to drop back further since this is the first upgrade of glibc since I installed from the PS3 Minimal Install CD 20071212.
Given that I suspect I may have trouble finding a binary build on funtoo, especially as it doesn't have a PPC stream! I guess dropping the install CD in chrooting and copying glibc from there will have to suffice and I'll have to do it when I get home.
slack _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Fri Jul 31, 2009 9:49 am Post subject: |
|
|
Just came across a related Bug # 275737 _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
Mike Hunt Watchman
Joined: 19 Jul 2009 Posts: 5287
|
Posted: Fri Jul 31, 2009 2:45 pm Post subject: |
|
|
On tinderbox did you look in the default-linux directory? There may be what you need in there. |
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Fri Jul 31, 2009 2:53 pm Post subject: |
|
|
Mike Hunt wrote: | On tinderbox did you look in the default-linux directory? |
Nope, hadn't even thought of it.
Mike Hunt wrote: | There may be what you need in there. |
Looks promising as there is glibc-2.8_p20080602-r1.tbz2, I'll give that a go, but suspect I may have to ultimately grab the version from the LiveCD and anything newer will still leave things broken.
Cheers for the pointer though, very much appreciated, wouldn't have thought to trawl through to there.
slack _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
Mike Hunt Watchman
Joined: 19 Jul 2009 Posts: 5287
|
Posted: Fri Jul 31, 2009 3:11 pm Post subject: |
|
|
|
|
Back to top |
|
|
desultory Bodhisattva
Joined: 04 Nov 2005 Posts: 9410
|
Posted: Sat Aug 01, 2009 2:13 am Post subject: |
|
|
slack---line wrote: | I'm afraid I don't understand, since I've got this installed...
Code: |
# genlop -l | grep glibc
Wed Jul 29 01:42:09 2009 >>> sys-libs/glibc-2.9_p20081201-r2
|
...and it would appear that this version is masked under Funtoo...
Mike Hunt wrote: |
Okie dokie, now I understand why glibc-2.10 is masked in the funtoo portage.
Code: |
# grep -B 2 glibc /usr/portage/profiles/package.mask/funtoo-cautionary
# Daniel Robbins <drobbins@funtoo.org> (19 Jan 2008)
# Mask new versions for caution
>sys-libs/glibc-2.9_p20081201-r2 |
|
...and once installed I could mask on my system too with a similar entry in /etc/portage/package.mask no? | The mask applies to versions logically later than sys-libs/glibc-2.9_p20081201-r2, given that sys-libs/glibc-2.9_p20081201-r2 is the version currently installed on that system it should be allowed by that mask. If you intend to mask sys-libs/glibc-2.9_p20081201-r2 or later you should use >=sys-libs/glibc-2.9_p20081201-r2 as the masking entry. |
|
Back to top |
|
|
Mike Hunt Watchman
Joined: 19 Jul 2009 Posts: 5287
|
Posted: Sun Aug 02, 2009 2:59 pm Post subject: |
|
|
I misread something, I thought slack---line was using glibc-2.10. My mistake.
But the glibc mask in funtoo seems to be a good idea anyway...for caution |
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Mon Aug 03, 2009 10:09 am Post subject: |
|
|
Ooops, I wasn't reading things clearly either!
Made some progress on this this morning.
Booted the LiveCD, then...
Code: |
mount /dev/ps3da1 /mnt/gentoo
rm /mnt/gentoo/lib/*2.9.so
cd /mnt/gentoo
tar xjvf stage3-ppc64-32ul-20090524.tar.bz2 # <-- stage3 I originally installed
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev
cp /etc/resolv.conf /mnt/gentoo/etc
chroot /mnt/gentoo/ /bin/bash
env-update && source /etc/profile
export PS1="(chroot) $PS1"
|
Portage now seems to be back, but to help things get back to normal I...
Code: |
echo '>sys-libs/glibc-2.8_p20080602-r2' >> /etc/portage/package.mask
emerge -uDNa1 glibc
|
And that has downgraded from glibc-2.9_p20081201
The only concern I have is that I think the original LiveCD came with sys-libs/glibc-2.6.1 (it dates from 2007.0) but the stage3 I installed originally worked fine so fingers crossed.
Will try rebooting later and hopefully things won't be foo-bar'd any more.
slack _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
Mike Hunt Watchman
Joined: 19 Jul 2009 Posts: 5287
|
Posted: Mon Aug 03, 2009 12:54 pm Post subject: |
|
|
On my box (i686 - funtoo portage), the latest stable glibc is 2.9_p20081201-r2 : eix sys-libs/glibc wrote: | # eix sys-libs/glibc
[I] sys-libs/glibc
Available versions: (2.2) [P]2.2.5-r10!s [P]2.3.2-r12!s [P]2.3.5-r3!s [P]2.3.6-r4!s [P]2.3.6-r5!s 2.4-r4!s 2.5-r2!s 2.5-r3!s 2.5-r4!s 2.5.1!s 2.6!s 2.6.1!s 2.7-r2!s 2.8_p20080602!s 2.8_p20080602-r1!s 2.9_p20081201!s 2.9_p20081201-r2!s [M](~)2.10.1!s
{build crosscompile_opts_headers-only debug erandom gd glibc-compat20 glibc-omitfp hardened linuxthreads-tls multilib nls nptl nptlonly profile selinux userlocales vanilla}
Installed versions: 2.9_p20081201-r2 (2.2)!s(01:25:21 PM 05/03/2009)(nls -crosscompile_opts_headers-only -debug -gd -glibc-omitfp -hardened -multilib -profile -selinux -vanilla)
|
I never had any issues. |
|
Back to top |
|
|
slackline Veteran
Joined: 01 Apr 2005 Posts: 1471 Location: /uk/sheffield
|
Posted: Tue Aug 04, 2009 6:08 am Post subject: |
|
|
Handy to know that glibc-2.9_p20081201-r2 plays ball on both amd64 and x86, but it still doesn't want to play on ppc!
The above didn't work, it appears that portage won't downgrade glibc, and one of the other packages pulled in by 'emerge -uDNa1 glibc' broke things at some point.
I noticed this when I rebooted the LiveCD, re-extracted the stage3, and chrooted into the system again, as portage said downgrading glibc (with 'emerge -1 glibc') was a bad idea and refused to do it. At this point eix was showing both glibc-2.9 that had broken my system and the older glibc-2.8 from the stage3 install so and after restoring my /etc/make.conf and masking the newer glibc, I
Code: |
emerge -C =sys-libs/glibc-2.9_p20081201-r2
emerge -e system
|
and thats chugging away nicely now, with everything marked R (for re-emerging, so no up or downgrades). Its made it through 10 or so packages fine and fingers crossed it will keep going, after which I'll do the same for 'world'
Will update if successful (or otherwise!!!),
Cheers for the pointers and help,
slack _________________ "Science is what we understand well enough to explain to a computer. Art is everything else we do." - Donald Knuth |
|
Back to top |
|
|
|