locale: Cannot set LC_CTYPE to default locale: No such file or directory
Getting this?
# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Check this:
[root@cm-r01nn02 yum.repos.d]# cat /etc/locale.conf
LANG=en_EN.UTF-8
[root@cm-r01nn02 yum.repos.d]#
should be:
[root@cm-r01nn01 ~]# cat /etc/locale.conf
LANG="en_US.UTF-8"
[root@cm-r01nn01 ~]#
You may also have empty libraries such as:
[root@cm-r01nn02 ~]# yum reinstall *glibc*
/sbin/ldconfig: File /lib64/libXcursor.so.1.0.2 is empty, not checked.
[root@cm-r01nn02 ~]# ls -altri /lib64/libXcursor.so.1.0.2
203505067 -rwxr-xr-x. 1 root root 0 Oct 30 12:38 /lib64/libXcursor.so.1.0.2
[root@cm-r01nn02 ~]#
What it should be:
[root@cm-r01nn01 ~]# ls -altri /lib64/libXcursor.so.1.0.2
201697422 -rwxr-xr-x. 1 root root 45200 Oct 30 12:38 /lib64/libXcursor.so.1.0.2
[root@cm-r01nn01 ~]#
Run the following to confirm if any files are empty:
[root@cm-r01nn01 ~]# ldconfig
[root@cm-r01nn01 ~]#
on a bad system:
[root@cm-r01nn02 ~]# ldconfig
ldconfig: File /lib64/libdrm.so.2.4.0 is empty, not checked.
ldconfig: File /lib64/libdrm_intel.so.1 is empty, not checked.
ldconfig: File /lib64/libdrm_intel.so.1.0.0 is empty, not checked.
ldconfig: File /lib64/libdrm_nouveau.so.2 is empty, not checked.
ldconfig: File /lib64/libdrm_nouveau.so.2.0.0 is empty, not checked.
ldconfig: File /lib64/libdrm_radeon.so.1 is empty, not checked.
ldconfig: File /lib64/libdrm_radeon.so.1.0.1 is empty, not checked.
ldconfig: File /lib64/libkms.so.1 is empty, not checked.
ldconfig: File /lib64/libkms.so.1.0.0 is empty, not checked.
ldconfig: File /lib64/libdrm.so.2 is empty, not checked.
ldconfig: File /lib64/libdrm_amdgpu.so.1.0.0 is empty, not checked.
ldconfig: File /lib64/libdrm_amdgpu.so.1 is empty, not checked.
ldconfig: File /lib64/libXfixes.so.3 is empty, not checked.
ldconfig: File /lib64/libXfixes.so.3.1.0 is empty, not checked.
ldconfig: File /lib64/libglapi.so.0 is empty, not checked.
ldconfig: File /lib64/libglapi.so.0.0.0 is empty, not checked.
ldconfig: File /lib64/libXdamage.so.1 is empty, not checked.
ldconfig: File /lib64/libXdamage.so.1.1.0 is empty, not checked.
ldconfig: File /lib64/libxshmfence.so.1 is empty, not checked.
ldconfig: File /lib64/libxshmfence.so.1.0.0 is empty, not checked.
ldconfig: File /lib64/libGLdispatch.so.0 is empty, not checked.
ldconfig: File /lib64/libGLdispatch.so.0.0.0 is empty, not checked.
ldconfig: File /lib64/libwayland-server.so.0 is empty, not checked.
ldconfig: File /lib64/libwayland-server.so.0.1.0 is empty, not checked.
ldconfig: File /lib64/libgbm.so.1 is empty, not checked.
ldconfig: File /lib64/libgbm.so.1.0.0 is empty, not checked.
ldconfig: File /lib64/libXcursor.so.1 is empty, not checked.
ldconfig: File /lib64/libXcursor.so.1.0.2 is empty, not checked.
ldconfig: File /lib64/libpcsclite.so.1 is empty, not checked.
ldconfig: File /lib64/libpcsclite.so.1.0.0 is empty, not checked.
ldconfig: File /lib64/libthai.so.0 is empty, not checked.
ldconfig: File /lib64/libthai.so.0.1.6 is empty, not checked.
ldconfig: File /lib64/libgraphite2.so.3 is empty, not checked.
ldconfig: File /lib64/libgraphite2.so.3.0.1 is empty, not checked.
ldconfig: File /lib64/libharfbuzz.so.0 is empty, not checked.
ldconfig: File /lib64/libharfbuzz.so.0.10705.0 is empty, not checked.
[root@cm-r01nn02 ~]#
Query the files using rpm -qf <FILE> then reinstall the package. Reboot the machine.
This was all due to some XFS corruption that occurred in the past. Likewise, check if any files on the OS are zero bytes:
for KEY in $( rpm –ql $(rpm -aq) ); do [[ ! -s $KEY && -r $KEY ]] && echo $KEY; done
Reinstall them if they are. After a FS corruption, many files were zero on our system. Reinstalling them can help by reinstalling the package itself. Compare the file output to another host that is working fine. You can use this command:
for KEY in $( cat t.txt ); do [[ -s $KEY ]] && echo $KEY; done
NOTE: Copy the file list found from corrupt host to the working host and run the above.
In the event that a file is corrupted but its file size is not zero, it may not be easy to find the said file without a direct comparison with another host. An alternative is to try and reinstall existing packages:
[root@cm-r01nn02 ~]# yum reinstall $(rpm -aq)
Lookup the LC_TYPE :
[root@cm-r01nn02 ~]# echo $LANG
C.UTF-8
[root@cm-r01nn02 ~]# echo $LC_CTYPE
[root@cm-r01nn02 ~]#
and in a good environment:
[root@cm-r01nn01 ~]# echo $LANG
en_US.UTF-8
[root@cm-r01nn01 ~]# echo $LC_CTYPE
en_US.UTF-8
[root@cm-r01nn01 ~]#
Finally, we copied the /usr/lib/locale/locale-archive from a good server to resolve the problem. But this begs the question: How is /usr/lib/locale/locale-archive generated? The strace, a good one, should stop at the locale-archive and not go any further like this:
[root@cm-r01nn02 ~]# strace locale 2>&1|grep -Ei "open|stat|exec"
execve("/bin/locale", [“locale”], [/* 21 vars */]) = 0
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=37662, …}) = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=2151672, …}) = 0
mmap(NULL, 3981792, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f371aab0000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=106075056, …}) = 0
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, …}) = 0
[root@cm-r01nn02 ~]#
But it did on a faulty server, suggesting this file may be generated on the target system. So I reinstalled glibc-common once more replacing the good copy from the other server. This time it worked despire generating a different locale-archive file:
[root@cm-r01nn02 ~]# history|grep strace
196 strace -p 3951
534 strace locale
690 strace locale 2>&1|grep -Ei "open|stat"
827 strace locale | grep -Ei "open|stat"
828 strace locale 2>&1 | grep -Ei "open|stat"
832 strace locale 2>&1 | grep -Ei "open|stat"
852 strace locale
855 strace locale|grep -Ei "exec|open|access"
857 strace -e locale
858 strace -e open locale
859 strace -e trace=open,read locale
860 strace -ff -e trace=open locale
863 strace -ff -o trace locale
979 strace locale
980 strace locale 2>&1|grep -Ei "open|stat|exec"
1003 strace locale
1004 history|grep strace
[root@cm-r01nn02 ~]# strace locale 2>&1|grep -Ei "open|stat|exec"
execve("/bin/locale", [“locale”], [/* 21 vars */]) = 0
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=37662, …}) = 0
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=2151672, …}) = 0
mmap(NULL, 3981792, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f371aab0000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=106075056, …}) = 0
fstat(1, {st_mode=S_IFIFO|0600, st_size=0, …}) = 0
[root@cm-r01nn02 ~]#
[root@cm-r01nn02 ~]#
[root@cm-r01nn02 ~]#
[root@cm-r01nn02 ~]# rpm -qf /usr/lib/locale/locale-archive
glibc-common-2.17-260.el7_6.4.x86_64
[root@cm-r01nn02 ~]#
[root@cm-r01nn02 ~]#
[root@cm-r01nn02 ~]# sha1sum /usr/lib/locale/locale-archive /root/locale-archive
8698125a0ab14cd3ae969d3c21b867b9cb490227 /usr/lib/locale/locale-archive
8698125a0ab14cd3ae969d3c21b867b9cb490227 /root/locale-archive
[root@cm-r01nn02 ~]# yum reinstall glibc-common -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
epel/x86_64/metalink | 16 kB 00:00:00
* base: mirror.csclub.uwaterloo.ca
* epel: mirror.csclub.uwaterloo.ca
* extras: mirror.csclub.uwaterloo.ca
* updates: mirror.csclub.uwaterloo.ca
base | 3.6 kB 00:00:00
cloudera-manager | 2.9 kB 00:00:00
epel | 4.7 kB 00:00:00
extras | 3.4 kB 00:00:00
updates | 3.4 kB 00:00:00
vmware-tools | 951 B 00:00:00
(1/2): epel/x86_64/updateinfo | 983 kB 00:00:00
(2/2): epel/x86_64/primary_db | 6.7 MB 00:00:01
Resolving Dependencies
–> Running transaction check
—> Package glibc-common.x86_64 0:2.17-260.el7_6.4 will be reinstalled
–> Finished Dependency Resolution
Dependencies Resolved
=================================================================================================================
Package Arch Version Repository Size
=================================================================================================================
Reinstalling:
glibc-common x86_64 2.17-260.el7_6.4 updates 12 M
Transaction Summary
=================================================================================================================
Reinstall 1 Package
Total download size: 12 M
Installed size: 115 M
Downloading packages:
Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
glibc-common-2.17-260.el7_6.4.x86_64.rpm | 12 MB 00:00:02
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : glibc-common-2.17-260.el7_6.4.x86_64 1/1
Verifying : glibc-common-2.17-260.el7_6.4.x86_64 1/1
Installed:
glibc-common.x86_64 0:2.17-260.el7_6.4
Complete!
[root@cm-r01nn02 ~]#
[root@cm-r01nn02 ~]#
[root@cm-r01nn02 ~]#
[root@cm-r01nn02 ~]# sha1sum /usr/lib/locale/locale-archive /root/locale-archive
4a40d739c365ddcd3756283b0d4241dfb9b9dfcd /usr/lib/locale/locale-archive
8698125a0ab14cd3ae969d3c21b867b9cb490227 /root/locale-archive
[root@cm-r01nn02 ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
[root@cm-r01nn02 ~]# reboot
Using username "mds.xyz\tom".
Using keyboard-interactive authentication.
Password:
Last login: Wed Apr 10 07:14:48 2019 from 192.168.0.93
tom@mds.xyz@cm-r01nn02:~] 🙂 $ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
tom@mds.xyz@cm-r01nn02:~] 🙂 $ sudo su –
[sudo] password for tom@mds.xyz:
Last login: Wed Apr 10 07:15:02 EDT 2019 on pts/0
[root@cm-r01nn02 ~]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
[root@cm-r01nn02 ~]#
If that still doesn't work, consider these two outputs from a correctly working system and an incorrectly working system:
[root@cm-r01nn02 ~]# localectl status
System Locale: LANG=en_US.UTF-8
VC Keymap: us
X11 Layout: us
[root@cm-r01nn02 ~]#
Incorrectly working one:
[root@awx01 ~]# localectl status
System Locale: n/a
VC Keymap: us
X11 Layout: us
[root@awx01 ~]#
Set the system locale:
[root@awx01 ~]# localectl set-locale LANG=en_US.UTF-8
restart, if necessary, then run:
locale
checking further still we see this:
[root@awx01 locale]# strings locale-archive|grep -Ei en_us.utf8
en_US.utf8
[root@awx01 locale]# ls -altri /etc/profile
134299888 -rw-r–r–. 1 root root 1795 Nov 5 2016 /etc/profile
[root@awx01 locale]# scp cm-r01nn01:/etc/profile /etc/profile-cm-r01nn01
profile 100% 1819 280.5KB/s 00:00
[root@awx01 locale]# diff /etc/profile /etc/profile-cm-r01nn01
65c65
< for i in /etc/profile.d/*.sh ; do
—
> for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
[root@awx01 locale]#
so we update the system but still the same issue. locale is a perl executable so we check the following:
[root@awx01 etc]# perl -v
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LANG = "C.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
(with 39 registered patches, seeperl -V for more detail)
Copyright 1987-2012, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "manperl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
[root@awx01 etc]#
vs a working system:
[root@cm-r01nn01 locale]# perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
(with 39 registered patches, seeperl -V for more detail)
Copyright 1987-2012, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "manperl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
[root@cm-r01nn01 locale]#
Let's look for the locale explicitly:
[root@awx01 etc]# find / -iname en_US.UTF-8
[root@awx01 etc]#
vs a working system:
[root@cm-r01nn01 locale]# find / –iname en_US.UTF-8
/usr/share/X11/locale/en_US.UTF-8
[root@cm-r01nn01 locale]#
find what installs that file:
[root@cm-r01nn01 locale]# rpm -qf /usr/share/X11/locale/en_US.UTF-8
libX11-common-1.6.5-2.el7.noarch
[root@cm-r01nn01 locale]#
and reinstall that package or install it:
[root@awx01 etc]# yum install libX11-common.noarch
reboot and check if locale assignment worked. If this still doesn't work, then we need to revisit our steps above since the following may be true when running grep on hidden files:
[root@awx01 ~]# cat .bash_profile |grep LANG
# export LANG="C.UTF-8"
[root@awx01 ~]# grep -ER LANG= *
[root@awx01 ~]#
To avoid the above issue, consider running greps in this manner:
[root@awx01 ~]# grep -rER “LANG=” * .[^.]*
.bash_profile:# export LANG="C.UTF-8"
[root@awx01 ~]# vi .bash_profile
[root@awx01 ~]#
And your issue should be solved! 🙂
Thx,
TK