Recently emerging package =dev-lang/go-1.13.4 under Gentoo failed on one of our virtual servers with:
--- /usr/lib/go/test/fixedbugs/issue27836.dir/ Traceback (most recent call last): File "/usr/lib64/python3.6/site-packages/portage/dbapi/_MergeProcess.py", line 234, in _spawn prev_mtimes=self.prev_mtimes, counter=counter) File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 1788, in wrapper return f(self, *args, **kwargs) File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 5385, in merge counter=counter) File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 4548, in treewalk rval = self._merge_contents(srcroot, destroot, cfgfiledict) File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 4828, in _merge_contents self.settings["EPREFIX"].lstrip(os.sep), cfgfiledict, mymtime): File "/usr/lib64/python3.6/site-packages/portage/dbapi/vartree.py", line 5225, in mergeme encoding=_encodings['merge']) File "/usr/lib64/python3.6/site-packages/portage/util/movefile.py", line 256, in movefile selinux.rename(src, dest) File "/usr/lib64/python3.6/site-packages/portage/__init__.py", line 246, in __call__ rval = self._func(*wrapped_args, **wrapped_kwargs) File "/usr/lib64/python3.6/site-packages/portage/_selinux.py", line 71, in rename os.rename(src, dest) UnicodeEncodeError: 'ascii' codec can't encode character '\xc4' in position 83: ordinal not in range(128) >>> Failed to install dev-lang/go-1.13.4, Log file: >>> '/var/tmp/portage/dev-lang/go-1.13.4/temp/build.log'
The above log shows that the emerge fails in the installation phase when moving the files to the proper path in the system. The problem there is a non-ASCII character in the file name or path, but the environment is set to use ASCII as language.
The solution is to check if the environment LANG is set and what it contains. In this case, we should set the LANG environment to utf8.
export LANG=en_US.UTF-8
Most of the cases this kind of error could occur with virtual servers, docker (or the other kind of containers like lxc, podman and so on) containers and chroot jails or screens with changed user with su or sudo! In our case, the LANG just got missed because of a switch user procedure in a container and the emerge failed with the above error. When the LANG is missing probably the default value is “C”. In fact, check not only LANG but also the “LC_ALL” environment variable (it may have different value, which is wrong!), which also should be “en_US.UTF-8”:
export LC_ALL=en_US.UTF-8
Or try removing it at all with
unset LC_ALL