Bug 53250 - У brp-debuginfo проблемы с пробелами
Summary: У brp-debuginfo проблемы с пробелами
Status: ASSIGNED
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-02-28 00:07 MSK by Ivan A. Melnikov
Modified: 2025-02-28 17:26 MSK (History)
6 users (show)

See Also:


Attachments
соберите этот спек чтобы воспроизвести проблему (396 bytes, text/x-rpm-spec)
2025-02-28 00:07 MSK, Ivan A. Melnikov
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Ivan A. Melnikov 2025-02-28 00:07:24 MSK
Created attachment 17840 [details]
соберите этот спек чтобы воспроизвести проблему

Так получилось, что мне очень понадобилось собрать библиотеку с пробелом в имени. Так я узнал, что у нас brp-debuginfo вообще не способен справиться с бинарниками с пробельными символами в именах.

Для воспроизведения ошибки проще всего попробовать запаковать тривиальную программу (самодостаточный спек в приложении). Содержательная чать buildroot получается такой:

$ find /tmp/.private/iv/spaces-buildroot/usr/
/tmp/.private/iv/spaces-buildroot/usr/
/tmp/.private/iv/spaces-buildroot/usr/bin
/tmp/.private/iv/spaces-buildroot/usr/bin/space test

То есть, пакуется исполняемый файл "/usr/bin/space test".

Ошибка выглядит так:

date: ./usr/bin/space: No such file or directory
date: test: No such file or directory
error: Bad exit status from /tmp/.private/iv/rpm-tmp.35317 (%install)
Comment 1 Ivan A. Melnikov 2025-02-28 00:10:29 MSK
Пока писал репорт заметил, что у одного xargs там есть `--delimeter='\n'`, а у другого нет. Пойду попробую сделать патч.

Конечно, тогда останутся проблемы с переносом строки в имени, но это уже не так актуально.
Comment 2 Ivan A. Melnikov 2025-02-28 00:34:51 MSK
Тривиальный фикс достаточно тривиален

https://git.altlinux.org/people/iv/packages/rpm.git?a=commitdiff;h=f983dc085c41f3790dee026286a873b5855e7994

но явно не достаточен:

[...]
Finding debuginfo files (using /usr/lib/rpm/find-debuginfo-files)
Executing: /bin/sh -e /tmp/.private/iv/rpm-tmp.lC8hA9
Creating spaces-debuginfo package
Processing files: spaces-debuginfo-0.1-alt1
error: Two files on one line: /usr/lib/debug/usr/bin/space
error: File must begin with "/": test.debug


RPM build errors:
    Two files on one line: /usr/lib/debug/usr/bin/space
    File must begin with "/": test.debug
Comment 3 Ivan A. Melnikov 2025-02-28 00:39:37 MSK
В качестве workaround'а можно воспользоваться %add_debuginfo_skiplist.
Comment 4 Vitaly Chikunov 2025-02-28 08:49:57 MSK
А разве в rpm можно запаковать файлы с пробелами.
Comment 5 Ivan A. Melnikov 2025-02-28 08:57:09 MSK
(In reply to Vitaly Chikunov from comment #4)
> А разве в rpm можно запаковать файлы с пробелами.

А почему нет?

[iv@team ~]$ grep -c  ' '  /ALT/sisyphus/{x86_64,noarch}/base/contents_index
/ALT/sisyphus/x86_64/base/contents_index:13097
/ALT/sisyphus/noarch/base/contents_index:67962

Если добавить в начало тестового спека `%add_debuginfo_skiplist %_bindir`, он соберётся; с установкой и удалением тоже вроде проблем никаких.
Comment 6 Vitaly Chikunov 2025-02-28 09:18:36 MSK
Возможно, я тестировал как раз на бинарниках и принял эту ошибку за то, что "вообще не работает". Так же, Арсений упоминал https://bugzilla.altlinux.org/show_bug.cgi?id=51874#c6 что есть какая-то проблема с пробелами, но пояснения не дал, я решил тогда, что она относится к предложенному там патчу.
Comment 7 Vitaly Chikunov 2025-02-28 10:01:44 MSK
Ну да, если указать в спеке имя файла с пробелом

  %files
  %_bindir/test generated

то ошибка rpm-build: "Two files on one line". То что запаковывается - это по glob или по вложенным в диры файлам.
Comment 8 Vitaly Chikunov 2025-02-28 10:09:42 MSK
Может кто знает как это решается в апстримах? В смысле разрешено ли там указывать файлы с пробелами в %files, может для этого требуется \ или " ".
Comment 9 Ivan A. Melnikov 2025-02-28 10:17:37 MSK
(In reply to Vitaly Chikunov from comment #7)
> То что запаковывается - это по
> glob или по вложенным в диры файлам.

Внезапно, ещё вот так работает:

%files
"%_bindir/space test"

А экранирование `\` или `[ ]` нет.
Comment 10 Ivan A. Melnikov 2025-02-28 10:22:54 MSK
Разбор проблем:

https://github.com/rpm-software-management/rpm/issues/1749#issuecomment-1020420616

До конца по ссылке пока не дочитал читал.
Comment 11 Vitaly Chikunov 2025-02-28 11:07:26 MSK
(In reply to Ivan A. Melnikov from comment #10)
> Разбор проблем:
> 
> https://github.com/rpm-software-management/rpm/issues/1749#issuecomment-
> 1020420616
> 
> До конца по ссылке пока не дочитал читал.

Спасибо. Апстрим захотели как можно больше приблизить формат строки к shell и сделали большие изменения для этого. Мы можем пока просто заключать эти генеренные имена файлов в кавычки.

Тестовое задание https://git.altlinux.org/tasks/376351/ (пока еще собирается)
Comment 12 Ivan A. Melnikov 2025-02-28 16:50:02 MSK
> Тестовое задание https://git.altlinux.org/tasks/376351/

С rpm-build их этого задания пакеты -- и тестовый спек, и тот, на котором я вчера наткнулся на эту проблему -- успешно собрались. Debuginfo для spaces из тестового спека ставится и работает в gdb.

При этом, насколько я понимаю работу и применение strtokWithQuotes, сломать эти изменения ничего не должны.
Comment 13 Vitaly Chikunov 2025-02-28 17:26:26 MSK
Надо подумать может не так сложно отключить поддержку glob внутри кавычек, это решит и баг #51874.