While rubygem-openscap is retired in Fedora, the Foreman project still packages it.
For context: rubygem-openscap can load libopenscap.so.8 and libopenscap.so.25 through FFI. Today we depend on a specific version, but every time it's bumped we go through a verification to see if the SO version hasn't been bumped.
At first I started with a trivial Requires: libopenscap.so.25 but that pulls in both openscap for i686 and x86_64. Directly depending on libopenscap.so.25()(64bit) feels wrong, so what is the correct approach here? Is there some helper macro here?
Technically speaking I think it should depend on what rubygem-ffi can load, but on x86_64 that's probably 64 bit only. However, this is a bit out of my knowledge area.
For completeness, the discussion started in a PR: https://github.com/theforeman/foreman-packaging/pull/9051
Interesting situation.
On 3/6/23 12:49, Ewoud Kohl van Wijngaarden wrote:
While rubygem-openscap is retired in Fedora, the Foreman project still packages it.
For context: rubygem-openscap can load libopenscap.so.8 and libopenscap.so.25 through FFI. Today we depend on a specific version, but every time it's bumped we go through a verification to see if the SO version hasn't been bumped.
A bit of a tangent first. This sounds like it could be checked via a "simple" FFI load check in %check section, in ruby, something like:
~~~
require 'ffi'
module Check extend FFI::Library ffi_lib 'libopenscap.so.25' end ~~~
This will throw an exception if the .so is not available.
At first I started with a trivial Requires: libopenscap.so.25 but that pulls in both openscap for i686 and x86_64. Directly depending on libopenscap.so.25()(64bit) feels wrong, so what is the correct approach here? Is there some helper macro here?
There are *some*, but nothing universal it seems. JFTR other packages that require libs like this are (and make use of some _isa macros):
cross-gcc.spec ghdl.spec glib2.spec julia.spec libreoffice.spec redhat-lsb.spec systemd.spec asahi-installer.spec
You can grep through all specfiles using this tar: https://pkgs.fedoraproject.org/repo/rpm-specs-latest.tar.xz
I'd recommend reading the systemd and Julia files as inspiration, those 2 seem to be doing what you are speaking of.
tl;dr those spec files indicate you need to conditionally depend on both, depending on whether it is 32 or 64bit build.
Technically speaking I think it should depend on what rubygem-ffi can load, but on x86_64 that's probably 64 bit only. However, this is a bit out of my knowledge area.
This could, in theory, be checked in the %check section of the package as I indicated above, if you add the same to BuildRequires, even if it won't help if openscap changes the .so version.
Regards, Jarek
For completeness, the discussion started in a PR: https://github.com/theforeman/foreman-packaging/pull/9051
On Mon, Mar 06, 2023 at 01:27:18PM +0100, Jarek Prokop wrote:
Interesting situation.
On 3/6/23 12:49, Ewoud Kohl van Wijngaarden wrote:
While rubygem-openscap is retired in Fedora, the Foreman project still packages it.
For context: rubygem-openscap can load libopenscap.so.8 and libopenscap.so.25 through FFI. Today we depend on a specific version, but every time it's bumped we go through a verification to see if the SO version hasn't been bumped.
A bit of a tangent first. This sounds like it could be checked via a "simple" FFI load check in %check section, in ruby, something like:
require 'ffi' module Check extend FFI::Library ffi_lib 'libopenscap.so.25' end
This will throw an exception if the .so is not available.
This is indeed pretty much how the code looks: https://github.com/OpenSCAP/ruby-openscap/blob/master/lib/openscap/openscap....
So adding a verification step in %check is actually a good idea, though I'd also consider including the actual class rather than a mock.
At first I started with a trivial Requires: libopenscap.so.25 but that pulls in both openscap for i686 and x86_64. Directly depending on libopenscap.so.25()(64bit) feels wrong, so what is the correct approach here? Is there some helper macro here?
There are *some*, but nothing universal it seems. JFTR other packages that require libs like this are (and make use of some _isa macros):
cross-gcc.spec ghdl.spec glib2.spec julia.spec libreoffice.spec redhat-lsb.spec systemd.spec asahi-installer.spec
You can grep through all specfiles using this tar: https://pkgs.fedoraproject.org/repo/rpm-specs-latest.tar.xz
I'd recommend reading the systemd and Julia files as inspiration, those 2 seem to be doing what you are speaking of.
tl;dr those spec files indicate you need to conditionally depend on both, depending on whether it is 32 or 64bit build.
Those look very useful. The __isa_bits part in systemd.spec looks like what I've been looking for.
Technically speaking I think it should depend on what rubygem-ffi can load, but on x86_64 that's probably 64 bit only. However, this is a bit out of my knowledge area.
This could, in theory, be checked in the %check section of the package as I indicated above, if you add the same to BuildRequires, even if it won't help if openscap changes the .so version.
Will do, this has been very useful.
For completeness, the discussion started in a PR: https://github.com/theforeman/foreman-packaging/pull/9051
Dne 06. 03. 23 v 12:49 Ewoud Kohl van Wijngaarden napsal(a):
While rubygem-openscap is retired in Fedora, the Foreman project still packages it.
For context: rubygem-openscap can load libopenscap.so.8 and libopenscap.so.25 through FFI. Today we depend on a specific version, but every time it's bumped we go through a verification to see if the SO version hasn't been bumped.
At first I started with a trivial Requires: libopenscap.so.25 but that pulls in both openscap for i686 and x86_64. Directly depending on libopenscap.so.25()(64bit) feels wrong, so what is the correct approach here? Is there some helper macro here?
https://src.fedoraproject.org/rpms/rubygem-ruby-vips/blob/rawhide/f/rubygem-...
Vít
Technically speaking I think it should depend on what rubygem-ffi can load, but on x86_64 that's probably 64 bit only. However, this is a bit out of my knowledge area.
For completeness, the discussion started in a PR: https://github.com/theforeman/foreman-packaging/pull/9051 _______________________________________________ devel mailing list -- devel@lists.fedoraproject.org To unsubscribe send an email to devel-leave@lists.fedoraproject.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue
Dne 06. 03. 23 v 14:27 Vít Ondruch napsal(a):
Dne 06. 03. 23 v 12:49 Ewoud Kohl van Wijngaarden napsal(a):
While rubygem-openscap is retired in Fedora, the Foreman project still packages it.
For context: rubygem-openscap can load libopenscap.so.8 and libopenscap.so.25 through FFI. Today we depend on a specific version, but every time it's bumped we go through a verification to see if the SO version hasn't been bumped.
At first I started with a trivial Requires: libopenscap.so.25 but that pulls in both openscap for i686 and x86_64. Directly depending on libopenscap.so.25()(64bit) feels wrong, so what is the correct approach here? Is there some helper macro here?
https://src.fedoraproject.org/rpms/rubygem-ruby-vips/blob/rawhide/f/rubygem-...
BTW originaly I have tried the libffi dependency instead:
https://src.fedoraproject.org/rpms/rubygem-ruby-vips/c/79a3abbca7da4767aabda...
Vít
Vít
Technically speaking I think it should depend on what rubygem-ffi can load, but on x86_64 that's probably 64 bit only. However, this is a bit out of my knowledge area.
For completeness, the discussion started in a PR: https://github.com/theforeman/foreman-packaging/pull/9051 _______________________________________________ devel mailing list -- devel@lists.fedoraproject.org To unsubscribe send an email to devel-leave@lists.fedoraproject.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue
devel mailing list -- devel@lists.fedoraproject.org To unsubscribe send an email to devel-leave@lists.fedoraproject.org Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue
On Mon, Mar 06, 2023 at 02:27:46PM +0100, Vít Ondruch wrote:
Dne 06. 03. 23 v 12:49 Ewoud Kohl van Wijngaarden napsal(a):
While rubygem-openscap is retired in Fedora, the Foreman project still packages it.
For context: rubygem-openscap can load libopenscap.so.8 and libopenscap.so.25 through FFI. Today we depend on a specific version, but every time it's bumped we go through a verification to see if the SO version hasn't been bumped.
At first I started with a trivial Requires: libopenscap.so.25 but that pulls in both openscap for i686 and x86_64. Directly depending on libopenscap.so.25()(64bit) feels wrong, so what is the correct approach here? Is there some helper macro here?
https://src.fedoraproject.org/rpms/rubygem-ruby-vips/blob/rawhide/f/rubygem-...
This is the solution that I was looking for. It only installs openscap.x86_64 and not openscap.i686.
The ISA based approach doesn't work since it's a noarch package, meaning the __isa* macros are unavailable.
Thanks everyone for your help.