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

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

    <bug>
          <bug_id>13374</bug_id>
          
          <creation_ts>2007-11-09 19:44:17 +0300</creation_ts>
          <short_desc>symlinks.req should test alternatives in path</short_desc>
          <delta_ts>2008-04-23 11:47:24 +0400</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>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="viy">viy</reporter>
          <assigned_to name="placeholder@altlinux.org">placeholder</assigned_to>
          <cc>arseny</cc>
    
    <cc>glebfm</cc>
    
    <cc>imz</cc>
    
    <cc>ldv</cc>
    
    <cc>placeholder</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>57756</commentid>
    <comment_count>0</comment_count>
    <who name="viy">viy</who>
    <bug_when>2007-11-09 19:44:18 +0300</bug_when>
    <thetext>если симлинк указывает на файл в &quot;за-альтернатированной&quot; директории
например, 
xxx -&gt; /usr/lib/jvm/java//jre/lib/rt.jar
где /usr/lib/jvm/java/ -- альтернатива
то ставится зависимость на конкретный rt.jar
(например, на java-1.4.2-sun)
что порождает unmet на x86_64.

нужно ставить зависимость на альтернативу /usr/lib/jvm/java
/usr/lib/jvm/java -&gt; /etc/alternatives ...

т. е. надо после чтения симлинка по циклу пройти по его каталогам, 
не является ли подпуть ссылкой куда-то в /etc/alternatives.
Steps to Reproduce:
1.
2.
.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57767</commentid>
    <comment_count>1</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2007-11-10 00:38:33 +0300</bug_when>
    <thetext>То есть при разрешении симлинка выясняется, что один из промежуточных катаологов
в свою очередь опять является симлинком, который висит на альтернативах.

Очень шаткая конструкция.

В любом случае, то что Вы предлагаете, если я правильно понимаю, в этом случае
какая бы то ни была зависимоть на rt.jar потеряется.  Зависимость на
/usr/lib/jvm/java не гарантирует, что где-то под этим каталогом будет лажать
rt.jar.

Конкретная зависимость лучше никакой, потому что она гарантерует что файл rt.jar
будет на месте.  Надо подумать...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58142</commentid>
    <comment_count>2</comment_count>
    <who name="viy">viy</who>
    <bug_when>2007-11-13 17:26:22 +0300</bug_when>
    <thetext>&gt; Конкретная зависимость лучше никакой, потому что она гарантерует что файл rt.jar
&gt; будет на месте. 
Конкретная зависимость хуже никакой.
Этот баг родился из реальной сборки пакета.
Подчеркну, что она не гарантирует, что файл rt.jar будет на месте.--
Зависимость то ставится не на rt.jar, 
а на java-1.4.2-sun, если сборке случилось быть на ix86
это 1) порождает unmet на x86_64, 
2) ix86 unmet не будет, но вытянется 40MB ненужного мусора (java-1.4.2-sun)
да и вообще по смыслу там должна быть зависимость на виртуальный пакет java.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58151</commentid>
    <comment_count>3</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2007-11-13 21:12:41 +0300</bug_when>
    <thetext>Хорошо.  Я понимаю, что &quot;правильную&quot; (необходимой и достаточную) зависимость
здесь указать очень сложно.  Я попробую реализовать в symlinks.req проверку на
прохождение пути через альтернативы.

Текущий workaround --
%add_findreq_skiplit /path/to/symlink

Прошу его использовать только в случае реальной необходимости, т.к. symlinks.req
отлавливает гораздо больше настоящих ошибок запаковки, нежели чем производит
&quot;каверзных&quot; зависимостей.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58155</commentid>
    <comment_count>4</comment_count>
    <who name="viy">viy</who>
    <bug_when>2007-11-13 22:50:37 +0300</bug_when>
    <thetext>&gt; Прошу его использовать только в случае реальной необходимости, т.к. symlinks.req
