Bug 23821

Summary: Нужные локали не копируются в chroot
Product: Sisyphus Reporter: solo <solo>
Component: postgresql8.4-serverAssignee: Denis Smirnov <mithraen>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: misha, vvk
Version: unstableKeywords: patch
Hardware: all   
OS: Linux   

Description solo 2010-07-29 09:51:34 MSD
При 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 Konstantin Pavlov 2010-07-29 10:14:30 MSD
Патч неверен:
во-первых, системная локаль не имеет никакого отношения к локали кластера postgres;
во-вторых, настройте i18n для пользователя postgres перед инициализацией кластера:

echo "LANG=xx" > /var/lib/psql/.i18n
Comment 3 solo 2010-07-29 10:32:08 MSD
(В ответ на комментарий №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 solo 2010-07-29 10:54:18 MSD
(В ответ на комментарий №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 solo 2010-07-29 11:11:59 MSD
(В ответ на комментарий №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 Konstantin Pavlov 2010-07-29 11:15:06 MSD
Ваш обновленный патч неверен, потому что неверен.

Похоже инициализацию локали 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 algor 2010-07-29 11:20:33 MSD
> предлагаю следующий патч:

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

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

из вышепреведённой ссылки следует, что теперь в chroot нужно копировать все локали. просю реализовать.
Comment 8 solo 2010-07-29 11:53:04 MSD
(В ответ на комментарий №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 Konstantin Pavlov 2010-07-29 12:02:53 MSD
(In reply to comment #8)
> (В ответ на комментарий №6)
> > Ваш обновленный патч неверен, потому что неверен.
>                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^
> 
>   Формулировка попахивает бредом, т. к. ничего не объясняет. Патч работает =>
> верен. Да, при этом он может быть не оптимальным и/или не слишком красивым (т.
> к. лечит симптом, без анализа причин). 

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

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

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