Corrija o erro Cannot set LC_ALL to default locale no Ubuntu
By Fernando Mariano
- 3 minutes read - 501 wordsAo inicializar uma instância do Ubuntu Server você pode encontrar algumas mensagens de erros relacionadas à definição do locale do sistema operacional. Tive que resolver esse bug nas VMs que criei na Digital Ocean, Amazon EC2 e também no Virtual Box, porém acredito que em outros ambientes este problema possa se repetir. Abaixo as mensagens de erros encontradas:
locale: Cannot set LC_ALL to default locale: No such file or directory
perl: warning: Please check that your locale settings:
locale: Cannot set LC_CTYPE to default locale: No such file or directory
Todas as mensagens estão relacionadas à falta de configuração do locale do sistema operacional, por exemplo, na Digital Ocean as VMs são criadas com o locale em inglês. Isso ocorre pois o sistema tenta traduzir os caracteres do console para pt_BR quando se conecta remotamente por um desktop em Português.
Erros retornados quando não há locale suportado pelo computador remoto
Algumas falhas que ocorrem caso o locale pt_BR.UTF-8 não seja adicionado ao sistema:
Execução do comando locale:
root@ubuntu:~# locale
**locale: Cannot set LC_ALL to default locale: No such file or directory**
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=pt_BR.UTF-8
LC_TIME=pt_BR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=pt_BR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=pt_BR.UTF-8
LC_NAME=pt_BR.UTF-8
LC_ADDRESS=pt_BR.UTF-8
LC_TELEPHONE=pt_BR.UTF-8
LC_MEASUREMENT=pt_BR.UTF-8
LC_IDENTIFICATION=pt_BR.UTF-8
LC_ALL=
Execução dos comandos: aptitude update && aptitude dist-upgrade
# aptitude update && aptitude dist-upgrade
Get: 10 https://mirrors.digitalocean.com/ubuntu/ trusty-updates/main python3-software-properties all 0.92.37 \[19.4 kB\]
Fetched 2911 kB in 0s (6074 kB/s)
**perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "pt_BR.UTF-8",
LC_MONETARY = "pt_BR.UTF-8",
LC_ADDRESS = "pt_BR.UTF-8",
LC_TELEPHONE = "pt_BR.UTF-8",
LC_NAME = "pt_BR.UTF-8",
LC_MEASUREMENT = "pt_BR.UTF-8",
LC_IDENTIFICATION = "pt_BR.UTF-8",
LC_NUMERIC = "pt_BR.UTF-8",
LC_PAPER = "pt_BR.UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory**
(Reading database ... 59014 files and directories currently installed.)
Preparing to unpack .../bash_4.3-7ubuntu1_amd64.deb ...
Unpacking bash (4.3-7ubuntu1) over (4.3-6ubuntu1) ...
Correção da configuração do locale com dois comandos
A correção é simples, apenas execute os comandos para adicionar e reconfigurar os locales en_US e pt_BR:
locale-gen en_US en_US.UTF-8 pt_BR.UTF-8
dpkg-reconfigure locales
Faça logout e login novamente via SSH e você não receberá novas mensagens de erro.
root@ubuntu:~# locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC=pt_BR.UTF-8
LC_TIME=pt_BR.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=pt_BR.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=pt_BR.UTF-8
LC_NAME=pt_BR.UTF-8
LC_ADDRESS=pt_BR.UTF-8
LC_TELEPHONE=pt_BR.UTF-8
LC_MEASUREMENT=pt_BR.UTF-8
LC_IDENTIFICATION=pt_BR.UTF-8
LC_ALL=
Update para 16.10:
No Ubuntu 16.10 ficou mais fácil. Recentemente criei um droplet na Digital Ocean e recebi a seguinte mensagem já com os comandos para solução do problema:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (pt_BR.UTF-8): No such file or directory
_____________________________________________________________________
WARNING! Your environment specifies an invalid locale.
The unknown environment variables are:
LC_CTYPE=pt_BR.UTF-8 LC_ALL=
This can affect your user experience significantly, including the
ability to manage packages. You may install the locales by running:
sudo apt-get install language-pack-pt
or
sudo locale-gen pt_BR.UTF-8
To see all available language packs, run:
apt-cache search "^language-pack-\[a-z\]\[a-z\]$"
To disable this message for all users, run:
sudo touch /var/lib/cloud/instance/locale-check.skip
É isso, se tiver alguma dúvida é só comentar!