<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>39530</bug_id>
          
          <creation_ts>2021-01-10 19:41:55 +0300</creation_ts>
          <short_desc>ldd segfault при сборке пакета под i586</short_desc>
          <delta_ts>2021-01-13 12:25:43 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>rpm-build</component>
          <version>unstable</version>
          <rep_platform>x86_64</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P5</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Aleksey Cheusov">vle</reporter>
          <assigned_to name="placeholder@altlinux.org">placeholder</assigned_to>
          <cc>arseny</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>iv</cc>
    
    <cc>ldv</cc>
    
    <cc>legion</cc>
    
    <cc>placeholder</cc>
    
    <cc>vle</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>195334</commentid>
    <comment_count>0</comment_count>
    <who name="Aleksey Cheusov">vle</who>
    <bug_when>2021-01-10 19:41:55 +0300</bug_when>
    <thetext>При сборке пакета lmdbg-1.3.0-alt1 под i586 крешится ldd(1) как показано ниже.
Воспроизводится как в сборочнице, так и в локальном хешере.
Под x86_64 не воспроизводится.

Finding Requires (using /usr/lib/rpm/find-requires)
Executing: /bin/sh -e /usr/src/tmp/rpm-tmp.gpym1I
find-requires: running scripts (cpp,debuginfo,files,lib,pam,perl,pkgconfig,pkgconfiglib,python,rpmlib,shebang,shell,static,symlinks,systemd-services)
/usr/lib/rpm/ldd: line 100: 108570 Segmentation fault      LD_TRACE_LOADED_OBJECTS=1 LD_WARN=$warn LD_BIND_NOW=$bind_now LD_DEBUG=$debug LD_LIBRARY_VERSION=$verify_out LD_PRELOAD=&quot;$rtld_preload&quot; &quot;$rtld&quot; --library-path &quot;$rpath&quot; &quot;$rtld_target&quot;
ldd: ERROR: : trace failed
find-requires: ERROR: /usr/lib/rpm/lib.req failed

Полный лог здесь: http://git.altlinux.org/tasks/264463/logs/events.1.1.log.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195360</commentid>
    <comment_count>1</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2021-01-12 13:53:10 +0300</bug_when>
    <thetext>/usr/lib/rpm/find-requires спотыкается на /usr/src/tmp/lmdbg-buildroot/usr/lib/debug/usr/lib/liblmdbg.so.0.0.debug. Точнее, падает (в i586-м хешере на x86_64) команда

LD_TRACE_LOADED_OBJECTS=1  /lib/ld-linux.so.2 --library-path /usr/src/tmp/lmdbg-buildroot/lib:/usr/src/tmp/lmdbg-buildroot/usr/lib /usr/src/tmp/lmdbg-buildroot/usr/lib/debug/usr/lib/liblmdbg.so.0.0.debug

Интересно, что просто /usr/bin/ldd /usr/src/tmp/lmdbg-buildroot/usr/lib/debug/usr/lib/liblmdbg.so.0.0.debug не сегфолтится так как

$ /lib/ld-linux.so.2 --verify /usr/src/tmp/lmdbg-buildroot/usr/lib/debug/usr/lib/liblmdbg.so.0.0.debug; echo $?
2

Ну потому что реально это не совсем настоящий &quot;ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped&quot;, что бы там file по этому поводу не думал.

С точки зрения lmdbg проблема в том, что из-за недосмотра автора спека на 32-битных архитектурах файлы debuginfo попадают в основной пакет. Такое вот тривиальное изменение, возможно, не является оптимальным вариантом (зачем в этом пакете симлинки?), но исправляет сборку на i586

 %files -n lib%name
