> strace ./jruby -v
execve("./jruby", ["./jruby", "-v"], 0x7ffed4255d18 /* 79 vars */) = 0
brk(NULL) = 0x560ea10cd000
arch_prctl(0x3001 /* ARCH_??? */, 0x7ffe50c88c00) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=109534, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 109534, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f45ae8b1000
close(3) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\22\n\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=2182368, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45ae8af000
mmap(NULL, 2197632, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f45ae696000
mmap(0x7f45ae72f000, 1060864, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x99000) = 0x7f45ae72f000
mmap(0x7f45ae832000, 442368, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x19c000) = 0x7f45ae832000
mmap(0x7f45ae89e000, 57344, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x207000) = 0x7f45ae89e000
mmap(0x7f45ae8ac000, 10368, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f45ae8ac000
close(3) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\3405\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=104984, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 107592, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f45ae67b000
mprotect(0x7f45ae67e000, 90112, PROT_NONE) = 0
mmap(0x7f45ae67e000, 73728, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x3000) = 0x7f45ae67e000
mmap(0x7f45ae690000, 12288, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15000) = 0x7f45ae690000
mmap(0x7f45ae694000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x18000) = 0x7f45ae694000
close(3) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\240\206\2\0\0\0\0\0"..., 832) = 832
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
pread64(3, "\4\0\0\0 \0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0"..., 48, 848) = 48
pread64(3, "\4\0\0\0\24\0\0\0\3\0\0\0GNU\0+H)\227\201T\214\233\304R\352\306\3379\220%"..., 68, 896) = 68
newfstatat(3, "", {st_mode=S_IFREG|0755, st_size=1983576, ...}, AT_EMPTY_PATH) = 0
pread64(3, "\6\0\0\0\4\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0"..., 784, 64) = 784
mmap(NULL, 2012056, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f45ae48f000
mmap(0x7f45ae4b5000, 1486848, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x26000) = 0x7f45ae4b5000
mmap(0x7f45ae620000, 311296, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x191000) = 0x7f45ae620000
mmap(0x7f45ae66c000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1dc000) = 0x7f45ae66c000
mmap(0x7f45ae672000, 33688, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f45ae672000
close(3) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300\363\0\0\0\0\0\0"..., 832) = 832
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=1364824, ...}, AT_EMPTY_PATH) = 0
mmap(NULL, 1364240, PROT_READ, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f45ae341000
mmap(0x7f45ae350000, 679936, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xf000) = 0x7f45ae350000
mmap(0x7f45ae3f6000, 618496, PROT_READ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xb5000) = 0x7f45ae3f6000
mmap(0x7f45ae48d000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14b000) = 0x7f45ae48d000
close(3) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45ae33f000
arch_prctl(ARCH_SET_FS, 0x7f45ae340180) = 0
mprotect(0x7f45ae66c000, 12288, PROT_READ) = 0
mprotect(0x7f45ae48d000, 4096, PROT_READ) = 0
mprotect(0x7f45ae694000, 4096, PROT_READ) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f45ae33d000
mprotect(0x7f45ae89e000, 45056, PROT_READ) = 0
mprotect(0x560e9fe23000, 4096, PROT_READ) = 0
mprotect(0x7f45ae8fe000, 8192, PROT_READ) = 0
munmap(0x7f45ae8b1000, 109534) = 0
brk(NULL) = 0x560ea10cd000
brk(0x560ea10ee000) = 0x560ea10ee000
readlink("/proc/self/exe", "/tmp/jruby/jruby-9.3.1.0/bin/jru"..., 4096) = 34
newfstatat(AT_FDCWD, "/tmp/jruby/jruby-9.3.1.0/bin/jruby", {st_mode=S_IFREG|0755, st_size=97176, ...}, 0) = 0
access("/dev/urandom", R_OK) = 0
newfstatat(AT_FDCWD, "/home/nirvdrum/.rbenv/shims/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/opt/JetBrains/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/nirvdrum/.rbenv/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/nirvdrum/.cargo/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/nirvdrum/dev/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/opt/wine-staging/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/nirvdrum/.local/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/nirvdrum/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/nirvdrum/.opam/4.11.1/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/nirvdrum/.cargo/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/nirvdrum/.local/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/home/nirvdrum/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/local/sbin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/local/bin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/sbin/java", 0x7ffe50c877a0, 0) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/bin/java", {st_mode=S_IFDIR|0755, st_size=11, ...}, 0) = 0
access("/usr/libexec/java_home", R_OK|X_OK) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/bin/java", {st_mode=S_IFLNK|0777, st_size=22, ...}, AT_SYMLINK_NOFOLLOW) = 0
readlink("/usr", 0x7ffe50c85f40, 1023) = -1 EINVAL (Invalid argument)
readlink("/usr/bin", 0x7ffe50c85f40, 1023) = -1 EINVAL (Invalid argument)
readlink("/usr/bin/java", "/etc/alternatives/java", 1023) = 22
readlink("/etc", 0x7ffe50c85f40, 1023) = -1 EINVAL (Invalid argument)
readlink("/etc/alternatives", 0x7ffe50c85f40, 1023) = -1 EINVAL (Invalid argument)
readlink("/etc/alternatives/java", "/usr/lib/jvm/java-1.15.0-openjdk"..., 1023) = 38
readlink("/usr", 0x7ffe50c85f40, 1023) = -1 EINVAL (Invalid argument)
readlink("/usr/lib", 0x7ffe50c85f40, 1023) = -1 EINVAL (Invalid argument)
readlink("/usr/lib/jvm", 0x7ffe50c85f40, 1023) = -1 EINVAL (Invalid argument)
readlink("/usr/lib/jvm/java-1.15.0-openjdk-amd64", "java-15-openjdk-amd64", 1023) = 21
readlink("/usr/lib/jvm/java-15-openjdk-amd64", 0x7ffe50c85f40, 1023) = -1 EINVAL (Invalid argument)
newfstatat(AT_FDCWD, "/tmp/jruby/jruby-9.3.1.0/lib/jni", {st_mode=S_IFDIR|0775, st_size=440, ...}, 0) = 0
uname({sysname="Linux", nodename="melchior-linux", ...}) = 0
openat(AT_FDCWD, "/tmp/jruby/jruby-9.3.1.0/lib/jni", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
newfstatat(3, "", {st_mode=S_IFDIR|0775, st_size=440, ...}, AT_EMPTY_PATH) = 0
getdents64(3, 0x560ea10df4e0 /* 22 entries */, 32768) = 768
getdents64(3, 0x560ea10df4e0 /* 0 entries */, 32768) = 0
close(3) = 0
access("/usr/lib/lib/modules", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/release", O_RDONLY) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/tmp/jruby/jruby-9.3.1.0/lib/jruby.jar", {st_mode=S_IFREG|0644, st_size=15651642, ...}, 0) = 0
newfstatat(AT_FDCWD, "/tmp/jruby/jruby-9.3.1.0/lib/jruby.jar", {st_mode=S_IFREG|0644, st_size=15651642, ...}, 0) = 0
newfstatat(AT_FDCWD, "/tmp/jruby/jruby-9.3.1.0/lib/jruby-complete.jar", 0x7ffe50c87280, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/tmp/jruby/jruby-9.3.1.0/lib", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
newfstatat(3, "", {st_mode=S_IFDIR|0755, st_size=100, ...}, AT_EMPTY_PATH) = 0
brk(0x560ea1110000) = 0x560ea1110000
getdents64(3, 0x560ea10e7990 /* 5 entries */, 32768) = 128
getdents64(3, 0x560ea10e7990 /* 0 entries */, 32768) = 0
brk(0x560ea1108000) = 0x560ea1108000
close(3) = 0
newfstatat(AT_FDCWD, "/usr/lib/jvm/java-15-openjdk-amd64", {st_mode=S_IFDIR|0755, st_size=11, ...}, 0) = 0
execve("/usr/lib/jvm/java-15-openjdk-amd64", ["/usr/lib/jvm/java-15-openjdk-amd"..., "-Djdk.home=/usr/lib", "-Djruby.home=/tmp/jruby/jruby-9."..., "-Djruby.script=jruby", "-Djruby.shell=/bin/sh", "-Djffi.boot.library.path=/tmp/jr"..., "-Xss2048k", "-Dsun.java.command=org.jruby.Mai"..., "-Xbootclasspath/a:/tmp/jruby/jru"..., "-cp", "", "-Djava.security.egd=file:/dev/ur"..., "org/jruby/Main", "-v"], 0x7ffe50c88d70 /* 79 vars */) = -1 EACCES (Permission denied)
newfstatat(1, "", {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0xa), ...}, AT_EMPTY_PATH) = 0
write(1, "execv failed: Permission denied "..., 37execv failed: Permission denied (13)
) = 37
exit_group(255) = ?
+++ exited with 255 +++
I recently installed JRuby 9.3.1.0 using ruby-build. The ruby-build recipe will install the jruby-launcher gem, which will replace bin/jruby in the distribution. When I try to run JRuby, I see the following error:
If I fetch the JRuby tarball and run it locally with the original bin/jruby, everything works. I've narrowed the issue down to the replaced launcher from jruby-launcher. Moreover, I've discovered I only get the failure when the
JAVA_HOMEenv var is not set. With other Java applications, that isn't an issue asjavais available on thePATH.Currently, my
javacommand is coming from Homebrew for Linux:If I set my
JAVA_HOMEenv var to/home/linuxbrew/.linuxbrew/Cellar/openjdk/17the launcher begins working.Here is the strace output when trying to start the launcher:
This looks like a similar situation to #31.