| Summary: | _install_langs ломает установку glibc-locales | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | Ivan A. Melnikov <iv> | ||||
| Component: | glibc | Assignee: | Gleb F-Malinovskiy <glebfm> | ||||
| Status: | NEW --- | QA Contact: | qa-sisyphus | ||||
| Severity: | normal | ||||||
| Priority: | P5 | CC: | andy, at, glebfm, imz, ldv, placeholder, vt | ||||
| Version: | unstable | ||||||
| Hardware: | x86_64 | ||||||
| OS: | Linux | ||||||
| Attachments: |
|
||||||
|
Description
Ivan A. Melnikov
2026-02-18 23:13:16 MSK
Created attachment 20722 [details]
лог выполнения команды из описания бага с 'rpmi -vvv' в роли rpmi
Из логов:
D: skipnstate 040755 1 ( 0, 0) 0 /usr/share/locale/en_GB
D: skipnstate 040755 1 ( 0, 0) 0 /usr/share/locale/en_GB/LC_MESSAGES
D: create 100644 1 ( 0, 0) 1433 /usr/share/locale/en_GB/LC_MESSAGES/libc.mo;69961b4f
error: unpacking of archive failed on file /usr/share/locale/en_GB/LC_MESSAGES/libc.mo;69961b4f: cpio: open
Вообще интересная история:
$ rpm -qa glibc-locales
glibc-locales-2.40.0.142.2eb180-alt1.x86_64
$ rpm -q --qf '[%{FILENAMES} =%{FILELANGS}=\n]' glibc-locales | grep /usr/share/locale/en_GB
/usr/share/locale/en_GB =en_GB=
/usr/share/locale/en_GB/LC_MESSAGES =en_GB=
/usr/share/locale/en_GB/LC_MESSAGES/libc.mo ==
/usr/share/locale/en_GB/LC_TIME =en_GB=
То есть, файл без заявленного языка лежит в каталогах, относящизся к языку en_GB (замечу, не en, как все нормальные люди). Похоже, что из-за этого каталоги пропускаются при установке, и создать файл не получается.
Наверное можно говорить, что это проблема упаковки glibc-locales. Но rpm вроде как должен справляться с такими ситуациями.
А --install-langs="en_GB:ru" работает :-) Кстати, там явно должно было вывестись errno. Если это пофиксить, то полный текст такой: error: unpacking of archive failed on file /usr/share/locale/en_GB/LC_MESSAGES/libc.mo;69963d42: cpio: open failed - No such file or directory Сравнение rpmi -vvv # обычного инсталла $ grep usr/share/locale/en_GB c D: create 040755 1 ( 0, 0) 0 /usr/share/locale/en_GB D: create 040755 1 ( 0, 0) 0 /usr/share/locale/en_GB/LC_MESSAGES D: create 100644 1 ( 0, 0) 1433 /usr/share/locale/en_GB/LC_MESSAGES/libc.mo;699641ed # с --install-langs="en:ru" $ grep usr/share/locale/en_GB a D: skipnstate 040755 1 ( 0, 0) 0 /usr/share/locale/en_GB D: skipnstate 040755 1 ( 0, 0) 0 /usr/share/locale/en_GB/LC_MESSAGES D: create 100644 1 ( 0, 0) 1433 /usr/share/locale/en_GB/LC_MESSAGES/libc.mo;69964187 error: unpacking of archive failed on file /usr/share/locale/en_GB/LC_MESSAGES/libc.mo;69964187: cpio: open failed - No such file or directory То есть дира /usr/share/locale/en_GB не создается (skipnstate) и потом в ней не может быть создан файл libc.mo. Думаю, это правильное поведение запаковки пакета glibc или find-lang из rpm-build.
$ rpm -q glibc-locales --qf '[%{filenames} %{FILELANGS}\n]' | grep /usr/share/locale/en_GB
/usr/share/locale/en_GB en_GB
/usr/share/locale/en_GB/LC_MESSAGES en_GB
/usr/share/locale/en_GB/LC_MESSAGES/libc.mo
/usr/share/locale/en_GB/LC_TIME en_GB
Дира /usr/share/locale/en_GB/LC_MESSAGES помечена как относящая к локали en_GB, а файл в этой дире не помечен, поэтому, он распаковывается в диру, которой нет.
%files locales -f libc.lang
Файл libc.lang генерируется в спеке.
builder@x86_64:~/RPM/BUILD/glibc-2.40.0.142.2eb180-alt1$ grep /usr/share/locale/en_GB libc.lang
/usr/share/locale/en_GB/LC_MESSAGES/libc.mo
%lang(en_GB) %dir /usr/share/locale/en_GB
%lang(en_GB) %dir /usr/share/locale/en_GB/LC_MESSAGES
%lang(en_GB) %dir /usr/share/locale/en_GB/LC_TIME
find-lang для всех libc.mo определяет их локаль по буквам до `_`, то есть для en_GB она %lang(en), затем есть специальное условие, что токен `%lang(en)` удаляется.
(In reply to Vitaly Chikunov from comment #4) > Кстати, там явно должно было вывестись errno. Если это пофиксить, то полный > текст такой: > > error: unpacking of archive failed on file > /usr/share/locale/en_GB/LC_MESSAGES/libc.mo;69963d42: cpio: open failed - No > such file or directory FYI, коммит, который это добавляет, в задании https://git.altlinux.org/tasks/408814/ Как альтернативный вариант - rpm мог бы создавать все надкаталоги в случае ENOENT. |