PHuV
Banned
- Registriert
- März 2005
- Beiträge
- 14.219
Ich habe hier gerade ein großes Verständnisproblem:
Ich installiere eine Java
https://linuxize.com/post/install-java-on-centos-8/
dnf -y install java-11-openjdk.x86_64
Mache ein
Und ich kann ein gewisses rpm-Paket von einem Hersteller (nicht öffentlich) installieren.
JAVA_HOME fehlt komischerweise, und wenn ich das JAVA per RPM installiere, ist es natürlich sofort verfügbar, weil es unter /usr/bin installiert wird.
Jetzt möchte ich das so nicht haben, sondern ein bestimmtes Java (weil vom Hersteller explizit supported und recommend) unter
/opt/java
auspacken und per /etc/bashrc setzen.
Mach ich seit Jahren so, funktionierte ohne RPM bisher immer. Siehe auch
https://stackoverflow.com/questions/14637979/how-to-permanently-set-path-on-linux-unix
Es soll aus diversen Gründen kein Java unter /usr/bin und diversen verteilten Verzeichnissen zu finden sein, sondern nur unter /opt/java.
Über die /etc/bashrc wird das Java schön für alle global gesetzt, wie es sein sollte. Prüfung zeigt ja, das Java (als User) immer verfübar, egal ob unter Root oder sonstige User auf diesem Server.
Aber ich kann es nicht installieren, weil folgende Fehlermeldung kommt.
Im Scriptlet vom rpm-Paket finde ich in %pre folgenden Code:
Packe ich das in ein Script und starte es, alles in Ordnung. Alternatives Setzen über /root/.bashrc oder /root/.bash_profile brachte übrigens kein Erfolg, ebenso ein Reboot nicht.
Wo liegt nun mein Denkfehler? Vermutung: yum bzw. dnf laufen mit eigenem Service (wie systemd) und findet die JAVA_HOME nicht. Aber warum geht das, wenn ich das Java direkt über den Repomanager installiere?
Ich installiere eine Java
https://linuxize.com/post/install-java-on-centos-8/
dnf -y install java-11-openjdk.x86_64
Mache ein
Code:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64
Und ich kann ein gewisses rpm-Paket von einem Hersteller (nicht öffentlich) installieren.
JAVA_HOME fehlt komischerweise, und wenn ich das JAVA per RPM installiere, ist es natürlich sofort verfügbar, weil es unter /usr/bin installiert wird.
Jetzt möchte ich das so nicht haben, sondern ein bestimmtes Java (weil vom Hersteller explizit supported und recommend) unter
/opt/java
auspacken und per /etc/bashrc setzen.
Code:
JAVA_HOME=/opt/java
PATH=$JAVA_HOME/bin:.:$PATH
export JAVA_HOME PATH
https://stackoverflow.com/questions/14637979/how-to-permanently-set-path-on-linux-unix
Es soll aus diversen Gründen kein Java unter /usr/bin und diversen verteilten Verzeichnissen zu finden sein, sondern nur unter /opt/java.
Code:
[root@server user]# echo $JAVA_HOME $PATH
/opt/java /opt/java/bin:/sbin:/bin:/usr/sbin:/usr/bin
[root@server user]# java -version
openjdk version "11.0.7" 2020-04-14 LTS
OpenJDK Runtime Environment Zulu11.39+15-CA (build 11.0.7+10-LTS)
OpenJDK 64-Bit Server VM Zulu11.39+15-CA (build 11.0.7+10-LTS, mixed mode)
[root@server user]# which java
/opt/java/bin/java
Aber ich kann es nicht installieren, weil folgende Fehlermeldung kommt.
Code:
Running scriptlet: programm-v.3.1-2020032211130.x86_64 1/1
No java in PATH, exiting ...
Please install Java 1.8 and add java executable to PATH variable.
error: %prein(programm-v.3.1-2020032211130.x86_64) scriptlet failed, exit status 1
Error in PREIN scriptlet in rpm package talend-jobserver
Verifying : programm-v.3.1-2020032211130.x86_64 1/1
Installed products updated.
Im Scriptlet vom rpm-Paket finde ich in %pre folgenden Code:
Code:
if [ "$1" = "1" ]; then
## We are handling new Installation (pre-install script)
## Limitation: files are still not copied, we cannot call external scripts
# Our preconditions to install:
# - java should be available in PATH
# - JAVA_HOME should point on the same version like java executed directly from cmdline
if [ -z "`which java 2>/dev/null`" ]; then
echo "No java in PATH, exiting ..."
echo "Please install Java 1.8 and add java executable to PATH variable."
exit 1
fi
if [ -z "$JAVA_HOME" -o ! -f $JAVA_HOME/bin/java ]; then
echo "JAVA_HOME variable is not set up or it points on a wrong location !"
echo "Please set up JAVA_HOME variable properly and re-run the installation."
exit 1
fi
java_home_ver=`$JAVA_HOME/bin/java -version 2>&1 | grep version | sed s/.*version\ //`
java_cmdline_ver=`java -version 2>&1 | grep version | sed s/.*version\ //`
if [ "$java_home_ver" != "$java_cmdline_ver" ]; then
echo "Error: Java version from command line mismatches with Java version from JAVA_HOME !"
echo "JAVA_HOME point on java version : $java_home_ver"
echo "java version from command line : $java_cmdline_ver"
echo "Please make them equivalent and then re-run the installation."
exit 1
fi
Packe ich das in ein Script und starte es, alles in Ordnung. Alternatives Setzen über /root/.bashrc oder /root/.bash_profile brachte übrigens kein Erfolg, ebenso ein Reboot nicht.
Wo liegt nun mein Denkfehler? Vermutung: yum bzw. dnf laufen mit eigenem Service (wie systemd) und findet die JAVA_HOME nicht. Aber warum geht das, wenn ich das Java direkt über den Repomanager installiere?
Zuletzt bearbeitet: