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

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

    <bug>
          <bug_id>19707</bug_id>
          
          <creation_ts>2009-04-21 18:25:03 +0400</creation_ts>
          <short_desc>Автоматическая генерация debug-пакетов</short_desc>
          <delta_ts>2011-03-09 14:29:09 +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</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>24863</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Konstantin Pavlov">thresh</reporter>
          <assigned_to name="at@altlinux.org">at</assigned_to>
          <cc>at</cc>
    
    <cc>becase</cc>
    
    <cc>boris</cc>
    
    <cc>crux</cc>
    
    <cc>enp</cc>
    
    <cc>erthad</cc>
    
    <cc>evg</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>kas</cc>
    
    <cc>ktirf</cc>
    
    <cc>lav</cc>
    
    <cc>ldv</cc>
    
    <cc>mike</cc>
    
    <cc>php-coder</cc>
    
    <cc>placeholder</cc>
    
    <cc>redbaron</cc>
    
    <cc>vt</cc>
    
    <cc>wrar</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>89845</commentid>
    <comment_count>0</comment_count>
    <who name="Konstantin Pavlov">thresh</who>
    <bug_when>2009-04-21 18:25:03 +0400</bug_when>
    <thetext>Нужна функция автоматической генерации debug-пакетов, аналогичная реализованной в Debian и Fedora.

Подробности реализации в fedora можно посмотреть в их rpm 4.7 macros.in:166, scripts/find-debuginfo.sh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89848</commentid>
    <comment_count>1</comment_count>
    <who name="Sir Raorn">raorn</who>
    <bug_when>2009-04-21 19:26:22 +0400</bug_when>
    <thetext>В SuSE, кажется, тоже было что-то подобное.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90634</commentid>
    <comment_count>2</comment_count>
    <who name="Andrey Rahmatullin">wrar</who>
    <bug_when>2009-05-03 22:02:56 +0400</bug_when>
    <thetext>Нерабочий proof of concept тут:
http://git.altlinux.org/people/wrar/packages/rpm.git?p=rpm.git;a=shortlog;h=refs/heads/debuginfo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>90635</commentid>
    <comment_count>3</comment_count>
    <who name="Andrey Rahmatullin">wrar</who>
    <bug_when>2009-05-03 22:04:47 +0400</bug_when>
    <thetext>(В ответ на комментарий №1)
