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

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

    <bug>
          <bug_id>15647</bug_id>
          
          <creation_ts>2008-05-14 12:59:18 +0400</creation_ts>
          <short_desc>rpmbsh не стартует при наличии неизвестных макросов</short_desc>
          <delta_ts>2009-01-09 03:44:01 +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>etersoft-build-utils</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>P2</priority>
          <bug_severity>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yury Aliaev">mutabor</reporter>
          <assigned_to name="Vitaly Lipatov">lav</assigned_to>
          <cc>ktirf</cc>
    
    <cc>lav</cc>
    
    <cc>rlz</cc>
    
    <cc>sin</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>69919</commentid>
    <comment_count>0</comment_count>
    <who name="Yury Aliaev">mutabor</who>
    <bug_when>2008-05-14 12:59:18 +0400</bug_when>
    <thetext>Если в spec-файле имеется макрос, определённый в одном из пакетов, от которого
зависит сборка, а в окружении, из которого запускается rpmbsh, этот пакет не
установлен, то запуск rpmbsh завершается с ошибкой, которой быть не должно, так
как в сборочной среде, создаваемой в chroot этот пакет будет установлен по
зависимостям и там этот макрос окажется определённым.Вот пример такой ситуации:

[mutabor@builder SPECS]$ rpmbsh xmms-in-modplug.spec 
Target ALT Linux system: SS, use /etc/apt/apt.conf.SS
ошибка: Macro %xmms_inputdir not found
  2&lt;     %xmms_inputdir
