Bug 23821 - Нужные локали не копируются в chroot
: Нужные локали не копируются в chroot
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/postgresql8.4-server)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
: patch
:
:
  Show dependency tree
 
Reported: 2010-07-29 09:51 by
Modified: 2010-11-02 10:48 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2010-07-29 09:51:34
При service postgresql start нужные локали (ru_RU в моём случаи) не копируются
в chroot.

  Наблюдаб при системной локали определённой как:

$ cat /etc/sysconfig/i18n
LANG=ru_RU.UTF-8
SUPPORTED=ru_RU.UTF-8

или как:

$ cat /etc/sysconfig/i18n
LANG=ru_RU.UTF-8
SUPPORTED=ru_RU
------- Comment #2 From 2010-07-29 10:14:30 -------
Патч неверен:
во-первых, системная локаль не имеет никакого отношения к локали кластера
postgres;
во-вторых, настройте i18n для пользователя postgres перед инициализацией
кластера:

echo "LANG=xx" > /var/lib/psql/.i18n
------- Comment #3 From 2010-07-29 10:32:08 -------
(В ответ на комментарий №2)
> Патч неверен:
> во-первых, системная локаль не имеет никакого отношения к локали кластера
> postgres;

  OK, можно использовать /var/lib/pgsql/.i18n а не /etc/sysconfig/i18n

> во-вторых, настройте i18n для пользователя postgres перед инициализацией
> кластера:
> 
> echo "LANG=xx" > /var/lib/psql/.i18n

  Не помогает:

$ sudo -H sh -c 'echo "LANG=xx" > /var/lib/pgsql/.i18n'
$ sudo -H sh -c 'rm -fr /var/lib/pgsql-root/usr/lib/locale/ru_RU*'
$ sudo -H service postgresql start
Adjusting environment for postgresql:               [ DONE ]
/usr/bin/locale: Cannot set LC_CTYPE to default locale: No such file or
directory
/usr/bin/locale: Cannot set LC_MESSAGES to default locale: No such file or
directory
/usr/bin/locale: Cannot set LC_ALL to default locale: No such file or directory
Starting postgres service:                          [ DONE ]
Link postgresql socket:                             [FAILED]
------- Comment #4 From 2010-07-29 10:54:18 -------
(В ответ на комментарий №3)
> $ sudo -H sh -c 'echo "LANG=xx" > /var/lib/pgsql/.i18n'

  В смысле:

sudo -H sh -c 'echo "LANG=ru_RU.UTF-8" > /var/lib/pgsql/.i18n'
$ sudo -H sh -c 'rm -fr /var/lib/pgsql-root/usr/lib/locale/ru_RU*'
$ sudo -H service postgresql start
Adjusting environment for postgresql:               [ DONE ]
Starting postgres service:                          [ DONE ]
Link postgresql socket:                             [FAILED]

  Локали не скопировались:

$ sudo -H ls -lA /var/lib/pgsql-root/usr/lib/locale/
total 0
------- Comment #5 From 2010-07-29 11:11:59 -------
(В ответ на комментарий №1)
> Исправляющий патч см.
> http://git.altlinux.org/people/solo/packages/postgresql8.4.git?p=postgresql8.4.git;a=commitdiff;h=22bdd4e9d297573d4cff257eeb2bd61fa74953b5;hp=61a667bcea30b97e3a1a3dbc7ebac70d9e3ff22f

  Обновлённый патч см.
http://git.altlinux.org/people/solo/packages/postgresql8.4.git?p=postgresql8.4.git;a=commitdiff;h=cb3f2308b81e046893a3f26165489c5b064b9f69

  С ним:

$ sudo -H sh -c 'echo "LANG=ru_RU.UTF-8" > /var/lib/pgsql/.i18n'
$ sudo -H sh -c 'rm -fr /var/lib/pgsql-root/usr/lib/locale/ru_RU*'
$ sudo -H service postgresql start
Adjusting environment for postgresql:               [ DONE ]
Starting postgres service:                          [ DONE ]
Link postgresql socket:                             [ DONE ]

  Локали скопировались:

