Header Shadow Image


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, see
perl -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 "man
perl" 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, see
perl -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 "man
perl" 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

Leave a Reply

You must be logged in to post a comment.


     
  Copyright © 2003 - 2013 Tom Kacperski (microdevsys.com). All rights reserved.

Creative Commons License
This work is licensed under a Creative Commons Attribution 3.0 Unported License