2018-09-06 22:40:24

by Jarod Wilson

[permalink] [raw]
Subject: [PATCH] tools/perf: fix use of alternatives to find JDIR

When a build is run from something like a cron job, the user's $PATH is
rather minimal, of note, not including /usr/sbin in my own case. Because
of that, an automated rpm package build ultimately fails to find
libperf-jvmti.so, because somewhere within the build, this happens...

/bin/sh: alternatives: command not found
/bin/sh: alternatives: command not found
Makefile.config:849: No openjdk development package found, please install
JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel

...and while the build continues, libperf-jvmti.so isn't built, and things
fall down when rpm tries to find all the %files specified. Exact same
system builds everything just fine when the job is launched from a login
shell instead of a cron job, since alternatives is in $PATH, so openjdk is
actually found.

The test required to get into this section of code actually specifies the
full path, as does a block just above it, so let's do that here too.

CC: Peter Zijlstra <[email protected]>
CC: Ingo Molnar <[email protected]>
CC: Arnaldo Carvalho de Melo <[email protected]>
CC: Alexander Shishkin <[email protected]>
CC: Jiri Olsa <[email protected]>
CC: Namhyung Kim <[email protected]>
Signed-off-by: Jarod Wilson <[email protected]>
---
tools/perf/Makefile.config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index f6d1a03c7523..e30d20fb482d 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -833,7 +833,7 @@ ifndef NO_JVMTI
JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}')
else
ifneq (,$(wildcard /usr/sbin/alternatives))
- JDIR=$(shell alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g')
+ JDIR=$(shell /usr/sbin/alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g')
endif
endif
ifndef JDIR
--
2.16.1



2018-09-10 08:07:15

by Jiri Olsa

[permalink] [raw]
Subject: Re: [PATCH] tools/perf: fix use of alternatives to find JDIR

On Thu, Sep 06, 2018 at 06:18:12PM -0400, Jarod Wilson wrote:
> When a build is run from something like a cron job, the user's $PATH is
> rather minimal, of note, not including /usr/sbin in my own case. Because
> of that, an automated rpm package build ultimately fails to find
> libperf-jvmti.so, because somewhere within the build, this happens...
>
> /bin/sh: alternatives: command not found
> /bin/sh: alternatives: command not found
> Makefile.config:849: No openjdk development package found, please install
> JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel
>
> ...and while the build continues, libperf-jvmti.so isn't built, and things
> fall down when rpm tries to find all the %files specified. Exact same
> system builds everything just fine when the job is launched from a login
> shell instead of a cron job, since alternatives is in $PATH, so openjdk is
> actually found.
>
> The test required to get into this section of code actually specifies the
> full path, as does a block just above it, so let's do that here too.
>
> CC: Peter Zijlstra <[email protected]>
> CC: Ingo Molnar <[email protected]>
> CC: Arnaldo Carvalho de Melo <[email protected]>
> CC: Alexander Shishkin <[email protected]>
> CC: Jiri Olsa <[email protected]>
> CC: Namhyung Kim <[email protected]>
> Signed-off-by: Jarod Wilson <[email protected]>

Acked-by: Jiri Olsa <[email protected]>

thanks,
jirka

2018-10-16 13:10:57

by Jiri Olsa

[permalink] [raw]
Subject: Re: [PATCH] tools/perf: fix use of alternatives to find JDIR

On Mon, Sep 10, 2018 at 10:05:46AM +0200, Jiri Olsa wrote:
> On Thu, Sep 06, 2018 at 06:18:12PM -0400, Jarod Wilson wrote:
> > When a build is run from something like a cron job, the user's $PATH is
> > rather minimal, of note, not including /usr/sbin in my own case. Because
> > of that, an automated rpm package build ultimately fails to find
> > libperf-jvmti.so, because somewhere within the build, this happens...
> >
> > /bin/sh: alternatives: command not found
> > /bin/sh: alternatives: command not found
> > Makefile.config:849: No openjdk development package found, please install
> > JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel
> >
> > ...and while the build continues, libperf-jvmti.so isn't built, and things
> > fall down when rpm tries to find all the %files specified. Exact same
> > system builds everything just fine when the job is launched from a login
> > shell instead of a cron job, since alternatives is in $PATH, so openjdk is
> > actually found.
> >
> > The test required to get into this section of code actually specifies the
> > full path, as does a block just above it, so let's do that here too.
> >
> > CC: Peter Zijlstra <[email protected]>
> > CC: Ingo Molnar <[email protected]>
> > CC: Arnaldo Carvalho de Melo <[email protected]>
> > CC: Alexander Shishkin <[email protected]>
> > CC: Jiri Olsa <[email protected]>
> > CC: Namhyung Kim <[email protected]>
> > Signed-off-by: Jarod Wilson <[email protected]>
>
> Acked-by: Jiri Olsa <[email protected]>

Arnaldo,
could you please pull in this one?

thanks,
jirka

2018-10-16 15:05:04

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [PATCH] tools/perf: fix use of alternatives to find JDIR

Em Tue, Oct 16, 2018 at 03:09:59PM +0200, Jiri Olsa escreveu:
> On Mon, Sep 10, 2018 at 10:05:46AM +0200, Jiri Olsa wrote:
> > On Thu, Sep 06, 2018 at 06:18:12PM -0400, Jarod Wilson wrote:
> > > When a build is run from something like a cron job, the user's $PATH is
> > > rather minimal, of note, not including /usr/sbin in my own case. Because
> > > of that, an automated rpm package build ultimately fails to find
> > > libperf-jvmti.so, because somewhere within the build, this happens...
> > >
> > > /bin/sh: alternatives: command not found
> > > /bin/sh: alternatives: command not found
> > > Makefile.config:849: No openjdk development package found, please install
> > > JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel
> > >
> > > ...and while the build continues, libperf-jvmti.so isn't built, and things
> > > fall down when rpm tries to find all the %files specified. Exact same
> > > system builds everything just fine when the job is launched from a login
> > > shell instead of a cron job, since alternatives is in $PATH, so openjdk is
> > > actually found.
> > >
> > > The test required to get into this section of code actually specifies the
> > > full path, as does a block just above it, so let's do that here too.
> > >
> > > CC: Peter Zijlstra <[email protected]>
> > > CC: Ingo Molnar <[email protected]>
> > > CC: Arnaldo Carvalho de Melo <[email protected]>
> > > CC: Alexander Shishkin <[email protected]>
> > > CC: Jiri Olsa <[email protected]>
> > > CC: Namhyung Kim <[email protected]>
> > > Signed-off-by: Jarod Wilson <[email protected]>
> >
> > Acked-by: Jiri Olsa <[email protected]>
>
> Arnaldo,
> could you please pull in this one?

Sure, I thought I had already, will now.

- Arnaldo

Subject: [tip:perf/urgent] perf tools: Fix use of alternatives to find JDIR

Commit-ID: 36b8d4628d3cc8f5a748e508cce8673bc00fc63c
Gitweb: https://git.kernel.org/tip/36b8d4628d3cc8f5a748e508cce8673bc00fc63c
Author: Jarod Wilson <[email protected]>
AuthorDate: Thu, 6 Sep 2018 18:18:12 -0400
Committer: Arnaldo Carvalho de Melo <[email protected]>
CommitDate: Tue, 16 Oct 2018 12:06:47 -0300

perf tools: Fix use of alternatives to find JDIR

When a build is run from something like a cron job, the user's $PATH is
rather minimal, of note, not including /usr/sbin in my own case. Because
of that, an automated rpm package build ultimately fails to find
libperf-jvmti.so, because somewhere within the build, this happens...

/bin/sh: alternatives: command not found
/bin/sh: alternatives: command not found
Makefile.config:849: No openjdk development package found, please install
JDK package, e.g. openjdk-8-jdk, java-1.8.0-openjdk-devel

...and while the build continues, libperf-jvmti.so isn't built, and
things fall down when rpm tries to find all the %files specified. Exact
same system builds everything just fine when the job is launched from a
login shell instead of a cron job, since alternatives is in $PATH, so
openjdk is actually found.

The test required to get into this section of code actually specifies
the full path, as does a block just above it, so let's do that here too.

Signed-off-by: Jarod Wilson <[email protected]>
Acked-by: Jiri Olsa <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Namhyung Kim <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Stephane Eranian <[email protected]>
Cc: William Cohen <[email protected]>
Fixes: d4dfdf00d43e ("perf jvmti: Plug compilation into perf build")
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
---
tools/perf/Makefile.config | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index f6d1a03c7523..e30d20fb482d 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -833,7 +833,7 @@ ifndef NO_JVMTI
JDIR=$(shell /usr/sbin/update-java-alternatives -l | head -1 | awk '{print $$3}')
else
ifneq (,$(wildcard /usr/sbin/alternatives))
- JDIR=$(shell alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g')
+ JDIR=$(shell /usr/sbin/alternatives --display java | tail -1 | cut -d' ' -f 5 | sed 's%/jre/bin/java.%%g')
endif
endif
ifndef JDIR