$ sudo -H ls -lA /var/lib/pgsql-root/usr/lib/locale/
total 20
drwxr-xr-x 3 root root 4096 Jul 29 11:10 ru_RU
drwxr-xr-x 3 root root 4096 Jul 29 11:10 ru_RU.cp1251
drwxr-xr-x 3 root root 4096 Jul 29 11:10 ru_RU.iso88595
drwxr-xr-x 3 root root 4096 Jul 29 11:10 ru_RU.koi8r
drwxr-xr-x 3 root root 4096 Jul 29 11:10 ru_RU.utf8
------- Comment #6 From 2010-07-29 11:15:06 -------
Ваш обновленный патч неверен, потому что неверен.

Похоже инициализацию локали postgres сломало обновление пакета setup:

- /etc/profile.d/lang.*sh: do not source i18n files if
  non-empty LANG is already set (closes: #11814).

Таким образом, при service postgresql start происходит следующее:
в /etc/init.d/functions выставляется LANG=POSIX
из-за этого в /etc/profile.d/0lang.sh не сорсится $HOME/.i18n
из-за этого кластер создается в локали POSIX и нужные локали не копируются

предлагаю следующий патч:
http://git.altlinux.org/people/thresh/packages/postgresql8.4.git?p=postgresql8.4.git;a=commit;h=6d6fe152986cf0f618bf83348a172ba637eeb468
------- Comment #7 From 2010-07-29 11:20:33 -------
> предлагаю следующий патч:

Константин, вы заставляете меня вспоминать пароли от багзиллы.

http://www.postgresql.org/docs/current/static/sql-createdatabase.html

из вышепреведённой ссылки следует, что теперь в chroot нужно копировать все
локали. просю реализовать.
------- Comment #8 From 2010-07-29 11:53:04 -------
(В ответ на комментарий №6)
> Ваш обновленный патч неверен, потому что неверен.
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^

  Формулировка попахивает бредом, т. к. ничего не объясняет. Патч работает =>
верен. Да, при этом он может быть не оптимальным и/или не слишком красивым (т.
к. лечит симптом, без анализа причин). 

> 
> Похоже инициализацию локали postgres сломало обновление пакета setup:
> 
> - /etc/profile.d/lang.*sh: do not source i18n files if
>   non-empty LANG is already set (closes: #11814).
> 
> Таким образом, при service postgresql start происходит следующее:
> в /etc/init.d/functions выставляется LANG=POSIX
> из-за этого в /etc/profile.d/0lang.sh не сорсится $HOME/.i18n
> из-за этого кластер создается в локали POSIX и нужные локали не копируются
> 
> предлагаю следующий патч:
> http://git.altlinux.org/people/thresh/packages/postgresql8.4.git?p=postgresql8.4.git;a=commit;h=6d6fe152986cf0f618bf83348a172ba637eeb468

  Если поможет -- это более красивае решение чем у меня.
------- Comment #9 From 2010-07-29 12:02:53 -------
(In reply to comment #8)
> (В ответ на комментарий №6)
> > Ваш обновленный патч неверен, потому что неверен.
>                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 
>   Формулировка попахивает бредом, т. к. ничего не объясняет. Патч работает =>
> верен. Да, при этом он может быть не оптимальным и/или не слишком красивым (т.
> к. лечит симптом, без анализа причин). 

Парсить руками пользовательский файл конфигурации locale -- хак.
------- Comment #10 From 2010-07-30 13:39:04 -------
(В ответ на комментарий №7)
> > предлагаю следующий патч:
> 
> Константин, вы заставляете меня вспоминать пароли от багзиллы.
> 
> http://www.postgresql.org/docs/current/static/sql-createdatabase.html
> 
> из вышепреведённой ссылки следует, что теперь в chroot нужно копировать все
> локали. просю реализовать.

Присоединяюсь к просьбе.
Теперь локалей может использоваться несколько в одном кластере и имеет смысл
копировать их полностью, если уж chroot используем.
------- Comment #11 From 2010-11-02 10:48:15 -------
Видимо можно закрывать:

* Mon Aug 09 2010 Konstantin Pavlov <thresh@altlinux.org> 8.4.4-alt2
- Copy all locale files in chroot (fixes #23821).