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

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

    <bug>
          <bug_id>41688</bug_id>
          
          <creation_ts>2022-01-11 07:38:01 +0300</creation_ts>
          <short_desc>Пути в $LOAD_PATH и %ruby_sitearchdir версионированы по PATCH</short_desc>
          <delta_ts>2022-10-29 18:36:17 +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>ruby</component>
          <version>unstable</version>
          <rep_platform>x86</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugzilla.altlinux.org/show_bug.cgi?id=44173</see_also>
          <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="Vitaly Chikunov">vt</reporter>
          <assigned_to name="majioa@altlinux.org">majioa</assigned_to>
          <cc>3aHyga</cc>
    
    <cc>admsasha</cc>
    
    <cc>cas</cc>
    
    <cc>iv</cc>
    
    <cc>ldv</cc>
    
    <cc>majioa</cc>
    
    <cc>mike</cc>
    
    <cc>nbr</cc>
    
    <cc>pav</cc>
    
    <cc>rider</cc>
    
    <cc>thatman</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>206616</commentid>
    <comment_count>0</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-01-11 07:38:01 +0300</bug_when>
    <thetext>Макрос %ruby_sitearchdir определён как /usr/lib/ruby/site_ruby/2.7.5/x86_64-linux то есть содержит версию ruby &quot;2.7.5&quot;, а не MAJOR.MINOR.0 т.е. &quot;2.7.0&quot; как принято в других дистрибутивах, чтоб модуль не пропадал и не требовал обновления при каждом бинарно-совместимом PATCH апдейте ruby). $LOAD_PATH так же содержит пути с такой версией:

irb(main):001:0&gt; pp$:
[&quot;/usr/lib/ruby/gems/2.7.0/gems/rake-13.0.5/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/gems/did_you_mean-1.4.0/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/gems/io-console-0.5.6/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/extensions/x86_64-linux/2.7.0/io-console-0.5.6&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/gems/reline-0.1.5/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/gems/irb-1.2.6/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/gems/uri-0.10.0/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/gems/timeout-0.1.0/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/gems/forwardable-1.3.1/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/gems/delegate-0.1.0/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/gems/fileutils-1.4.1/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/gems/etc-1.1.0/lib&quot;,
 &quot;/usr/lib/ruby/gems/2.7.0/extensions/x86_64-linux/2.7.0/etc-1.1.0&quot;,
 &quot;/usr/lib/ruby/site_ruby/2.7.0&quot;,
 &quot;/usr/lib/ruby/site_ruby/2.7.5/x86_64-linux&quot;,
 &quot;/usr/lib/ruby/site_ruby&quot;,
 &quot;/usr/lib/ruby/vendor_ruby/2.7.0&quot;,
 &quot;/usr/lib/ruby/vendor_ruby/2.7.5/x86_64-linux&quot;,
 &quot;/usr/lib/ruby/vendor_ruby&quot;,
 &quot;/usr/lib/ruby&quot;,
 &quot;/usr/lib/ruby/x86_64-linux&quot;]

Для сравнения пример из Ubuntu:

root@ubuntu-impish:~# irb
irb(main):001:0&gt; RUBY_VERSION
=&gt; &quot;2.7.4&quot;
irb(main):002:0&gt; pp$:
[&quot;/usr/local/lib/site_ruby/2.7.0&quot;,
 &quot;/usr/local/lib/x86_64-linux-gnu/site_ruby&quot;,
 &quot;/usr/local/lib/site_ruby&quot;,
 &quot;/usr/lib/ruby/vendor_ruby/2.7.0&quot;,
 &quot;/usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/2.7.0&quot;,
 &quot;/usr/lib/ruby/vendor_ruby&quot;,
 &quot;/usr/lib/ruby/2.7.0&quot;,
 &quot;/usr/lib/x86_64-linux-gnu/ruby/2.7.0&quot;]

AFAIK, в opensгse, debian, fedora такая же схема как в Ubuntu (с путями где PATCH=0).

Для контраста -- пути к gems и макрос %ruby_gemsextdir определен правильно в смысле версионирования: /usr/lib/ruby/gems/2.7.0/extensions/x86_64-linux/2.7.0

