Как мне уменьшить размер локаль-архива?

18

У меня есть необходимость уменьшить размер locale-archiveфайла в некоторых моих системах RHEL6.

Вот этот файл в моей системе:

[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

Итак, я сделал это ...

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

... так что я решил, что смогу избавиться zh_CNтак, как ...

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

... и я вижу zh_CN, не перечисляется больше так ...

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

... но размер locale-archiveне становится меньше ...

[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

... есть что-то еще, что мне нужно сделать?

Красный крикет
источник

Ответы:

24

Сначала вы можете удалить все ненужные локали, выполнив:

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

Где ^enможно заменить языком, который вы хотите сохранить

потом

$build-locale-archive

Если это дает вам ошибку, похожую на

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

Тогда попробуй это

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

Если это все еще не помогает, проверьте свою версию. Согласно этой странице более новые версии не имеют необходимых файлов для восстановления архива с целью экономии места. Вам нужно будет бежать

yum reinstall glibc-common

В более поздних выпусках Red Hat Enterprise Linux вы можете использовать dnfаналогичное приложение.

Джоэл Тейлор
источник
3
Я заметил, однако, что я теряю соединение SSH с хостом, когда я выполняю build-locale-archive... любой способ предотвратить это?
Красный Крикет
2
Я буду осторожен, пытаясь это сделать. Сломал мой сервер CentOS и мне понадобилось 30 минут, чтобы найти решение. unix.stackexchange.com/questions/246705/…
PJ Brunet
днф в рель ??? Конечно, вы имеете в виду
ням
1

В Amazon Linux

  1. Удалите неиспользуемые архивы из локаль-архива. Эта команда удаляет все, кроме тех, которые начинаются с en.

    localedef --delete-from-archive $(localedef --list-archive | grep -v -i ^en | xargs)
    
  2. Скопируйте файл locale-archive (с удаленными локалями) в новый файл locale-archive.tmpl

    cp /usr/lib/locale/locale-archive /usr/lib/locale/locale-archive.tmpl
    
  3. Запустите build-locale-archive

    build-locale-archive
    

Примечание. Если вы запустите build-locale-archive, он обнуляет файл .tmpl после каждого запуска, и при повторном запуске вы увидите ошибку:

build-locale-archive: cannot read archive header

Вы можете получить копию файла locale-archive.tmpl, либо скопировав текущий файл locale-archive в locale-archive.tmpl, либо загрузив и распаковав glibc-common. Если вы используете файл locale-archive.tmpl по умолчанию из RPM- build-locale-archiveпакета glibc и работаете с ним, он создаст полный (~ 102 МБ) архив локали. Вам нужно повторить вышеописанные шаги, чтобы получить архив меньшего размера.

В приведенном выше случае удаление всех локалей, кроме en_ *, в моем локаль-архиве уменьшилось с 102 МБ до 3,4 МБ.

Джеймс Макдональд
источник