GNU Guile warning: failed to install locale

I’m neither a Guix user, nor a Guile user, but let’s try. I guess that guix shell guile -- guile reproduces the behavior. So let’s use strace to see whether something interesting happens before the warning:

guix shell guile glibc-locales strace -- strace guile --version |& grep -E "warning:.*install locale"  -B6
openat(AT_FDCWD, "/run/current-system/locale/2.33/en_US.UTF-8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/current-system/locale/2.33/en_US.utf8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/current-system/locale/2.33/en_US/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/current-system/locale/2.33/en.UTF-8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/current-system/locale/2.33/en.utf8/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/run/current-system/locale/2.33/en/LC_IDENTIFICATION", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "guile: warning: failed to instal"..., 41guile: warning: failed to install locale

In case you don’t know openat(...), it’s what actually opens files. Or at least tries to. In this case, the openat call returns ENOENT: the file does not exist.

My LANG environment variable is en_US.UTF-8, which explains all those tries. Either way, this shows that the locale system looks for the locales within /run/current-system, a path that does not exist on Debian. I guess that /run/current-system/ is a Guix thing about the, well, current system configuration, but that’s not available on Debian.

However, the important part here is that my LANG was used within the guix shell environment. The issue vanishes as soon as we use a --pure (or --container) shell, as this won’t transfer the LANG env:

$ guix shell --pure guile glibc-locales strace -- strace guile --version |& grep -E "warning:.*install locale"  -B6

No output, therefore no warning. So all in all, I guess this is an issue of Guix@Debian not setting the current-system correctly.

2 Likes