
У моего друга на сервере установлен CentOS 5.8. Это в основном безобидная ошибка, но мне надоело ее видеть. Я больше знаком с Debian, поэтому не знаю, как генерировать или перенастраивать локали. Обычные бинарные файлы (locale-gen, dpkg и т. д.), к которым я привык, на этом сервере отсутствуют.
[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.
С локациями вроде все в порядке.
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
И это поддерживаемая локаль.
[root@localhost]# locale -a | grep en_US
en_US
en_US.iso88591
en_US.iso885915
en_US.utf8
решение1
Каково содержание /etc/sysconfig/i18n
?
Обычно я устанавливаю все свои серверы LANG="C"
в этом файле. Это часть моего скрипта сборки, но это помогло мне избежать проблем с терминалом и эмуляцией на протяжении многих лет. Я обновлю это с реальным объяснением позже.
# /etc/sysconfig/i18n
LANG="C"
SYSFONT="latarcyrheb-sun16"
решение2
Проблема в том, что вы используете в своей персональной системе другие региональные настройки, чем те, которые установлены на сервере, ssh
на который вы переходите.
Ваша локальная система использует , en_GB
а удаленная система использует en_US.utf8
. (Или я могу поменять их местами... в любом случае они не совпадают.)
Таким образом, когда вы ssh
подключаетесь к системе, ваши настройки локали передаются, но в удаленной системе не установлены локали для обработки этого en_GB
языка, поэтому она возвращается к C
локали.
Эту проблему можно решить одним из трех способов:
- Измените локальную систему на
en_US.utf8
. Я вижу вВаш другой вопросчто именно это вы и сделали (из-за того, что Mac OS Xssh
немного странно работает с локалями). - Установите
en_GB
локали на удаленной системе. В системах, производных от Red Hat 5, выустановить соответствующую группу пакетов. В системах на основе Red Hat 6 все поддерживаемые языки всегда устанавливаются по умолчанию (хотя некоторые пакеты имеют свои собственные языковые пакеты, которые также необходимо установить). - Поскольку ошибка (в данном случае) совершенно безвредна, проигнорируйте ее.
решение3
Похоже, это проблема perl. В более новых версиях perl этой проблемы нет. Смотрите вывод моей системы:
$ 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").
Это perl, v5.8.6, собранный для x86_64-linux-thread-multi
Теперь посмотрите на этот вывод:
$ LC_ALL=C perl -v
This is perl, v5.8.6 built for x86_64-linux-thread-multi
Copyright 1987-2004, Larry Wall
Похоже, perl 5.8.6 не любит вывод UTF-8?? Установка LC_ALL=C избавила от предупреждения.
Я установил другую версию Perl (5.18), и она работает с настройкой UTF-8 без каких-либо предупреждений.