mariadb - отсутствует /usr/share/mariadb/russian

128
17 апреля 2019, 20:50

В 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

Answer 1

контейнер, который вы используете, вероятно, подготовлен с «глубокими оптимизациями» (например).

в частности, программа 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
...
READ ALSO
PostMapping в программе, Java, Spring

PostMapping в программе, Java, Spring

Есть у меня две формы c post

128
Слайд калькулятор

Слайд калькулятор

Есть два input и два popup окна

183
Как сделать реинциализацию функции?

Как сделать реинциализацию функции?

У меня динамическое добавление изображений на своём jsКак сделать реиницализацию функции https://github

139