Como corrigir erro de LOCALE no Linux Debian/Ubuntu
Hoje precisei olhar os logs de um servidor FTP que roda sob o pure-ftp e percebi que os horários estavam todos em UTC .
Como eu precisava enviar parte dos logs a um terceiro que faz uso dele e não está familiarizado com sistemas, poderia acabar ocorrendo algum mal entendido. Resolvi então que deveria manter os logs de todas as aplicações no fuso horário brasileiro.
De acordo com a documentação do pure-ftp ele utiliza as variáveis de ambiente para determinar qual será o horário incluído nos logs e a única configuração é a se deve utilizar GMT ou não e por padrão ele usa NO.
NOTA: Esse problema também acontece para diversos programas perl.
Então o passo correto é verificar se o locale do servidor (ou da sessão que usarei para iniciar o serviço do FTP) está em pt_BR. Não estava.
Usei a receita básica para modificar o locale. (Segue abaixo se quiser fazer o mesmo).
- Adicionar as entrada do idioma nos arquivos de locale do debian (deve ser o mesmo para Ubuntu).
# echo "pt_BR ISO-8859-1" >> /var/lib/locales/supported.d/local # echo "pt_BR pt_BR.ISO-8859-1" >> /etc/locale.alias
- Abrir o arquivo de definições de ambiente /etc/environment e /etc/default/locale e incluir as entradas abaixo
LANG="pt_BR" LANGUAGE="pt_BR:pt:en"
- E por último executar os comandos
# locale-gen # dpkg-reconfigure locales
Tudo correu Ok. Quando executei locale ficou assim:
# 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 LANG=pt_BR LANGUAGE=pt_BR:pt:en LC_CTYPE="pt_BR" LC_NUMERIC="pt_BR" LC_TIME="pt_BR" LC_COLLATE="pt_BR" LC_MONETARY="pt_BR" LC_MESSAGES="pt_BR" LC_PAPER="pt_BR" LC_NAME="pt_BR" LC_ADDRESS="pt_BR" LC_TELEPHONE="pt_BR" LC_MEASUREMENT="pt_BR" LC_IDENTIFICATION="pt_BR" LC_ALL=
e ao tentar reiniciar o serviço de FTP
# service pure-ftpd restart Restarting FTP XXXXXX: perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LANG = "pt_BR" are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Running: /usr/sbin/pure-ftpd -l puredb:/etc/pure-ftpd/db/pureftpd.pdb -O clf:/var/log/pure-ftpd/transfer.log -A -E -u 1000 -B
Depois de várias tentativas de corrigir, consegui fazendo o seguinte:
Executei os comandos
# export LANGUAGE=pt_BR.UTF-8 # export LANG=pt_BR.UTF-8 # export LC_ALL=pt_BR.UTF-8 # locale-gen pt_BR.UTF-8 Generating locales... pt_BR.UTF-8... up-to-date Generation complete. # dpkg-reconfigure locales en_US.ISO-8859-1... done en_US.UTF-8... done pt_BR.UTF-8... up-to-date Generation complete.
Após isso, o serviço FTP iniciou normalmente conforme as informações abaixo.
# service pure-ftpd restart Restarting FTP XXXXXXX: Running: /usr/sbin/pure-ftpd -l puredb:/etc/pure-ftpd/db/pureftpd.pdb -O clf:/var/log/pure-ftpd/transfer.log -A -E -u 1000 -B