Gentoo emerge dies with 'failed to open /dev/urandom' when wrong default python is configured.
So there I was - just for fun building my new Gentoo system, when all of a sudden, I wasn't. Building, that is. I wasn't building anything. In fact, part of the motivation for a clean build had been that emerging new things was getting tiresomely fragile. Anyway - here's what happened when I tried an emerge. The interesting part is where it says: Fatal Python error: Failed to open /dev/urandom
>>> Emerging (1 of 18) sys-libs/glibc-2.17 * Fetching files in the background. To view fetch progress, run * `tail -f /var/log/emerge-fetch.log` in another terminal. * glibc-2.17.tar.xz SHA256 SHA512 WHIRLPOOL size ;-) ... [ ok ] * glibc-2.17-patches-8.tar.bz2 SHA256 SHA512 WHIRLPOOL size ;-) ... [ ok ] make -j2 -s glibc-test make -j2 -s glibc-test >>> Unpacking source... * Checking gcc for __thread support ... [ ok ] * Checking kernel version (3.3.8 >= 2.6.16) ... [ ok ] * Checking linux-headers version (3.9.0 >= 2.6.16) ... [ ok ] >>> Unpacking glibc-2.17.tar.xz to /var/tmp/portage/sys-libs/glibc-2.17/work >>> Unpacking glibc-2.17-patches-8.tar.bz2 to /var/tmp/portage/sys-libs/glibc-2.17/work * Applying Gentoo Glibc Patchset 2.17-8 ... * 0035_all_glibc-2.16-i386-math-feraiseexcept-overhead.patch ... [ ok ] * 0059_all_glibc-2.19-make-4.0.patch ... [ ok ] * 0065_all_glibc-2.18-qecvt-guards.patch ... [ ok ] * 0070_all_glibc-2.18-localedef-page-align-1.patch ... [ ok ] * 0071_all_glibc-2.18-localedef-page-align-2.patch ... [ ok ] * 0072_all_glibc-2.18-localedef-page-align-3.patch ... [ ok ] * 0085_all_glibc-disable-ldconfig.patch ... [ ok ] * 0090_all_glibc-2.17-arm-ldso.cache.patch ... [ ok ] * 1005_all_glibc-sigaction.patch ... [ ok ] * 1008_all_glibc-2.16-fortify.patch ... [ ok ] * 1040_all_2.3.3-localedef-fix-trampoline.patch ... [ ok ] * 1055_all_glibc-resolv-dynamic.patch ... [ ok ] * 1505_all_glibc-nptl-stack-grows-up.patch ... [ ok ] * 1506_all_glibc-2.17-hppa-fpu.patch ... [ ok ] * 1507_all_glibc-2.17-hppa-ldso-flag.patch ... [ ok ] * 1507_all_hppa-ia64-DL_AUTO_FUNCTION_ADDRESS.patch ... [ ok ] * 1508_all_glibc-2.17-hppa-futex.patch ... [ ok ] * 1508_all_hppa-fanotify_mark.patch ... [ ok ] * 3020_all_glibc-tests-sandbox-libdl-paths.patch ... [ ok ] * 5063_all_glibc-dont-build-timezone.patch ... [ ok ] * 6024_all_alpha-fix-signal-thunk-unwind-info.patch ... [ ok ] * 6230_all_arm-glibc-hardened.patch ... [ ok ] * Done with patching * Using GNU config files from /usr/share/gnuconfig * Updating scripts/config.sub [ ok ] * Updating scripts/config.guess [ ok ] >>> Source unpacked in /var/tmp/portage/sys-libs/glibc-2.17/work Fatal Python error: Failed to open /dev/urandom /usr/lib/portage/bin/phase-functions.sh: line 87: 4204 Aborted "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/ilter-bash-environment.py "${filtered_vars}" * ERROR: sys-libs/glibc-2.17::gentoo failed (unpack phase): * filter-bash-environment.py failed * * Call stack: * ebuild.sh, line 714: Called __ebuild_main 'unpack' * phase-functions.sh, line 993: Called __filter_readonly_variables '--filter-features' * phase-functions.sh, line 137: Called die * The specific snippet of code: * "${PORTAGE_PYTHON:-/usr/bin/python}" "${PORTAGE_BIN_PATH}"/filter-bash-environment.py "${filtered_vars}" || die "filter-bash-enviroment.py failed"
So what was going on here? Well as it turned out, my system has three versions of python loaded, and Gentoo's portage system (of which emerge is part) seems to rely on you not using python 3. After a short bit of fiddling with "eselect python list" and "eselect python set", to get the default python back to 2.7, the build ran like a charm.
So anyway - this has got to count as the most bizarrely mis-reported error in my most recent years. "/dev/urandom" was working fine. I could start it and stop it ("/etc/init.d/urandom stop" and so forth) and I could use it to access randomness. Why then did I get the "failed to open" message with one version of python, and not with another. Answers on a postcard? Whatever - this was a public service announcement.