Необходимо для того, чтобы сохранять нестандарные секции в ELF-ах, которые по умолчанию у нас удаляются на этапе strip'а. Пример изменений в rpm-build в таске 345861 (https://packages.altlinux.org/en/tasks/345861/). Там же пример использования нового макроса на примере racket-core. На примере racket-core: хотелось бы _рабочий_ бинарь с секцией .rackboot, но без остального "мусора" (например - /usr/bin/racket).
Я не вносил и не реализовывал идею стрипать всё неизвестное, но, по моему разумению, мы это сделали по следующим причинам: — чтобы эти секции, попав в память процесса, не выступали случайно или злонамеренно трамплином для уязвимостей; — чтобы малыми усилиями уменьшить вероятность непреднамеренной активации всяких misfeature в ELF-подсистеме и тулчейне, где при исполнении определённым образом составленных программ или библиотек автомагически отключаются различные меры безопасности или включаются меры, ведущие к уязвимостям; — наконец, чтобы ELF-файлы не были толще, чем нужно.
(In reply to Anton Zhukharev from comment #0) > Необходимо для того, чтобы сохранять нестандарные секции в ELF-ах, которые > по умолчанию у нас удаляются на этапе strip'а. > > Пример изменений в rpm-build в таске 345861 > (https://packages.altlinux.org/en/tasks/345861/). > Там же пример использования нового макроса на примере racket-core. > > На примере racket-core: хотелось бы _рабочий_ бинарь с секцией .rackboot, но > без остального "мусора" (например - /usr/bin/racket). А что в этом .rackboot находится? Какого рода контент? Подлежит ли эта секция отображению в память при работе, и если да, то как?
(Ответ для Arseny Maslennikov на комментарий #2) > (In reply to Anton Zhukharev from comment #0) > > Необходимо для того, чтобы сохранять нестандарные секции в ELF-ах, которые > > по умолчанию у нас удаляются на этапе strip'а. > > > > Пример изменений в rpm-build в таске 345861 > > (https://packages.altlinux.org/en/tasks/345861/). > > Там же пример использования нового макроса на примере racket-core. > > > > На примере racket-core: хотелось бы _рабочий_ бинарь с секцией .rackboot, но > > без остального "мусора" (например - /usr/bin/racket). > > А что в этом .rackboot находится? Какого рода контент? Подлежит ли эта > секция отображению в память при работе, и если да, то как? Это, конечно, нужно у меня из октября 2022-го нужно спрашивать - сейчас я уже и не вспомню что там такого находится конкретно - в памяти остался только один факт: без этой секции бинарь /usr/bin/racket даже запускаться не собирался (была довольно странная ошибка, в которой ключевым словом было "boot"). Сейчас попробовал сделать элементарный "strip /usr/bin/racket" и бинарь запускается. Странно - раньше было другое поведение. Видимо, что-то изменилось с того времени и сейчас мне нужно время, чтобы выяснить что конкретно и необходимость этой фичи в целом после такого.
Есть ли прецеденты в других дистрибутивах? В Федоре делают так %global _find_debuginfo_opts --keep-section .rustc В `rr` нужно сохранить секцию .page но почему-то примера я не нашел.
(In reply to Anton Zhukharev from comment #3) > Сейчас попробовал сделать элементарный "strip /usr/bin/racket" и бинарь > запускается. > Странно - раньше было другое поведение. Видимо, что-то изменилось с того > времени и сейчас мне нужно время, чтобы выяснить что конкретно и > необходимость этой фичи в целом после такого. Если в спеке racket-core-8.8-alt2 убрать строки: ======================================== %brp_strip_debug %_bindir/* %brp_strip_debug %racket_libdir/* ======================================== , пересобрать пакет и установить в систему, то /usr/bin/racket работать, все таки, перестает (причем, если strip'нуть его уже после установки при помощи обычного "strip /usr/bin/racket", то все работает нормально). Вот так выглядит результат после установки с простым удалением тех двух строк: ======================================== user@host $ racket malformed fasl-object header in petite malformed boot file petite Aborted ========================================
(In reply to Vitaly Chikunov from comment #4) > Есть ли прецеденты в других дистрибутивах? > > В Федоре делают так > > %global _find_debuginfo_opts --keep-section .rustc > > В `rr` нужно сохранить секцию .page но почему-то примера я не нашел. Тот же Racket: https://src.fedoraproject.org/rpms/racket/blob/rawhide/f/racket.spec
(In reply to Vitaly Chikunov from comment #4) > В `rr` нужно сохранить секцию .page но почему-то примера я не нашел. Видимо, плохо искал %brp_strip_none %_libdir/rr/librr*.so
(In reply to Vitaly Chikunov from comment #7) > (In reply to Vitaly Chikunov from comment #4) > > В `rr` нужно сохранить секцию .page но почему-то примера я не нашел. > > Видимо, плохо искал > > %brp_strip_none %_libdir/rr/librr*.so По названию кажется, что заставит вообще не strip'ать бинари Мне же - в частности - нужно, чтобы strip происходил, но оставалась только одна секция .rackboot