-%_libdir/*
+%_libdir/*.so*


Неплохо бы куда-нибудь в rpmbuild добавить проверку, что файлы debuginfo ни в какие пакеты не попадают (кроме формируемых автоматически *-debuginfo), чтобы до find-requires получать в таких ситуациях вменяемую диагностику.

Также было бы полезно повысить информированность общественности о невероятных возможностях %define _scripts_debug 3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195361</commentid>
    <comment_count>2</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2021-01-12 16:26:25 +0300</bug_when>
    <thetext>(In reply to Ivan A. Melnikov from comment #1)
&gt; /usr/lib/rpm/find-requires спотыкается на
&gt; /usr/src/tmp/lmdbg-buildroot/usr/lib/debug/usr/lib/liblmdbg.so.0.0.debug.
&gt; Точнее, падает (в i586-м хешере на x86_64) команда
&gt; 
&gt; LD_TRACE_LOADED_OBJECTS=1  /lib/ld-linux.so.2 --library-path
&gt; /usr/src/tmp/lmdbg-buildroot/lib:/usr/src/tmp/lmdbg-buildroot/usr/lib
&gt; /usr/src/tmp/lmdbg-buildroot/usr/lib/debug/usr/lib/liblmdbg.so.0.0.debug
&gt; 
&gt; Интересно, что просто /usr/bin/ldd
&gt; /usr/src/tmp/lmdbg-buildroot/usr/lib/debug/usr/lib/liblmdbg.so.0.0.debug не
&gt; сегфолтится так как
&gt; 
&gt; $ /lib/ld-linux.so.2 --verify
&gt; /usr/src/tmp/lmdbg-buildroot/usr/lib/debug/usr/lib/liblmdbg.so.0.0.debug;
&gt; echo $?
&gt; 2

Мне кажется, что разница обусловлена парметрами, возможно, ldd -r тоже свалится.

&gt; Ну потому что реально это не совсем настоящий &quot;ELF 32-bit LSB shared object,
&gt; Intel 80386, version 1 (SYSV), dynamically linked, not stripped&quot;, что бы там
&gt; file по этому поводу не думал.
&gt; 
&gt; С точки зрения lmdbg проблема в том, что из-за недосмотра автора спека на
&gt; 32-битных архитектурах файлы debuginfo попадают в основной пакет. Такое вот
&gt; тривиальное изменение, возможно, не является оптимальным вариантом (зачем в
&gt; этом пакете симлинки?), но исправляет сборку на i586
&gt; 
&gt;  %files -n lib%name
&gt; -%_libdir/*
&gt; +%_libdir/*.so*

Это типовая ошибка упаковки.

Перевешиваю на rpm-build, но и там ошибки нет на самом деле.

&gt; Неплохо бы куда-нибудь в rpmbuild добавить проверку, что файлы debuginfo ни
&gt; в какие пакеты не попадают (кроме формируемых автоматически *-debuginfo),
&gt; чтобы до find-requires получать в таких ситуациях вменяемую диагностику.

Понятно ли, как идентифицировать файлы debuginfo?

&gt; Также было бы полезно повысить информированность общественности о
&gt; невероятных возможностях %define _scripts_debug 3.

И rpmbuild -vvv?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195364</commentid>
    <comment_count>3</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2021-01-12 18:20:41 +0300</bug_when>
    <thetext>&gt; &gt; Неплохо бы куда-нибудь в rpmbuild добавить проверку, что файлы debuginfo ни
&gt; &gt; в какие пакеты не попадают (кроме формируемых автоматически *-debuginfo),
&gt; &gt; чтобы до find-requires получать в таких ситуациях вменяемую диагностику.

Может проверка должны быть в sisyphus-check?

&gt; Понятно ли, как идентифицировать файлы debuginfo?

Not stripped (налицие секции .symtab) + .debug_info/.zdebug_info секция + расширение .debug + локация в /usr/{lib,src}/debug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195365</commentid>
    <comment_count>4</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2021-01-12 18:47:58 +0300</bug_when>
    <thetext>(Ответ для Vitaly Chikunov на комментарий #3)
&gt; &gt; &gt; Неплохо бы куда-нибудь в rpmbuild добавить проверку, что файлы debuginfo ни
&gt; &gt; &gt; в какие пакеты не попадают (кроме формируемых автоматически *-debuginfo),
&gt; &gt; &gt; чтобы до find-requires получать в таких ситуациях вменяемую диагностику.
&gt; 
&gt; Может проверка должны быть в sisyphus-check?

2. А ещё вариант - rpmbuild мог бы игнорировать файлы в /usr/lib/debug/*. Но тогда ошибка в спеке останется, но она не будет у нас ошибкой. Но, при возможном переходе в будущем на другой rpm она всплывёт с новой силой.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195367</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Gladkov">legion</who>
    <bug_when>2021-01-12 19:11:41 +0300</bug_when>
    <thetext>(Ответ для Vitaly Chikunov на комментарий #3)
&gt; Может проверка должны быть в sisyphus-check?
&gt; 
&gt; &gt; Понятно ли, как идентифицировать файлы debuginfo?

sisyphus_check не лезет в payload пакета.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195375</commentid>
    <comment_count>6</comment_count>
    <who name="Ivan A. Melnikov">iv</who>
    <bug_when>2021-01-13 10:34:16 +0300</bug_when>
    <thetext>(In reply to Vitaly Chikunov from comment #3)
&gt; &gt; &gt; Неплохо бы куда-нибудь в rpmbuild добавить проверку, что файлы debuginfo ни
&gt; &gt; &gt; в какие пакеты не попадают (кроме формируемых автоматически *-debuginfo),
&gt; &gt; &gt; чтобы до find-requires получать в таких ситуациях вменяемую диагностику.
&gt; 
&gt; Может проверка должны быть в sisyphus-check?

Идея добавления такой проверки в rpmbuild была в том, чтобы она выполнилась до find-requires, verify-elf и всего такого -- чтобы в случае проблем сборка пакета завершалась ошибкой с диагностикой от этой проверки, а не непонятным падением чего-то там. sisyphus-check, емнип, отрабатывает позже.

С другой стороны, если падение ldd будет исправлено по месту, порядок естественно станет не важен.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195376</commentid>
    <comment_count>7</comment_count>
    <who name="Aleksey Cheusov">vle</who>
    <bug_when>2021-01-13 12:20:59 +0300</bug_when>
    <thetext>Спек я, положим, поправлю, симлинки, допустим, уберу, но по-моему имеет смысл поправить ldd с тем, чтобы не падал все-таки. Тем более, что здесь есть люди, близкие к разработке glibc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195377</commentid>
    <comment_count>8</comment_count>
    <who name="Aleksey Cheusov">vle</who>
    <bug_when>2021-01-13 12:25:43 +0300</bug_when>
    <thetext>Забыл сказать. Для этого пакета в сборочницу нужно добавить пакет glibc-core-debuginfo. В противном случае его невозможно тестировать и выставить правильные зависимости. Потреба странная, но в данном конкретном случае обоснованная. Без debuginfo оно не работает. Сделайте плиз.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>