ошибка: Незакрытая {: {?%xmms_inputdir
  2&lt;     (пусто)
ошибка: xmms-in-modplug.spec:31: parseExpressionBoolean код возврата: -1
ошибка: запрос файла спецификации xmms-in-modplug.spec не удался, невозможно
разобрать файл
ошибка: Macro %xmms_inputdir not found
  2&lt;     %xmms_inputdir
ошибка: Незакрытая {: {?%xmms_inputdir
  2&lt;     (пусто)
ошибка: xmms-in-modplug.spec:31: parseExpressionBoolean код возврата: -1
ошибка: запрос файла спецификации xmms-in-modplug.spec не удался, невозможно
разобрать файл
add_changelog: xmms-in-modplug.spec: version &quot;&quot; unchanged, skipping
skip changelog editing without EDITOR var
Просто упаковывается xmms-in-modplug-2.05-alt1.3.src.rpm
Платформы для сборки: i586
Сборка для платформы i586
ошибка: Macro %xmms_inputdir not found
  2&lt;     %xmms_inputdir
ошибка: Незакрытая {: {?%xmms_inputdir
  2&lt;     (пусто)
ошибка: /srv/mutabor/RPM/SPECS/xmms-in-modplug.spec:31: parseExpressionBoolean
код возврата: -1
Error: Error with rpmbuild

Соответственно выдержки из xmms-in-modplug.spec:

%ifndef %xmms_inputdir
    %define xmms_inputdir %(xmms-config --input-plugin-dir)
%endif

и далее:

%install
%make bindir=%buildroot%_bindir \
plugindir=%buildroot%xmms_inputdir install

%files
%xmms_inputdir/*.so 
Steps to Reproduce:
1. Скачать их Сизифа пакет с исходниками xmms-in-modplug
2. Установить пакет
3. В каталоге со спеками выполнить rpmbsh xmms-in-modplug.spec
Actual Results:  
Приведённая выше ошибка

Expected Results:  
Нормальная сборка пакета</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70618</commentid>
    <comment_count>1</comment_count>
    <who name="Yury Aliaev">mutabor</who>
    <bug_when>2008-05-27 11:51:31 +0400</bug_when>
    <thetext>Из свеженького:

[mutabor@builder SPECS]$ rpmbsh meld.spec 
Target ALT Linux system: SS, use /etc/apt/apt.conf.SS
ошибка: Macro %gpl2plus not found
ошибка: строка 9: License: %gpl2plus

ошибка: запрос файла спецификации meld.spec не удался, невозможно разобрать файл
ошибка: Macro %gpl2plus not found
ошибка: строка 9: License: %gpl2plus

ошибка: запрос файла спецификации meld.spec не удался, невозможно разобрать файл
add_changelog: meld.spec: version &quot;&quot; unchanged, skipping
skip changelog editing without EDITOR var
Просто упаковывается meld-1.1.5.1-alt2.qa1.src.rpm
Платформы для сборки: i586
Сборка для платформы i586
ошибка: Macro %gpl2plus not found
ошибка: строка 9: License: %gpl2plus

Error: Error with rpmbuild
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70619</commentid>
    <comment_count>2</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2008-05-27 12:51:59 +0400</bug_when>
    <thetext>apt-get install rpm-build-licenses</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70630</commentid>
    <comment_count>3</comment_count>
    <who name="Yury Aliaev">mutabor</who>
    <bug_when>2008-05-27 13:52:33 +0400</bug_when>
    <thetext>[mutabor@builder meld-1.1.5.1]$ apt-get install rpm-build-licenses
E: Запись в /var/cache/apt/ невозможна
E: Невозможно прочитать список пакетов или файл статуса.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70632</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Rusakov">ktirf</who>
    <bug_when>2008-05-27 13:54:12 +0400</bug_when>
    <thetext>apt-get вызывать из-под суперпользователя, конечно :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70633</commentid>
    <comment_count>5</comment_count>
    <who name="Andrey Cherepanov">cas</who>
    <bug_when>2008-05-27 14:23:09 +0400</bug_when>
    <thetext>Под root: 
su -
перед этой командой</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70643</commentid>
    <comment_count>6</comment_count>
    <who name="Yury Aliaev">mutabor</who>
    <bug_when>2008-05-27 14:57:20 +0400</bug_when>
    <thetext>Представьте, я знаю ;) Но, во-первых, в данном случае у меня нет такой
возможности, а во-вторых, rpmbsh для того и нужен, чтобы собирать пакет на
основании спека без привилегий суперпользователя. Как root я могу просто
поставить нужные пакеты в основную систему и не заморачиваться с rpmbsh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70690</commentid>
    <comment_count>7</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-05-28 00:12:04 +0400</bug_when>
    <thetext>Да, это такой недостаток rpmbsh (пакет собирается без всяких ухищрений в 
хост-системе).
Я так понимаю особого решения, кроме применённого в gear, нет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70712</commentid>
    <comment_count>8</comment_count>
    <who name="Yury Aliaev">mutabor</who>
    <bug_when>2008-05-28 10:44:44 +0400</bug_when>
    <thetext>Я слышал, что hasher может собирать пакет не из .src.rpm, а из .pkg.tar, на
этапе создания которого зависимости не нужны. Может быть, в etersoft-build-utils
имеет смысл реализовать эту функциональность?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70768</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Rusakov">ktirf</who>
    <bug_when>2008-05-28 16:03:23 +0400</bug_when>
    <thetext>Я бы, кстати, с удовольствием увидел в etersoft-build-utils аналог rpmbsh для
git-репозиториев. Как вариант, обучить rpmbsh работать с git-репозиториями.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70776</commentid>
    <comment_count>10</comment_count>
    <who name="Vladimir V. Kamarzin">vvk</who>
    <bug_when>2008-05-28 16:22:56 +0400</bug_when>
    <thetext>Дык сто лет как уже.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70841</commentid>
    <comment_count>11</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-05-28 23:25:45 +0400</bug_when>
    <thetext>Да, Денис Смирнов давно прикрутил. Замечания принимаются.
Особо отмечу, что принципы работы с rpmbb/bsh не меняются, 
спек указывать надо по-прежнему, несмотря на то, что при работе с git
это как бы не нужно.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70899</commentid>
    <comment_count>12</comment_count>
    <who name="Yury Aliaev">mutabor</who>
    <bug_when>2008-05-29 11:51:25 +0400</bug_when>
    <thetext>А в принципе возможно ли следующее: на основании спека создаётся .pkg.tar (не
обязательно при работе с git), и он скармливается хэшеру? Это помогло бы
(возможно, не в 100%, но уж в 90%-то точно) решить проблему с неопределёнными на
этапе сборки исходного пакета макросами.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70946</commentid>
    <comment_count>13</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2008-05-29 18:17:22 +0400</bug_when>
    <thetext>Насколько я понял именно так и собирается пакет с помощью
 $ gear --hasher -- hsh
Эта команда как раз и занимается созданием .pkg.tar, который скармливает хешеру

Кстати, проблемы с зависимостями могут быть двух видов... Для сборки пакета из
src.rpm и для сборки самого src.rpm...

И тут есть интересная особенность... Дело в том, что rpm не всегда способен
собрать правильный src.rpm без некого минимального набора пакетов... Этот
минимальный набор иногда требует расширения... Для этого существует
BuildRequires(pre) зависимости...

На самом деле gear --hasher удовлетворяет большинству задумок... В этом плане у
rpmbsh есть существенный недостаток - он собирает src.rpm-пакет на хостовой
системе. А это надо выполнять в чруте, как hasher собственно и делает при
передаче ему некого .pkg.tar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70982</commentid>
    <comment_count>14</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-05-30 09:55:45 +0400</bug_when>
    <thetext>Может быть меня кто-нибудь научит делать .pkg.tar
и мы модернизируем rpmbsh?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70988</commentid>
    <comment_count>15</comment_count>
    <who name="rlz">rlz</who>
    <bug_when>2008-05-30 11:33:17 +0400</bug_when>
    <thetext>(In reply to comment #14)
&gt; Может быть меня кто-нибудь научит делать .pkg.tar
&gt; и мы модернизируем rpmbsh?

Это такой tar, в котором все исходники и spec. Возможно еще заголовок тома 
совпадает с именем spec-файла. Только как из spec&apos;а узнать все исходники? 
gear&apos;e их прямо указывают отдельно, а вот без него я думаю никак.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71059</commentid>
    <comment_count>16</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-05-31 02:12:32 +0400</bug_when>
    <thetext>Может быть просто делать его из того cpio, который в src.rpm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71096</commentid>
    <comment_count>17</comment_count>
    <who name="rlz">rlz</who>
    <bug_when>2008-05-31 18:33:59 +0400</bug_when>
    <thetext>(In reply to comment #16)
&gt; Может быть просто делать его из того cpio, который в src.rpm?

Если есть src.rpm, то его можно собрать. Если я правильно понял, то именно в 
создании его проблема и заключается.
Эта задача в общем случае не разрешима в принципе. Собрать rpm можно только при 
удовлетворении всех зависимостей. gear это делает, ставя все зависимости в 
hasher, а затем копируя туда все исходники, которые ему явно указаны и spec. А 
затем уже собирая их там. Рекомендую просто использовать gear. В принципе, 
задачу можно решить дополнительно указывая список исходников, скажем по одному 
на строку в файле. Темы связанные с этим обсуждались в devel, так что я 
практически уверен, что другого решения нет.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71099</commentid>
    <comment_count>18</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-06-01 00:25:19 +0400</bug_when>
    <thetext>(In reply to comment #17)
&gt; Собрать rpm можно только при удовлетворении всех зависимостей.
Но собрать src.rpm можно не имея всех зависимостей, и об этом речь.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71100</commentid>
    <comment_count>19</comment_count>
    <who name="rlz">rlz</who>
    <bug_when>2008-06-01 09:40:53 +0400</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; Собрать rpm можно только при удовлетворении всех зависимостей.
&gt; Но собрать src.rpm можно не имея всех зависимостей, и об этом речь.

Хорошо. Описываю проблему, как я ее вижу подробнее.
Необходимо собрать пакет по спеку и исходникам в системе, в которой не стоят 
все зависимости, используя hasher.
Для этого hasher&apos;у надо передать спек и все исходники, больше ему ничего не 
надо. Спек мы знаем, остаются исходники. Чаще всего их можно взять из спека, но 
в некоторых пакетах при указании исходников используются макросы (например в 
kdebase). Чаще всего это %version. Такое можно решить выполнив часть работы с 
помощью утилит hasher&apos;а. Но некоторые используют и более хитрые макросы, для 
раскрытия которых, необходимы некоторые пакеты предоставляющие макросы. При 
этом эти пакеты могут даже стоять в системе, но быть не тех версий, которые 
вытянет hasher потом. В частности мы наблюдали такие проблемы в системе, где 
установлен python-2.4, тогда как в сизифе -- python-2.5.
Таким образом работать со спеком возможно только в том стиле, которыйя описал в 
своем сообщении http://lists.altlinux.org/pipermail/devel/2008-May/074855.html. 
То есть, надо изначально создавать окружение для пакета, потом копировать туда 
спек и анализировать зависимости уже внутри hasher. Затем надо опять-таки 
внутри hasher выяснять все исходники для пакета и только затем собирать pkg.tar 
по полученной информации (при этом, чтобы не собирать окружение заново, 
пользоваться надо утилитой hsh-rebuild). Правда его можно не собирать, а просто 
скопировать исходники в .in и выполнить команды для сборки с помощью hsh-run.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71228</commentid>
    <comment_count>20</comment_count>
    <who name="Yury Aliaev">mutabor</who>
    <bug_when>2008-06-02 18:14:31 +0400</bug_when>
    <thetext>Можно (поначалу) даже упростить подход. Всё равно при этом класс собираемых с
помощью rpmbsh пакетов существенно расширится по сравнению с текущим состоянием.
Для этого сначала с помощью rpm -bE получаем спек с (возможно недо)раскрытыми
макросами. Если видим, что все Source и Patch раскрылись (что сработает в 99%
случав, если не больше), то создаём chroot, копируем туда исходники и спек и
запускаем hasher. Если не раскрылись, то интеллигентно ругаемся на то, что
&quot;данный пакет невозможно собрать с помощью rpmbsh в текущем сборочном окружении&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71237</commentid>
    <comment_count>21</comment_count>
    <who name="Evgeny Sinelnikov">sin</who>
    <bug_when>2008-06-02 23:36:44 +0400</bug_when>
    <thetext>(In reply to comment #20)
&gt; Можно (поначалу) даже упростить подход. Всё равно при этом класс собираемых с
&gt; помощью rpmbsh пакетов существенно расширится по сравнению с текущим 
&gt; состоянием.
&gt; Для этого сначала с помощью rpm -bE получаем спек с (возможно недо)раскрытыми
&gt; макросами.

Ну, вот в этом-то вся и проблема... сборочные зависимости таким образом ставятся
в сам сборочный сервер, причём какие они потребуются для раскрытия макросов
заранее неизвестно... При первоначальном разворачивании процесс начинается с
того, что в систему, по мере необходимости, ставят кучу пакетов... Далее это
может привести к конфликтам, когда всё что нужно для сборки разных пакетов в
систему не устанавливается...

&gt; Если видим, что все Source и Patch раскрылись (что сработает в 99%
&gt; случав, если не больше), то создаём chroot, копируем туда исходники и спек и
&gt; запускаем hasher. Если не раскрылись, то интеллигентно ругаемся на то, что
&gt; &quot;данный пакет невозможно собрать с помощью rpmbsh в текущем сборочном
&gt; окружении&quot;.

Я так понимаю, что rpmbsh, в данном случае, расматривается, как средство работы
из стандартной сборочной среды RPM (~/RPM/{BUILD,RPMS,SOURCES,SPECS,SRPMS}). И
вышеописанное поведение в таком случае оправдано...

Просто получается, что rpmbsh выступает, как более универсальное средство, чем
gear. Менее надёжное в плане организации универсальной сборочной среды, но более
удобное...

Хотелось бы это подчеркнуть, поскольку rpmbsh можно использовать как для
обычного SPEC-файла в сборочном каталоге RPM, так и для gear-репозитория. В этом
плане, раз уж внутренние механизмы по этому поводу раличаются, я думаю стоит
сохранить для gear стандартную схему (без разворачивания SPEC-файла) - это
позволит, не задумываясь о последствиях, использовать rpmbsh вместо gear
--hasher. Для обычной сборки, из сборочного каталога RPM, вышеописанная схема
действительно является достаточной в 95% случаев. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83539</commentid>
    <comment_count>22</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2008-12-28 01:58:45 +0300</bug_when>
    <thetext>Что в версии 1.5.1?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83706</commentid>
    <comment_count>23</comment_count>
    <who name="Yury Aliaev">mutabor</who>
    <bug_when>2008-12-31 16:41:31 +0300</bug_when>
    <thetext>Да, теперь всё работает :) Спасибо!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84020</commentid>
    <comment_count>24</comment_count>
    <who name="Vitaly Lipatov">lav</who>
    <bug_when>2009-01-09 03:37:42 +0300</bug_when>
    <thetext>Раз работает, закрываю.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>