&gt; В SuSE, кажется, тоже было что-то подобное.
Это в дебиане &quot;что-то подобное&quot;, во всех остальных rpm-baes дистрибутивах оно просто через rpm-4.2+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>91434</commentid>
    <comment_count>4</comment_count>
    <who name="redbaron">redbaron</who>
    <bug_when>2009-05-18 20:16:57 +0400</bug_when>
    <thetext>прошу обратить внимание на фич реквест, полезная же вещь!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107523</commentid>
    <comment_count>5</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2010-03-08 20:24:23 +0300</bug_when>
    <thetext>Вообще очень интересно, как можно что-то отлаживать, отлавливать ошибки, если нормальной возможности получить отладочный вывод для программы из собранного пакета.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>110517</commentid>
    <comment_count>6</comment_count>
    <who name="Kirill A. Shutemov">kas</who>
    <bug_when>2010-07-12 16:33:17 +0400</bug_when>
    <thetext>Дима, есть мысли на этот счёт?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111031</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2010-08-05 20:36:33 +0400</bug_when>
    <thetext>(In reply to comment #2)
&gt; Нерабочий proof of concept тут:
&gt; http://git.altlinux.org/people/wrar/packages/rpm.git?p=rpm.git;a=shortlog;h=refs/heads/debuginfo

Почему нерабочий?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111032</commentid>
    <comment_count>8</comment_count>
    <who name="Andrey Rahmatullin">wrar</who>
    <bug_when>2010-08-05 20:44:00 +0400</bug_when>
    <thetext>(В ответ на комментарий №7)
&gt; &gt; Нерабочий proof of concept тут:
&gt; &gt; http://git.altlinux.org/people/wrar/packages/rpm.git?p=rpm.git;a=shortlog;h=refs/heads/debuginfo
&gt; 
&gt; Почему нерабочий?

http://lists.altlinux.org/pipermail/devel/2009-May/170090.html
Хочет beecrypt из этого века.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>111056</commentid>
    <comment_count>9</comment_count>
    <who name="Kirill A. Shutemov">kas</who>
    <bug_when>2010-08-07 07:32:47 +0400</bug_when>
    <thetext>http://lists.altlinux.org/pipermail/devel/2010-August/183683.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112439</commentid>
    <comment_count>10</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2010-09-21 14:41:48 +0400</bug_when>
    <thetext>Спасибо Кириллу, beecrypt уже давно обновлён.
Кто будет катить камень дальше?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112563</commentid>
    <comment_count>11</comment_count>
    <who name="Kirill A. Shutemov">kas</who>
    <bug_when>2010-09-22 23:29:46 +0400</bug_when>
    <thetext>(In reply to comment #10)
&gt; Спасибо Кириллу, beecrypt уже давно обновлён.
&gt; Кто будет катить камень дальше?

Я собирался после gcc4.5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116933</commentid>
    <comment_count>12</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2011-01-08 04:58:50 +0300</bug_when>
    <thetext>Мужики, у нас же свой brp-strip, и он обрезает сильнее, чем в редхате (у нас используется &apos;strip --strip-unneeded&apos;, а в редхате используется &apos;eu-strip --strip-debug&apos;).  И в нём 100 тысяч миллионов опций.  Так что надо всё переделывать, причем неизвестно как. А просто так коммитить новые файлы в наш rpm смысла нет. В лучшем случае мы получим пустые/некогерентные debuginfo пакеты.

Принципиальный вопрос - надо ли обрезать .symtab.  У нас .symtab всегда обрезается.  В редхате .symtab не обрезается.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116934</commentid>
    <comment_count>13</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2011-01-08 06:53:25 +0300</bug_when>
    <thetext>Нет, американцы тоже .symtab отрезают, я не так понял в одном месте. Надо придумать, как совместить brb-strip и debuginfo, чтобы это работало одинаково для всех пакетов - работало хорошо и с минимальным количеством опций.

Дело в том что сейчас всякие опции в rpmbuild типа _strip_method или _strip_skiplist исходят из того, что бинарики собраны без -g.  А если бинарики собраны с -g, то debug можно отрезать в любом случае.  Короче смысол этих опций будет под вопросом.

Предлагаю для обдумывания следующую модель brp-strip+debuginfo: каждый ELF executable и ELF shared в билдруте принудительно обрезается (и создается /usr/lib/debug$f.debug файл).  Разница только сколько надо обрезать.  По умолчанию режим обрезания &quot;debug,comment,symbols&quot;.  Со стороны rpmbuild можно только изменить сколько надо обрезать, например, так:

%название_макроса_обрезания шелл-паттерн сколько-обрезать

E.g.

# keep symbols
%название_макроса_обрезания %_libdir/valgrind/*.so debug,comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116954</commentid>
    <comment_count>14</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2011-01-08 21:13:05 +0300</bug_when>
    <thetext>Мужики, короче я подумал, решил что надо делать отдельный *-debuginfo пакет на каждый подпакет, а пустых *-debuginfo пакетов делать не надо.  И чтобы у каждого *-debuginfo пакета была зависимость на свой подпакет.

А это не очень просто сделать.  Так что кому надо просьба не беспокоиться.  Я уже придумал как можно сделать.  А то американцы насрут - всё в один пакет и без всяких зависимостей - и считается что круто.

И ещё надо делать сделать замыкание *-debuginfo пакетов по завимостям.  То есть чтобы была &quot;сквозная отладка&quot;.  А не так там что на одном фрейме отладка есть а на другом нету.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116956</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Shigorin">mike</who>
    <bug_when>2011-01-08 23:09:11 +0300</bug_when>
    <thetext>И класть бы их хорошо в отдельный компонент, не classic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116966</commentid>
    <comment_count>16</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2011-01-09 10:53:03 +0300</bug_when>
    <thetext>Мужики, я нарисовал сишную часть, лежит у меня в rpm.git бранч debuginfo.  Работает пока примерно так:

LD_LIBRARY_PATH=$PWD/build/.libs rpmbuild --define &apos;__find_debuginfo_files while read -r f; do f=${f#$RPM_BUILD_ROOT}; if [ -f $RPM_BUILD_ROOT/usr/lib/debug$f.debug ]; then echo /usr/lib/debug$f.debug; fi; done&apos; -bb --short-circuit *.spec

То есть там будет две стадии - одна brp-debuginfo для всего билдрута в целом, а другая на каждый пакет, которая будет выцеживать нужные файлы.  Какие будут мнения.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117161</commentid>
    <comment_count>17</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2011-01-14 08:24:26 +0300</bug_when>
    <thetext>Мужчины, я выложил бранч debuginfo, там реализована мегафича - автоматическое удаление дупов исходников между *-debuginfo подпакетами.  На основе зависимостей между основными подпакетами!  Например, если пакет rpm требует пакет librpm, то из пакета rpm-debuginfo можно удалить пересекающиеся исходники, добавив зависимость на librpm-debuginfo. А пакет rpm-static требует пакет rpm.  Тогда, по этой же логике, из пакета rpm-static-debuginfo можно удлить исходники, пересекающиеся с rpm-debuginfo, и добавить зависимость на rpm-debuginfo.  Но rpm в свою очередь требует librpm.  Так что в пакете rpm-static-debuginfo по идее может вообще не остаться исходников!

Бранч debuginfo собираем, его можно собрать в хешере два раза и посмотреть результат (который появится на второй раз в результате сборки rpm&apos;а самим собой).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117248</commentid>
    <comment_count>18</comment_count>
    <who name="Vladimir Lettiev">crux</who>
    <bug_when>2011-01-18 11:30:59 +0300</bug_when>
    <thetext>(В ответ на комментарий №17)
&gt; Бранч debuginfo собираем, его можно собрать в хешере два раза и посмотреть
&gt; результат (который появится на второй раз в результате сборки rpm&apos;а самим
&gt; собой).

Пробовал собрать midori на x86_64. Создался пакет midori-debuginfo, но символы запаковались в /usr/lib/debug вместо /usr/lib64/debug и gdb их соотвественно автоматом не подхватывает.

В целом же фича просто потрясающая! Спасибо!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117249</commentid>
    <comment_count>19</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2011-01-18 11:33:40 +0300</bug_when>
    <thetext>По-моему должно быть /usr/lib/debug на обеих архитектурах.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117265</commentid>
    <comment_count>20</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2011-01-18 15:40:49 +0300</bug_when>
    <thetext>(In reply to comment #19)
&gt; По-моему должно быть /usr/lib/debug на обеих архитектурах.

Если /usr/lib/debug -- это префикс, за котором следует полный путь, включая %_libdir, то совершенно все равно, какой это префикс.  На данном этапе есть возможность выбрать такой же префикс, как и у других.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117267</commentid>
    <comment_count>21</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2011-01-18 15:54:47 +0300</bug_when>
    <thetext>Лучше сделать как в редхате, если нет других соображений. Я проверил, gdb действительно смотрит в /usr/lib64/debug (хотя в &quot;info gdb&quot; написано про /usr/lib/debug).  А valgrind - в /usr/lib/debug. Я помню, что valgrind у меня подцепил debuginfo пакет...

$ strings /usr/bin/gdb |grep /debug
/usr/lib64/debug
$ rpm -ql valgrind |xargs strings |grep /debug
m_debuginfo/debuginfo.c
/usr/lib/debug%s/%s
/usr/lib/debug/.build-id/%c%c/%s.debug

Да, подразумевается, что /usr/lib/debug - это префикс, за которым следует полный путь - будет выполняться что-то вроде eu-strip -f /usr/lib/debug$f.debug $f</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117276</commentid>
    <comment_count>22</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2011-01-18 16:39:39 +0300</bug_when>
    <thetext>(In reply to comment #21)
&gt; Лучше сделать как в редхате, если нет других соображений.

А какой префикс выбрали там?

&gt; Я проверил, gdb
&gt; действительно смотрит в /usr/lib64/debug (хотя в &quot;info gdb&quot; написано про
&gt; /usr/lib/debug).  А valgrind - в /usr/lib/debug. Я помню, что valgrind у меня
&gt; подцепил debuginfo пакет...

Префикс должен быть один для всех, кого-то из них придется исправить.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117278</commentid>
    <comment_count>23</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2011-01-18 16:47:45 +0300</bug_when>
    <thetext>В федоре везде /usr/lib/debug.  Можно скачать какой-нибудь пакет и посмотреть.  http://download.fedora.redhat.com/pub/fedora/linux/development/x86_64/debug/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117283</commentid>
    <comment_count>24</comment_count>
    <who name="Vladimir Lettiev">crux</who>
    <bug_when>2011-01-18 18:18:26 +0300</bug_when>
    <thetext>В ubuntu/debian тоже /usr/lib/debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117284</commentid>
    <comment_count>25</comment_count>
    <who name="Andrey Rahmatullin">wrar</who>
    <bug_when>2011-01-18 18:24:25 +0300</bug_when>
    <thetext>(В ответ на комментарий №24)
&gt; В ubuntu/debian тоже /usr/lib/debug
Так там беарчь без извращений с /usr/lib64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119102</commentid>
    <comment_count>26</comment_count>
    <who name="Bikov Rinat">becase</who>
    <bug_when>2011-03-09 14:29:09 +0300</bug_when>
    <thetext>Вроде бы уже есть?</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>