3

A friend is running CentOS 5.8 on his server. It's a mostly harmless error but I'm tired of seeing it. I'm more familiar with debian, so I'm not sure how to generate or reconfigure locales. The usual binaries (locale-gen, dpkg, etc. ) I'm used to aren't on this server.

[root@localhost]# git pull origin master
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = "en_GB:en",
    LC_ALL = "en_US.utf8",
    LANG = "en_GB"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
From git.com:www
 * branch            master     -> FETCH_HEAD
Already up-to-date.

Everything seems fine with the locales.

LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8

And it is a supported locale.

[root@localhost]# locale -a | grep en_US
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
Poe
  • 321
  • 1
  • 5
  • 17

3 Answers3

4

What are the contents of /etc/sysconfig/i18n?

I typically set all of my servers to LANG="C" in that file. It's part of my build script, but it's helped me avoid terminal and emulation issues over the years. I'll update this with the real explanation later.

# /etc/sysconfig/i18n

LANG="C"
SYSFONT="latarcyrheb-sun16"
ewwhite
  • 194,921
  • 91
  • 434
  • 799
  • In my case the content of cat /etc/sysconfig/i18n `LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16"` and changing `LANG="C"` alone didn't give expected result – Hugo Dec 12 '12 at 14:08
  • Try changing the setting I specified, then log out and log in again. Test the `git pull`. – ewwhite Dec 12 '12 at 14:09
  • this fixed the git pull, but when I'm logging in there still is a message `-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)` and `perl -v` outputs the same error message mentioned in initial post – Hugo Dec 12 '12 at 14:46
  • We'd need to see the .bash_profile or .bashrc of the user, or to see if there are any additional items defined in the system-wide files. Try logging in as a different user, for instance. – ewwhite Dec 12 '12 at 15:00
  • 3
    They are the default .bash_profile and .bashrc files - nothing changed https://gist.github.com/4276441 I found out that adding `LC_CTYPE="en_US.UTF-8"` to /etc/sysconfig/i18n solved the problem – Hugo Dec 13 '12 at 13:44
  • Well, at least `/etc/sysconfig/i18n` was the right place to go! :) – ewwhite Dec 13 '12 at 22:38
  • I just wanted to add that this happened to me on C-5.8 when yum decided to upgrade something and botched it. One of the first symptoms for me was that yum stopped working (exact symptom was python could not 'import yum', and root underlying cause was python couldn't 'import _ssl'). There was also a glibc upgrade somewhere during this timeframe that adjusted a lot of /lib64/lib* symlinks to point to lib*-2.12.so libs instead of lib*-2.5.so libs). It's unclear whether those both contributed to this problem or not. I ended up restoring from a backup b/c it was easiest. – Todd Lyons Aug 06 '13 at 18:24
  • @Hugo nice work – pregmatch Feb 27 '14 at 16:18
4

The problem here is that you use a different locale setting on your personal system, than is installed on the server you sshed to.

Your local system uses en_GB while the remote system uses en_US.utf8. (Or I might have these reversed...either way, they don't match.)

So when you ssh to the system, your locale settings are passed along, but the remote system doesn't have locales installed to handle the en_GB language, so it falls back to the C locale.

You can resolve this in one of three ways:

  1. Change your local system to en_US.utf8. I see in your other question that this is what you did (due to Mac OS X's ssh being a little weird with locales).
  2. Install the en_GB locales on the remote system. On Red Hat 5 derived systems, you install the appropriate package group. On Red Hat 6 derived systems, all supported languages are always installed by default (though certain packages have their own language packs that also must be installed).
  3. Since the error is (in this case) completely harmless, ignore it.
Michael Hampton
  • 237,123
  • 42
  • 477
  • 940
1

This seems like a perl issue. Newer versions of perl doesn't have this issue. See output from my system:

$ perl -v

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = "en_US.UTF-8",
        LC_ALL = "en_US.UTF-8",
        LC_TYPE = "en_US.UTF-8",
        LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

This is perl, v5.8.6 built for x86_64-linux-thread-multi

Now see this output:

$ LC_ALL=C perl -v

This is perl, v5.8.6 built for x86_64-linux-thread-multi

Copyright 1987-2004, Larry Wall

Seems like perl 5.8.6 doesn't like the UTF-8 output?? Setting LC_ALL=C got rid of the warning.

I installed another version of perl (5.18) and that works with UTF-8 setting without any warning.

Pradeep
  • 11
  • 1