Como reduzo o tamanho do arquivo de localidade?

18

Preciso reduzir o tamanho do locale-archivearquivo em alguns dos meus sistemas RHEL6.

Aqui está esse arquivo no meu sistema:

[root@-dev-007 locale]# ls -l
total 96800
-rw-r--r--. 1 root root 99158704 Sep  9 15:22 locale-archive
-rw-r--r--. 1 root root        0 Jun 20  2012 locale-archive.tmpl

Então eu fiz isso ...

[root@-dev-007 locale]# localedef --list | grep zh_CN
zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8

... então eu pensei que poderia me livrar zh_CNassim ...

[root@-dev-007 locale]# localedef --delete-from-archive zh_CN

... e eu posso ver zh_CNque não é mais listado assim ...

[root@-dev-007 locale]# localedef --list | grep zh_CN
zh_CN.gb18030
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8

... mas o tamanho do locale-archivenão fica menor ...

[root@-dev-007 locale]# ls -l  
total 96800
-rw-r--r--. 1 root root 99158704 Sep  9 17:16 locale-archive
-rw-r--r--. 1 root root        0 Jun 20  2012 locale-archive.tmpl

... há mais alguma coisa que preciso fazer?

Grilo vermelho
fonte

Respostas:

24

Você pode remover primeiro todos os códigos de idioma desnecessários fazendo:

$localedef --list-archive | grep -v -i ^en | xargs localedef --delete-from-archive

Onde ^enpode ser substituído pelo código do idioma que você deseja manter

Então

$build-locale-archive

Se isso der um erro semelhante a

$build-locale-archive
/usr/sbin/build-locale-archive: cannot read archive header

Então tente isso

$mv /usr/lib/locale/locale-archive /usr/lib/locale/locale-archive.tmpl
$build-locale-archive

Se isso ainda falhar, verifique sua versão. De acordo com esta página, as versões mais recentes não possuem os arquivos necessários para reconstruir o arquivo, a fim de economizar espaço. Você precisará executar

yum reinstall glibc-common

Nas versões posteriores do Red Hat Enterprise Linux, você pode usar dnfum aplicativo semelhante.

Joel Taylor
fonte
3
Percebi que perdi minha conexão ssh com o host quando executo build-locale-archive... alguma maneira de impedir isso?
Red Cricket
2
Eu seria cuidadoso ao tentar isso. Quebrou meu servidor CentOS e levou 30 minutos para descobrir uma solução. unix.stackexchange.com/questions/246705/…
PJ Brunet
dnf em rhel ??? Certamente você quer dizer yum ;-) #
1144 Dani_l
1

No Amazon Linux

  1. Exclua os arquivos não utilizados do arquivo de localidade. Este comando exclui todos, exceto os que começam com en.

    localedef --delete-from-archive $(localedef --list-archive | grep -v -i ^en | xargs)
    
  2. Copie o arquivo locale-archive (com localidades removidas) para o novo arquivo locale-archive.tmpl

    cp /usr/lib/locale/locale-archive /usr/lib/locale/locale-archive.tmpl
    
  3. Execute build-locale-archive

    build-locale-archive
    

Nota: Se você executar o build-locale-archive, zerará o arquivo .tmpl após cada execução e, quando você executá-lo novamente, verá o erro:

build-locale-archive: cannot read archive header

Você pode obter uma cópia do arquivo locale-archive.tmpl, copiando o arquivo locale-archive atual para locale-archive.tmpl ou baixando e descompactando glibc-common. Se você usar o arquivo locale-archive.tmpl padrão do RPM glibc-common e executar build-locale-archivecontra ele, ele criará um archive de localidade completo (~ 102 MB). Você precisa repetir as etapas acima para obter o arquivo menor.

No caso acima, excluindo todos os códigos de idioma, exceto os en_ *, meu arquivo de códigos de idioma passou de 102 MB para 3,4 MB

James McDonald
fonte