Hi Lucas, Niko,

Niko Tyni (Sat, Jan 21, 2023 at 02:41:28PM +0000):
> Control: clone -1 -2
> Control: retitle -2 jexec: can't locate java: No such file or directory
> Control: reassign -2 openjdk-17-jre-headless 17.0.5+8-2
>
> On Wed, Jan 18, 2023 at 04:10:02AM +0100, Ángel wrote:
> > The error here is that ./debian/build-final-ckeditor.sh fails with
> > « can't locate java: No such file or directory »
> >
> > This script is actually calling ckbuilder ( jexec /usr/bin/ckbuilder --
> > build ... )

<TLDR>
  please just use "java -jar /usr/bin/ckbuilder" instead, details below.
</TLDR>

> >
> > However, the package correctly lists ckbuilder as a build-dep, and
> > ckbuilder itself depends on java ( default-jre | java{7..11}-runtime)
>
> > > update-alternatives: using /usr/lib/jvm/java-17-openjdk-
> > > amd64/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode
>
> Yeah, it looks to me like jexec from openjdk-17-jre-headless
> is just broken on sid?

Yes and it somewhat has ever been broken with regard to the way it is
being shipped within Debian.

The sole purpose for jexec is to use readlink(3) to find the correct
path of bin/java and execute a jar with a certian version of java.
(and to enable double click executions of jar files by binfmt magic).

This of course only works by invoking jexec with an absolute path,
e.g. running "/usr/bin/jexec /usr/bin/ckbuilder" should fix this.


All JDK source packages ship with patches to jexec to somehow
"emulate" this behaviour, which looks less than ideal to me. ;)

  openjdk-8-8u352-ga/debian/patches/jexec.diff.in
  openjdk-11-11.0.17+8/debian/patches/jexec.diff
  openjdk-17-17.0.5+8/debian/patches/jexec.diff


Open JDK 8 (pass)
-----------------------------------------------------------------------
readlink -sf /etc/alternatives/jexec
 => /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jexec

$ strace -e execve jexec 2>&1 |grep -E '(jexec|java)'

execve("/usr/bin/jexec", ["jexec"], 0x7ffd7c115b50 /* 59 vars */) = 0
execve("/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java",
  ["/usr/lib/jvm/java-8-openjdk-amd6"..., "-jar"], 0x7ffd657e2a18 /* 59
vars */) = 0

Open JDK 11 (pass)
-----------------------------------------------------------------------
readlink -sf /etc/alternatives/jexec
 => /usr/lib/jvm/java-11-openjdk-amd64/lib/jexec

$ strace -e execve jexec 2>&1 |grep -E '(jexec|java)'

execve("/usr/bin/jexec", ["jexec"], 0x7ffed43a0f20 /* 59 vars */) = 0
execve("/usr/lib/jvm/java-11-openjdk-amd64/bin/java",
  ["/usr/lib/jvm/java-11-openjdk-amd"..., "-jar"], 0x7ffdc7e44058 /* 59
vars */) = 0

Open JDK 17 (fail)
-----------------------------------------------------------------------
readlink -f /bin/jexec
 => /usr/lib/jvm/java-17-openjdk-amd64/lib/jexec

$ strace -e execve jexec 2>&1 |grep -E '(jexec|java)'

execve("/usr/bin/jexec", ["jexec"], 0x7fffb95f2cc0 /* 59 vars */) = 0
can't locate java: No such file or directory


To make things complicated further: what about users deciding to use
antoher JDK e.g. the (former Adoptium) Eclipse Temurin builds?
(everyone has to remember the "portability" joke right here:)


Temurin JDK 8 (fail)
-----------------------------------------------------------------------
readlink -sf /etc/alternatives/jexec
 => /usr/lib/jvm/temurin-8-jdk-amd64/lib/jexec

$ strace -e execve jexec 2>&1 |grep -E '(jexec|java)'

execve("/usr/bin/jexec", ["jexec"], 0x7ffe6c1b9320 /* 59 vars */) = 0
can't locate java: No such file or directory

Temurin JDK 11 (fail)
-----------------------------------------------------------------------
readlink -sf /etc/alternatives/jexec
 => /usr/lib/jvm/temurin-11-jdk-amd64/lib/jexec

$ strace -e execve jexec 2>&1 |grep -E '(jexec|java)'

execve("/usr/bin/jexec", ["jexec"], 0x7fff1d218450 /* 59 vars */) = 0
can't locate java: No such file or directory

Temurin JDK 17 (fail)
-----------------------------------------------------------------------
readlink -sf /etc/alternatives/jexec
 => /usr/lib/jvm/temurin-17-jdk-amd64/lib/jexec

$ strace -e execve jexec 2>&1 |grep -E '(jexec|java)'

execve("/usr/bin/jexec", ["jexec"], 0x7ffd110128b0 /* 59 vars */) = 0
can't locate java: No such file or directory


> I'm cloning a separate bug about this.

Yes, to be discussed further in #1029342

> Not sure why jexec is used here though. Just running /usr/bin/ckbuilder
> works for me (but the request-tracker5 build fails later, presumably
> due to a different bug.)

see my TLDR above

> --
> Niko Tyni   nt...@debian.org

BR
bert schulze

Reply via email to