Re: [jruby-user] JRuby 1.7.17: getppid unsupported or native support failed to load

Michael Pitman <[email protected]> Tue, 30 Dec 2014 09:51:46 +1100
Newsgroups gmane.comp.lang.jruby.user
Message-ID <CAL-6QiUVZ_jZ7eek8E9b1y+gRYwvsZuyuqmN0Kyc6BndfST-wA@mail.gmail.com>
Some further investigation and googling reveals this to be a problem with
Java on Linux, rather than specifically a jruby issue.

Java does not look at the configured library paths (configured in
/etc/ld.so.conf.d, but rather only at the environment
variable LD_LIBRARY_PATH or the Java property java.library.path. On that
machine, adding the path /lib/x86_64-linux-gnu to either of those paths
also solves the problem. We're going to proceed with one of these solutions
in our production environments.

Thanks for your help.

Michael


On 23 December 2014 at 02:03, Thomas E Enebo <[email protected]> wrote:

> Ok.  This second email makes me feel a little better about putting out a
> 1.7.18 :)
>
> I have not been a sysadmin for >20 years (so you could call me really
> rusty -- rusty enough to give you tetanus) but to solve these sorts of
> issues I used to just add the path to /etc/ldconfig.  I think you can also
> set LD_LIBRARY_PATH to include this as well if you do not have root
> access.  I don't know if Ubuntu is not exposing this directory for a
> particular reason or not but I would guess examiing what other things are
> in that directory would help figure that out.  I am really really hoping
> something went wrong on your particular system and the path did not get
> added to ldcofig.
>
> If someone can determine this configuration is common for Ubuntu (or other
> linuxes) we will try and figure out something which does not require manual
> intervention.
>
> -Tom
>
>
> On Sun, Dec 21, 2014 at 5:37 PM, Michael Pitman <[email protected]
> > wrote:
>
>> Hi Tom,
>>
>> So it's picking up the library as "libcrypt.so.1" if it's installed in
>> /lib (as it is in Ubuntu 10.04), but not if it's installed
>> under /lib/x86_64-linux-gnu (as it is in Ubuntu 12.04).
>>
>> I can get it to load if I do either:
>>
>> ln -s /lib/x86_64-linux-gnu/libcrypt-2.15.so /lib/libcrypt.so.1
>> or
>> ln -s /lib/x86_64-linux-gnu/libcrypt-2.15.so
>> /lib/x86_64-linux-gnu/libcrypt.so
>>
>> ie link from /lib to /lib/x86_64-linux-gnu/ as libcrypt.so.1 or create
>> the link as simply libcrypt.so under /lib/x86_64-linux-gnu
>>
>> It feels to me like that's not going to be the root cause, but rather
>> would indicate a mis-configuration of the machine somewhere.
>>
>> Is it possible to get jruby working with this configuration (eg by using
>> fall-backs), or do we consider this a machine configuration problem, and
>> fix it on our production servers?
>>
>> Thanks,
>>
>> Michael
>>
>>
>>
>> On 20 December 2014 at 11:36, Michael Pitman <[email protected]>
>> wrote:
>>
>>> Hi Tom,
>>>
>>> Thanks for that, it certainly detected the underlying problem:
>>>
>>> > jruby -Xnative.verbose=true -e 'p Process.ppid'
>>>
>>> Failed to load native POSIX impl; falling back on Java impl. Stacktrace
>>> follows.
>>> java.lang.UnsatisfiedLinkError: libcrypt.so: cannot open shared object
>>> file: No such file or directory
>>> at
>>> jnr.ffi.provider.jffi.NativeLibrary.loadNativeLibraries(NativeLibrary.java:87)
>>> at
>>> jnr.ffi.provider.jffi.NativeLibrary.getNativeLibraries(NativeLibrary.java:70)
>>> at
>>> jnr.ffi.provider.jffi.NativeLibrary.getSymbolAddress(NativeLibrary.java:49)
>>> at
>>> jnr.ffi.provider.jffi.NativeLibrary.findSymbolAddress(NativeLibrary.java:59)
>>> at
>>> jnr.ffi.provider.jffi.AsmLibraryLoader.generateInterfaceImpl(AsmLibraryLoader.java:117)
>>> at
>>> jnr.ffi.provider.jffi.AsmLibraryLoader.loadLibrary(AsmLibraryLoader.java:59)
>>> at
>>> jnr.ffi.provider.jffi.NativeLibraryLoader.loadLibrary(NativeLibraryLoader.java:43)
>>> at jnr.ffi.LibraryLoader.load(LibraryLoader.java:265)
>>> at jnr.ffi.Library.loadLibrary(Library.java:123)
>>> at
>>> jnr.posix.POSIXFactory$DefaultLibCProvider$SingletonHolder.<clinit>(POSIXFactory.java:223)
>>> at
>>> jnr.posix.POSIXFactory$DefaultLibCProvider.getLibC(POSIXFactory.java:227)
>>> at jnr.posix.BaseNativePOSIX.<init>(BaseNativePOSIX.java:36)
>>> at jnr.posix.LinuxPOSIX.<init>(LinuxPOSIX.java:18)
>>> at jnr.posix.POSIXFactory.loadLinuxPOSIX(POSIXFactory.java:95)
>>> at jnr.posix.POSIXFactory.loadNativePOSIX(POSIXFactory.java:69)
>>> at jnr.posix.POSIXFactory.loadPOSIX(POSIXFactory.java:38)
>>> at jnr.posix.LazyPOSIX.loadPOSIX(LazyPOSIX.java:35)
>>> at jnr.posix.LazyPOSIX.posix(LazyPOSIX.java:31)
>>> at jnr.posix.LazyPOSIX.umask(LazyPOSIX.java:301)
>>> at org.jruby.RubyFile.getUmaskSafe(RubyFile.java:1514)
>>> ...
>>> NotImplementedError: getppid unsupported or native support failed to load
>>>
>>>
>>> The machine has libcrypt installed:
>>>
>>> > ldconfig -p  | grep libcrypt
>>> libcrypto.so.1.0.0 (libc6,x86-64) =>
>>> /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
>>> libcrypto.so.0.9.8 (libc6,x86-64) =>
>>> /lib/x86_64-linux-gnu/libcrypto.so.0.9.8
>>> libcrypto.so.0.9.8 (libc6,x86-64) =>
>>> /usr/lib/x86_64-linux-gnu/libcrypto.so.0.9.8
>>> libcrypt.so.1 (libc6,x86-64, OS ABI: Linux 2.6.24) =>
>>> /lib/x86_64-linux-gnu/libcrypt.so.1
>>>
>>>
>>> But it's not installed as libcrypt.so, since the package libc6 is
>>> installed, but not libc6-dev, which installs and links that file. It also
>>> explains why this is working on our dev machines, but not on the
>>> production-like boxes.
>>>
>>> I'd rather not ask our clients to install development libraries on their
>>> production machines, so is it possible to coerce jruby to use the library
>>> installed as .so.1  if it is found?
>>>
>>> Thanks,
>>>
>>> Michael
>>>
>>>
>>>
>>>
>>>
>>> On 20 December 2014 at 01:36, Thomas E Enebo <[email protected]>
>>> wrote:
>>>>
>>>> Can you try jruby -Xnative.verbose=true -e 'p Process.ppid'?  Can you
>>>> also tell me whether this machine has libcrypt?  That was the main change
>>>> to jnr-posix around 1.7.17's release.
>>>>
>>>> -Tom
>>>>
>>>> On Thu, Dec 18, 2014 at 3:37 PM, Michael Pitman <
>>>> [email protected]> wrote:
>>>>>
>>>>> Hi,
>>>>>
>>>>> I'm getting an error trying to run a "runnable" war on one of our
>>>>> production (Ubuntu 12.04) machines under jruby 1.7.17. We have isolated it
>>>>> just to 1.7.17, since it works OK when using 1.7.16.2, and all other gems
>>>>> and code are identical.
>>>>>
>>>>> There must be something on that machining that's triggering this to
>>>>> happen, since the exact same war file works on other machines. The machine
>>>>> was failing while running java version 1.7.0_21, but I upgraded java
>>>>> to 1.7.0_72 and it continues to fail.
>>>>>
>>>>> Anyway, below is the stack trace, and I'd appreciate any help in
>>>>> resolving the issue. Below that I've listed the linked library versions, if
>>>>> that's any help.
>>>>>
>>>>> Thanks very much,
>>>>>
>>>>> Michael
>>>>>
>>>>> NotImplementedError: getppid unsupported or native support failed to
>>>>> load
>>>>> org/jruby/RubyProcess.java:752:in `ppid'
>>>>> org/jruby/RubyProcess.java:749:in `ppid'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/systemu-2.6.4/lib/systemu.rb:28:in
>>>>> `SystemUniversal'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/systemu-2.6.4/lib/systemu.rb:13:in
>>>>> `(root)'
>>>>> org/jruby/RubyKernel.java:1071:in `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:236:in
>>>>> `load_dependency'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/macaddr-1.7.1/lib/macaddr.rb:1:in
>>>>> `(root)'
>>>>> org/jruby/RubyKernel.java:1071:in `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:236:in
>>>>> `load_dependency'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/macaddr-1.7.1/lib/macaddr.rb:23:in
>>>>> `(root)'
>>>>> org/jruby/RubyKernel.java:1071:in `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:236:in
>>>>> `load_dependency'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/uuid-2.3.7/lib/uuid.rb:1:in
>>>>> `(root)'
>>>>> org/jruby/RubyKernel.java:1071:in `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:236:in
>>>>> `load_dependency'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/uuid-2.3.7/lib/uuid.rb:14:in
>>>>> `(root)'
>>>>> org/jruby/RubyKernel.java:1071:in `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:236:in
>>>>> `load_dependency'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/savon-2.8.0/lib/savon/header.rb:1:in
>>>>> `(root)'
>>>>> org/jruby/RubyKernel.java:1071:in `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:236:in
>>>>> `load_dependency'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/savon-2.8.0/lib/savon/header.rb:3:in
>>>>> `(root)'
>>>>> org/jruby/RubyKernel.java:1071:in `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:236:in
>>>>> `load_dependency'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/activesupport-3.2.21/lib/active_support/dependencies.rb:251:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/savon-2.8.0/lib/savon/builder.rb:1:in
>>>>> `(root)'
>>>>> org/jruby/RubyKernel.java:1071:in `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/savon-2.8.0/lib/savon/builder.rb:1:in
>>>>> `(root)'
>>>>> org/jruby/RubyArray.java:1613:in `each'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/savon-2.8.0/lib/savon/operation.rb:1:in
>>>>> `(root)'
>>>>> org/jruby/RubyArray.java:1613:in `each'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/savon-2.8.0/lib/savon/operation.rb:4:in
>>>>> `(root)'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/savon-2.8.0/lib/savon/client.rb:1:in
>>>>> `(root)'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/savon-2.8.0/lib/savon/client.rb:1:in
>>>>> `(root)'
>>>>> org/jruby/RubyKernel.java:1071:in `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/savon-2.8.0/lib/savon.rb:1:in
>>>>> `(root)'
>>>>> org/jruby/RubyKernel.java:1087:in `load'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/savon-2.8.0/lib/savon.rb:26:in
>>>>> `(root)'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/bundler-1.7.8/lib/bundler/runtime.rb:1:in
>>>>> `(root)'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/bundler-1.7.8/lib/bundler/runtime.rb:76:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/bundler-1.7.8/lib/bundler/runtime.rb:72:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/bundler-1.7.8/lib/bundler/runtime.rb:61:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/bundler-1.7.8/lib/bundler.rb:134:in
>>>>> `require'
>>>>> /tmp/jruby8149531281028435272extract/config/application.rb:13:in
>>>>> `(root)'
>>>>> /tmp/jruby8149531281028435272extract/Rakefile:1:in `(root)'
>>>>> /tmp/jruby8149531281028435272extract/gems/gems/rake-10.4.2/bin/rake:36:in
>>>>> `(root)'
>>>>> error: org.jruby.exceptions.RaiseException: (SystemExit) exit
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> > ldd `which java`
>>>>> linux-vdso.so.1 =>  (0x00007fffa53fe000)
>>>>> libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0
>>>>> (0x00007fb13ca13000)
>>>>> libjli.so => not found
>>>>> libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fb13c80e000)
>>>>> libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb13c44f000)
>>>>> /lib64/ld-linux-x86-64.so.2 (0x00007fb13cc36000)
>>>>>
>>>>> /lib/x86_64-linux-gnu/libpthread.so.0 -> libpthread-2.15.so
>>>>> /lib/x86_64-linux-gnu/libdl.so.2 -> libdl-2.15.so
>>>>> /lib/x86_64-linux-gnu/libc.so.6 -> libc-2.15.so
>>>>> /lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-2.15.so
>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> blog: http://blog.enebo.com       twitter: tom_enebo
>>>> mail: [email protected]
>>>>
>>>
>>
>
>
> --
> blog: http://blog.enebo.com       twitter: tom_enebo
> mail: [email protected]
>