&gt; отлавливает гораздо больше настоящих ошибок запаковки, нежели чем производит
&gt; &quot;каверзных&quot; зависимостей.
Да, вещь хорошая.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58309</commentid>
    <comment_count>5</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2007-11-17 09:42:23 +0300</bug_when>
    <thetext>Вы не написали, как нызвается пакет, в котором symlinks.req даёт слишком
конкретную зависимость.  У меня сейчас есть немного времени, чтобы это дело
поковырять, но я уже трачу его на поиски подходящего пакета, чтобы обдумать что
к чему.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58311</commentid>
    <comment_count>6</comment_count>
    <who name="viy">viy</who>
    <bug_when>2007-11-17 11:11:19 +0300</bug_when>
    <thetext>например maven-1.1. В нем  сейчас стоит
AutoReq: yes,nosymlinks
если убрать должно воспроизвестись
если не ошибаюсь с /usr/lib/jvm/java//jre/lib/tools.jar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58312</commentid>
    <comment_count>7</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2007-11-17 12:10:51 +0300</bug_when>
    <thetext>Проблема очень плохая.  Есть примеры из базовой системы гораздо проще --
напр. /usr/share/libtool.  У меня сейчас закипят мозги, потому что я не
знаю, как наиболее правильно сделать для всех возможных случаев.

$ sh -efu -c &apos;. /usr/lib/rpm/find-package; FindPackage foo /usr/share/libtool&apos; 
/usr/share/libtool
$ sh -efu -c &apos;. /usr/lib/rpm/find-package; FindPackage foo /usr/share/libtool/&apos;
sh: foo: checking contents_index_all for /usr/share/libtool-1.5
sh: foo: /usr/share/libtool-1.5 -&gt; libtool_1.5 (via contents_index_all)
libtool_1.5
$ sh -efu -c &apos;. /usr/lib/rpm/find-package; FindPackage foo
/usr/share/../share/libtool&apos;
/usr/share/../share/libtool
$

Нужно очень осторожно пробовать каноникализировать пути в несколько
заходов и смотреть, нет ли там ГДЕ-НИБУДЬ альтернатив.  Причем тут есть
разные варианты каноникализации.  Например если разрешать путь
/usr/share/libtool/../../bin/perl то вместо зависимости на /usr/bin/perl
мы можем получить зависимость на /usr/share/libtool!
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58314</commentid>
    <comment_count>8</comment_count>
    <who name="viy">viy</who>
    <bug_when>2007-11-17 12:40:22 +0300</bug_when>
    <thetext>гм. в случае с /usr/share/libtool/../../bin/perl 
/usr/bin/perl (разрешение симлинка) и /usr/share/libtool (альтернатива)
принадлежат разным пакетам. В этом случае 
имеет смысл выдать предупреждение, а зависимость ставить на /usr/bin/perl (как
было раньше) либо вообще не ставить.
если же (разрешение симлинка) и (альтернатива) предоставляются одим и тем же 
пакетом, то зависимость нужно ставить не на этот пакет, а на альтернативу,
которую он предоставляет.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58315</commentid>
    <comment_count>9</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2007-11-17 13:19:15 +0300</bug_when>
    <thetext>Хочу на всякий случай заметить, что проблема не специфична для symlinks.req.
Речь идёт об общих принципах разрешения путей в зависимости.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58317</commentid>
    <comment_count>10</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2007-11-17 15:06:31 +0300</bug_when>
    <thetext>Кажется, несмотря на кипение головы, все проблемы с альтернативами таки удалось
решить.  Прошу посмотреть 4.0.4-alt80-2-g2bf12ba (а также предыдущий коммит).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>58318</commentid>
    <comment_count>11</comment_count>
    <who name="viy">viy</who>
    <bug_when>2007-11-17 15:39:51 +0300</bug_when>
    <thetext>хорошо.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67043</commentid>
    <comment_count>12</comment_count>
    <who name="at@altlinux.org">at</who>
    <bug_when>2008-03-31 04:47:49 +0400</bug_when>
    <thetext>This was fixed in 4.0.4-alt81.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>