Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Facter FFI extensions not working on AIX with 64 bit ruby #2787

Open
SaltyAlan opened this issue Jan 15, 2025 · 0 comments
Open

Facter FFI extensions not working on AIX with 64 bit ruby #2787

SaltyAlan opened this issue Jan 15, 2025 · 0 comments
Labels
bug Something isn't working

Comments

@SaltyAlan
Copy link

Describe the Bug

Facter FFI extensions not working on AIX with 64 bit ruby

Thanks for the assistance with previous issue I logged running facter with FFI: #2785

That issue was resolved with the FFI project - it turns out there was a recent AIX bug I needed to install a patch for.

I got past that FFI issue now with the patch installed - it looks like there is another issue that was hiding behind that FFI AIX bug issue.

By default, ruby on AIX is 64 bit. When I install facter and ffi with 64 bit ruby, when I run facter it fails with invalid magic number errors for the FFI - indicating a 64/32 bit mismatch.

If I change the system to use 32 bit ruby, and reinstall facter and ffi with 32 bit ruby, facter works normally.

Expected Behavior

Facter and ffi working with 64 bit ruby

Steps to Reproduce

Install the gems after prerequisite RPMs installed (as in the environment below):

# dnf list installed ruby ruby-devel libffi libffi-devel gcc10
Installed Packages
gcc10.ppc                                                                       10.3.0-6 
libffi.ppc                                                                      3.4.4-2  
libffi-devel.ppc                                                                3.4.4-2  
ruby.ppc                                                                        3.3.5-1  
ruby-devel.ppc                                                                  3.3.5-1  

# gem install ffi-1.17.1.gem facter-4.10.0.gem
Building native extensions. This could take a while...
Successfully installed ffi-1.17.1
Successfully installed facter-4.10.0
2 gems installed

Calling FFI with ruby succeeds:

# ruby -rffi -e "puts FFI::Library::LIBC"
libc.so

However facter fails with:

[2025-01-15 15:36:55.161676 ] ERROR Facter::Resolvers::Aix::Networking - Resolving fact primary_interface, but got Could not open library 'libc.a(shr.o)':  0509-022 Cannot load module /usr/lib/libc.a(shr.o).
        0509-103   The module has an invalid magic number..
Could not open library 'libc.a(shr.o).so':      0509-022 Cannot load module .
        0509-026 System error: A file or directory in the path name does not exist..
Searched in <system library path> at /opt/freeware/share/ruby/gems/3.3/gems/ffi-1.17.1/lib/ffi/dynamic_library.rb:94:in `load_library'
...
...

Environment

AIX version:
AIX 7.3 TL3 SP0

Prerequisite RPMs installed (installed from AIX toolbox for open source applications - https://www.ibm.com/support/pages/node/882892) :
ruby-3.3.5
ruby-devel-3.3.5
libffi-3.4.4
libffi-devel-3.4.4
gcc10-10.3.0-6

GEMs:
facter-4.10.0.gem
ffi-1.17.1.gem

Additional Context

I can work around this as follows to use 32 bit ruby.

Uninstall facter and ffi that were installed in 64 bit mode.

# gem uninstall facter ffi
Successfully uninstalled ffi-1.17.1
Remove executables:
        facter

in addition to the gem? [Yn]  y
Removing facter
Successfully uninstalled facter-4.10.0

Change symbolic link for ruby from 64 to 32 bit version.

# cd /opt/freeware/bin
# rm ruby
# ls -l ruby*
-rwxr-xr-x    1 root     system        85056 Nov 20 18:02 ruby_32
-rwxr-xr-x    1 root     system        86807 Nov 20 18:01 ruby_64
# ln -s ruby_32 ruby

Reinstall gems with 32 bit ruby. This seems to compile FFI in 32 bit mode.

# gem install ffi-1.17.1.gem facter-4.10.0.gem
Building native extensions. This could take a while...
Successfully installed ffi-1.17.1
Successfully installed facter-4.10.0
2 gems installed

Then facter works normally.

Regarding the system library it is looking for in the error when run in 64 bit mode- the shr.o object only exists in the /usr/lib/libc.a archive in 32 bit mode.

# ar -X32 -tv /usr/lib/libc.a shr.o
r-xr-xr-x     2/2     1228445 Oct 15 06:05 2024 shr.o
# ar -X64 -tv /usr/lib/libc.a shr.o
ar: 0707-109 Member name shr.o does not exist.

The 64 bit version of the object is shr_64.o

# ar -X64 -tv /usr/lib/libc.a shr_64.o
r-xr-xr-x     2/2     1407032 Oct 15 06:05 2024 shr_64.o

Any further assistance appreciated.

Thanks,
Alan

@SaltyAlan SaltyAlan added the bug Something isn't working label Jan 15, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

1 participant