То есть собираемые gems не будут требовать обновления при каждом обновлении PATCH версии ruby.

ps. Версия ещё раз в конце пути %ruby_gemsextdir - это ошибка?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206617</commentid>
    <comment_count>1</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-01-11 07:49:07 +0300</bug_when>
    <thetext>Да, кстати, макрос %ruby_version сейчас определен как 2.7.0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206832</commentid>
    <comment_count>2</comment_count>
    <who name="Малъ Скрылевъ">3aHyga</who>
    <bug_when>2022-01-18 18:09:41 +0300</bug_when>
    <thetext>(Ответ для Vitaly Chikunov на комментарий #0)
&gt; Макрос %ruby_sitearchdir определён как
&gt; /usr/lib/ruby/site_ruby/2.7.5/x86_64-linux то есть содержит версию ruby
&gt; &quot;2.7.5&quot;, а не MAJOR.MINOR.0 т.е. &quot;2.7.0&quot; как принято в других дистрибутивах,

&gt; AFAIK, в opensгse, debian, fedora такая же схема как в Ubuntu (с путями где
&gt; PATCH=0).
&gt; 
&gt; Для контраста -- пути к gems и макрос %ruby_gemsextdir определен правильно в
&gt; смысле версионирования:
&gt; /usr/lib/ruby/gems/2.7.0/extensions/x86_64-linux/2.7.0
&gt; 
&gt; То есть собираемые gems не будут требовать обновления при каждом обновлении
&gt; PATCH версии ruby.
 
Само предложение выглядит здраво, rvm скажем собирает в правильными путями, т.е. c 2.7.0, хотя ссылка на другие дистрибутивы выглядит странно. Думаю, стоит ориентироваться тут на rvm.

&gt; ps. Версия ещё раз в конце пути %ruby_gemsextdir - это ошибка?

Не должно быть в %ruby_gemsextdir лишнего.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206913</commentid>
    <comment_count>3</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-01-20 19:12:52 +0300</bug_when>
    <thetext>i. Полагаю, что пути с site_ruby (ни при каких условиях) не должны использоваться (со времен ruby 1.9), а нужно использовать пути с vendor_ruby. Соответственно, чтоб сохранить обратную-совместимость spec&apos;ов нужно

1. Завести макросы %ruby_vendor{archdir,libdir,dir} - для новых пользователей.
2. Соответствующие им %ruby_site* макросы перенаправить на %ruby_vendor*

Видимо эти:

  %ruby_sitearchdir       %(%ruby_rubyconf_func sitearchdir)
  %ruby_sitelibdir        %(%ruby_rubyconf_func sitelibdir)
  %ruby_sitearchdir       %(%ruby_rubyconf_func sitearchdir)


Тогда новые пакеты будут собираться в vendor_ruby, где они и должны быть, а старые спеки продолжат работать. (Нужно спросить мнение ldv на этот счёт.)

ii. Или, если это нельзя сделать, то просто завести макросы %ruby_vendor* чтоб новые пакеты можно было вручную исправлять на правильные пути.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206920</commentid>
    <comment_count>4</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-01-20 19:44:25 +0300</bug_when>
    <thetext>По поводу путей к vendor_ruby. Сейчас они такие

builder@x86_64:~$ ruby -rrubygems -rrbconfig -e &apos;pp RbConfig::CONFIG&apos;|grep vendor
 &quot;vendorarchhdrdir&quot;=&gt;&quot;/usr/include/vendor_ruby/x86_64-linux&quot;,
 &quot;vendorhdrdir&quot;=&gt;&quot;/usr/include/vendor_ruby&quot;,
  &quot; ... &apos;--with-vendorarchdir=/usr/lib/ruby/vendor_ruby/2.7.5/x86_64-linux&apos; ... &quot;,
 &quot;vendorarchdir&quot;=&gt;&quot;/usr/lib/ruby/vendor_ruby/2.7.5/x86_64-linux&quot;,
 &quot;vendorlibdir&quot;=&gt;&quot;/usr/lib/ruby/vendor_ruby&quot;,
 &quot;vendordir&quot;=&gt;&quot;/usr/lib/ruby/vendor_ruby&quot;,

Архитектурно зависимые пути (vendorarchdir) выглядят неправильно. Суффикс &quot;x86_64-linux&quot; это скорее всего что-то из дебиана где вместо /lib64 используется /lib/x86_64-linux. Полагаю, что нужно сделать путь /usr/%_lib/ruby/vendor_ruby/2.7.0, где %_lib это (наш макрос раскрывающийся в) lib или lib64 в зависимости от платформы.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206922</commentid>
    <comment_count>5</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-01-20 19:48:12 +0300</bug_when>
    <thetext>Вот я сейчас увидел коммит с

-        --with-vendorarchdir=%libdir/vendor_ruby/%_version/%ruby_arch \
+        --with-vendorarchdir=%libdir/vendor_ruby/%ruby_version/%ruby_arch \

а хотелось бы

+        --with-vendorarchdir=%_libdir/ruby/vendor_ruby/%ruby_version \</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206923</commentid>
    <comment_count>6</comment_count>
    <who name="Малъ Скрылевъ">3aHyga</who>
    <bug_when>2022-01-20 20:19:26 +0300</bug_when>
    <thetext>(Ответ для Vitaly Chikunov на комментарий #4)
&gt; По поводу путей к vendor_ruby. Сейчас они такие
&gt; 
&gt; builder@x86_64:~$ ruby -rrubygems -rrbconfig -e &apos;pp RbConfig::CONFIG&apos;|grep
&gt; vendor
&gt;  &quot;vendorarchhdrdir&quot;=&gt;&quot;/usr/include/vendor_ruby/x86_64-linux&quot;,
&gt;  &quot;vendorhdrdir&quot;=&gt;&quot;/usr/include/vendor_ruby&quot;,
&gt;   &quot; ... &apos;--with-vendorarchdir=/usr/lib/ruby/vendor_ruby/2.7.5/x86_64-linux&apos;
&gt; ... &quot;,
&gt;  &quot;vendorarchdir&quot;=&gt;&quot;/usr/lib/ruby/vendor_ruby/2.7.5/x86_64-linux&quot;,
&gt;  &quot;vendorlibdir&quot;=&gt;&quot;/usr/lib/ruby/vendor_ruby&quot;,
&gt;  &quot;vendordir&quot;=&gt;&quot;/usr/lib/ruby/vendor_ruby&quot;,
&gt; 
&gt; Архитектурно зависимые пути (vendorarchdir) выглядят неправильно. Суффикс
&gt; &quot;x86_64-linux&quot; это скорее всего что-то из дебиана где вместо /lib64
&gt; используется /lib/x86_64-linux. Полагаю, что нужно сделать путь
&gt; /usr/%_lib/ruby/vendor_ruby/2.7.0, где %_lib это (наш макрос раскрывающийся
&gt; в) lib или lib64 в зависимости от платформы.

по хорошему вообще все *.so нужно пихать в lib64, а *.rb в lib, но это много возни, не для этой задачи, поэтому vendorarchdir пока, думаю, оставлю как есть.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206924</commentid>
    <comment_count>7</comment_count>
    <who name="Малъ Скрылевъ">3aHyga</who>
    <bug_when>2022-01-20 20:22:43 +0300</bug_when>
    <thetext>Хотя возможно это не так сложно вделать....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206925</commentid>
    <comment_count>8</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-01-20 20:42:07 +0300</bug_when>
    <thetext>Я ещё заметил в $: путь /usr/lib/ruby/x86_64-linux/ (который использует только ruby-stdlib), видимо, должно быть /usr/%_lib/ruby/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207620</commentid>
    <comment_count>9</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-02-09 19:29:23 +0300</bug_when>
    <thetext>Any news?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208207</commentid>
    <comment_count>10</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2022-03-01 16:21:35 +0300</bug_when>
    <thetext>ruby-2.7.5-alt1.1 -&gt; sisyphus:

 Tue Jan 18 2022 Pavel Skrylev &lt;majioa@altlinux&gt; 2.7.5-alt1.1
 - ! %ruby_sitearchdir path (ALT #41688)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>208726</commentid>
    <comment_count>11</comment_count>
    <who name="Vitaly Chikunov">vt</who>
    <bug_when>2022-03-22 10:49:14 +0300</bug_when>
    <thetext>Спасибо!</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>