В GNU Linux установил mariadb-server в lxc контейнере Fedora 28 amd64 командой dnf install mariadb-server
, перед этим установил glibc-langpack-ru.
После установки и сравнения с хостовой машиной обнаружил отсутствие в /usr/share/mariadb/
поддержки других языков, кроме английского
т.е. нет /usr/share/mariadb/russian/
Соответственно при входе в cli-mysql контейнера и выполнении SET lc_messages = 'ru_RU';
получаю ошибку ERROR 1231 (42000): Variable 'lc_messages' can't be set to the value of 'ru_RU'
На хосте эта же команда выполняется без ошибок, видимо по причине наличия /usr/share/mariadb/russian/
.
UPD: в контейнере успешно выполняется SET lc_messages = 'en_US';
Из-за этой ошибки например не работает phpMyAdmin.
Вывод rpm -qf на хосте:
rpm -qf /usr/share/mariadb/russian/errmsg.sys
mariadb-errmsg-10.3.10-1.fc29.x86_64
В контейнере
rpm -qf /usr/share/mariadb/english/errmsg.sys
mariadb-errmsg-10.2.18-1.fc28.x86_64
Т.е. пакет фактически один и тот же, но разворачивается в зависимости от окружения по разному.
Вывод locale на хосте и контейнере не отличается.
UPD2: Вывод rpm --showrc | grep lang
Хост -13: _install_langs all
-13: find_lang %{_rpmconfigdir}/find-lang.sh %{buildroot}
-13: go_arches %{golang_arches} %{gccgo_arches}
-13: golang_arches %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
-- add golang prefix
goname = "golang-" .. goname
-- golang-foo-foo-bar-foo names
Контейнер: -13: _install_langs C:en:en_US:en_US.UTF-8
-13: find_lang %{_rpmconfigdir}/find-lang.sh %{buildroot}
С чем это может быть связано?
UPD3: решение для указанного выше lxc контейнера
удалить файл /etc/rpm/macros.image-language-conf
переустановить пакет dnf reinstall mariadb-errmsg
контейнер, который вы используете, вероятно, подготовлен с «глубокими оптимизациями» (например).
в частности, программа rpm сконфигурирована не распаковывать файлы/каталоги, помеченные как «языковые» (кроме как для английского языка). приведён вывод для контейнера с hub.docker.com
:
$ grep -r install_langs /etc/rpm/
/etc/rpm/macros.image-language-conf:%_install_langs en_US
можно в этом файле добавить русский:
%_install_langs en_US:ru
или вообще все языки:
%_install_langs all
или вообще удалить эту строку из файла /etc/rpm/macros.image-language-conf
(да и вместе с файлом, если в нём больше ничего нет): по умолчанию будет как раз значение all
.
и уже после этого устанавливать пакет mariadb-server. а если он уже установлен, достаточно переустановить пакет с (локализованными) сообщениями:
$ sudo dnf reinstall mariadb-errmsg
благодаря чему происходит эта «магия»? благодаря тому, что в spec-файле, из которого собран (в т.ч. и) пакет mariadb-errmsg, каталоги с переводами сообщений упомянуты в макросе %lang(язык)
:
...
%files errmsg
...
%lang(ru) %{_datadir}/%{pkg_name}/russian
...
«языковая» метаинформация сохраняется внутри пакета. посмотреть (для установленного пакета) можно, например, так:
$ rpm -q --queryformat="[%{FILELANGS} %{FILENAMES}\n]" mariadb-errmsg
...
ru /usr/share/mariadb/russian
ru /usr/share/mariadb/russian/errmsg.sys
...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня динамическое добавление изображений на своём jsКак сделать реиницализацию функции https://github