ruby-sassc из Сизифа не работает вообще потому что не может найти нужные динамические библиотеки. Минималистичный пример: $ cat test.rb require "sassc" $ ruby test.rb Traceback (most recent call last): 12: from test.rb:1:in `<main>' 11: from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:39:in `require' 10: from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:135:in `rescue in require' 9: from /usr/lib/ruby/rubygems/core_ext/kernel_require.rb:135:in `require' 8: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc.rb:31:in `<top (required)>' 7: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc.rb:31:in `require_relative' 6: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:5:in `<top (required)>' 5: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:6:in `<module:SassC>' 4: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:10:in `<module:Native>' 3: from /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/lib/sassc/native.rb:13:in `rescue in <module:Native>' 2: from /usr/lib/ruby/gems/2.5.0/gems/ffi-1.11.1/lib/ffi/library.rb:99:in `ffi_lib' 1: from /usr/lib/ruby/gems/2.5.0/gems/ffi-1.11.1/lib/ffi/library.rb:99:in `map' /usr/lib/ruby/gems/2.5.0/gems/ffi-1.11.1/lib/ffi/library.rb:145:in `block in ffi_lib': Could not open library '/usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/ext/libsass.so': /usr/lib/ruby/gems/2.5.0/gems/sassc-2.2.1/ext/libsass.so: cannot open shared object file: No such file or directory (LoadError) При этом libsass.so в Сизифе есть только в %_libdir, а libsassc (который тоже необходим этому гему) вообще, похоже, отсутствует.
ruby-sassc-2.2.1-alt2 -> sisyphus: Fri Nov 08 2019 Pavel Skrylev <majioa@altlinux> 2.2.1-alt2 - changed (*) spec to use build requires - fixed (!) lost link to system's .so lib (closes #37433) - fixed (!) requires
Разрешите немного придраться к http://git.altlinux.org/gears/r/ruby-sassc.git?p=ruby-sassc.git;a=commitdiff;h=46abb8e801831e202077176615ab1f8fa854caaf ... > ln -s $(find /usr -name libsass.so.1 2>/dev/null) %ruby_gemlibdir/ext/libsass.so А если libsass сменить so name, например, на 2? Т.к. уже есть "BuildRequires: libsass-devel", то есть и симлинк libsass.so -> libsass.so.1, а значит можно узнавать значение N в libass.so.N динамически, либо через realpath, либо через readelf -a <...> | grep name. Его также часто можно узнать, грепнув /usr/inlude от нужной библиотеки. "+BuildRequires: libsass" в таком случае тоже лишнее, т.к. -devel пакет обязан гарантированно подтянуть не devel пакет, а вот если упаковка libsass будет приведена в соответствие с Shared Libs Policy, чего сейчас нет, зависимость от "libass" может сломаться. В целом не критично.
Т.е. я бы сделал примерно так: Сначала узнаем путь к целевому файлу для симлинка: %define libsass_file_path %(find %_libdir -maxdepth 1 -name 'libsass.so.*' | head -n 1 | grep . || echo 0) "grep ." ничего не делает, но делает ненулевой код возврата, если find ничего не нашел, а если код возврата ненулевой, то делаем echo 0, чтобы в первом проходе парсера спека, когда еще не установлены сборочные зависимости, не получилось пустой переменной. Далее узнаем имя пакета, которому принадлежит файл библиотеки: %define libassess_pkg_name %(rpm -qf --queryformat='%{NAME}' %libsass_file_path || echo libsass) "|| echo libsass" аналогично на случай ненулевого кода возврата rpm -qf, чтобы не получилось пустой переменной (не присвоенного макроса), которая приведет к ошибке. <...> Requires: %libassess_pkg_name <...> ln -s %libsass_file_pathlibsass_file_path %ruby_gemlibdir/ext/libsass.so