Макрос %ruby_sitearchdir определён как /usr/lib/ruby/site_ruby/2.7.5/x86_64-linux то есть содержит версию ruby "2.7.5", а не MAJOR.MINOR.0 т.е. "2.7.0" как принято в других дистрибутивах, чтоб модуль не пропадал и не требовал обновления при каждом бинарно-совместимом PATCH апдейте ruby). $LOAD_PATH так же содержит пути с такой версией: irb(main):001:0> pp$: ["/usr/lib/ruby/gems/2.7.0/gems/rake-13.0.5/lib", "/usr/lib/ruby/gems/2.7.0/gems/did_you_mean-1.4.0/lib", "/usr/lib/ruby/gems/2.7.0/gems/io-console-0.5.6/lib", "/usr/lib/ruby/gems/2.7.0/extensions/x86_64-linux/2.7.0/io-console-0.5.6", "/usr/lib/ruby/gems/2.7.0/gems/reline-0.1.5/lib", "/usr/lib/ruby/gems/2.7.0/gems/irb-1.2.6/lib", "/usr/lib/ruby/gems/2.7.0/gems/uri-0.10.0/lib", "/usr/lib/ruby/gems/2.7.0/gems/timeout-0.1.0/lib", "/usr/lib/ruby/gems/2.7.0/gems/forwardable-1.3.1/lib", "/usr/lib/ruby/gems/2.7.0/gems/delegate-0.1.0/lib", "/usr/lib/ruby/gems/2.7.0/gems/fileutils-1.4.1/lib", "/usr/lib/ruby/gems/2.7.0/gems/etc-1.1.0/lib", "/usr/lib/ruby/gems/2.7.0/extensions/x86_64-linux/2.7.0/etc-1.1.0", "/usr/lib/ruby/site_ruby/2.7.0", "/usr/lib/ruby/site_ruby/2.7.5/x86_64-linux", "/usr/lib/ruby/site_ruby", "/usr/lib/ruby/vendor_ruby/2.7.0", "/usr/lib/ruby/vendor_ruby/2.7.5/x86_64-linux", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby", "/usr/lib/ruby/x86_64-linux"] Для сравнения пример из Ubuntu: root@ubuntu-impish:~# irb irb(main):001:0> RUBY_VERSION => "2.7.4" irb(main):002:0> pp$: ["/usr/local/lib/site_ruby/2.7.0", "/usr/local/lib/x86_64-linux-gnu/site_ruby", "/usr/local/lib/site_ruby", "/usr/lib/ruby/vendor_ruby/2.7.0", "/usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/2.7.0", "/usr/lib/ruby/vendor_ruby", "/usr/lib/ruby/2.7.0", "/usr/lib/x86_64-linux-gnu/ruby/2.7.0"] 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 - это ошибка?
Да, кстати, макрос %ruby_version сейчас определен как 2.7.0.
(Ответ для Vitaly Chikunov на комментарий #0) > Макрос %ruby_sitearchdir определён как > /usr/lib/ruby/site_ruby/2.7.5/x86_64-linux то есть содержит версию ruby > "2.7.5", а не MAJOR.MINOR.0 т.е. "2.7.0" как принято в других дистрибутивах, > 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. Само предложение выглядит здраво, rvm скажем собирает в правильными путями, т.е. c 2.7.0, хотя ссылка на другие дистрибутивы выглядит странно. Думаю, стоит ориентироваться тут на rvm. > ps. Версия ещё раз в конце пути %ruby_gemsextdir - это ошибка? Не должно быть в %ruby_gemsextdir лишнего.
i. Полагаю, что пути с site_ruby (ни при каких условиях) не должны использоваться (со времен ruby 1.9), а нужно использовать пути с vendor_ruby. Соответственно, чтоб сохранить обратную-совместимость spec'ов нужно 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* чтоб новые пакеты можно было вручную исправлять на правильные пути.
По поводу путей к vendor_ruby. Сейчас они такие builder@x86_64:~$ ruby -rrubygems -rrbconfig -e 'pp RbConfig::CONFIG'|grep vendor "vendorarchhdrdir"=>"/usr/include/vendor_ruby/x86_64-linux", "vendorhdrdir"=>"/usr/include/vendor_ruby", " ... '--with-vendorarchdir=/usr/lib/ruby/vendor_ruby/2.7.5/x86_64-linux' ... ", "vendorarchdir"=>"/usr/lib/ruby/vendor_ruby/2.7.5/x86_64-linux", "vendorlibdir"=>"/usr/lib/ruby/vendor_ruby", "vendordir"=>"/usr/lib/ruby/vendor_ruby", Архитектурно зависимые пути (vendorarchdir) выглядят неправильно. Суффикс "x86_64-linux" это скорее всего что-то из дебиана где вместо /lib64 используется /lib/x86_64-linux. Полагаю, что нужно сделать путь /usr/%_lib/ruby/vendor_ruby/2.7.0, где %_lib это (наш макрос раскрывающийся в) lib или lib64 в зависимости от платформы.
Вот я сейчас увидел коммит с - --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 \
(Ответ для Vitaly Chikunov на комментарий #4) > По поводу путей к vendor_ruby. Сейчас они такие > > builder@x86_64:~$ ruby -rrubygems -rrbconfig -e 'pp RbConfig::CONFIG'|grep > vendor > "vendorarchhdrdir"=>"/usr/include/vendor_ruby/x86_64-linux", > "vendorhdrdir"=>"/usr/include/vendor_ruby", > " ... '--with-vendorarchdir=/usr/lib/ruby/vendor_ruby/2.7.5/x86_64-linux' > ... ", > "vendorarchdir"=>"/usr/lib/ruby/vendor_ruby/2.7.5/x86_64-linux", > "vendorlibdir"=>"/usr/lib/ruby/vendor_ruby", > "vendordir"=>"/usr/lib/ruby/vendor_ruby", > > Архитектурно зависимые пути (vendorarchdir) выглядят неправильно. Суффикс > "x86_64-linux" это скорее всего что-то из дебиана где вместо /lib64 > используется /lib/x86_64-linux. Полагаю, что нужно сделать путь > /usr/%_lib/ruby/vendor_ruby/2.7.0, где %_lib это (наш макрос раскрывающийся > в) lib или lib64 в зависимости от платформы. по хорошему вообще все *.so нужно пихать в lib64, а *.rb в lib, но это много возни, не для этой задачи, поэтому vendorarchdir пока, думаю, оставлю как есть.
Хотя возможно это не так сложно вделать....
Я ещё заметил в $: путь /usr/lib/ruby/x86_64-linux/ (который использует только ruby-stdlib), видимо, должно быть /usr/%_lib/ruby/.
Any news?
ruby-2.7.5-alt1.1 -> sisyphus: Tue Jan 18 2022 Pavel Skrylev <majioa@altlinux> 2.7.5-alt1.1 - ! %ruby_sitearchdir path (ALT #41688)
Спасибо!