DebianThis forum is for the discussion of Debian Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
On a recent update of my Debian Stable system, which is otherwise working very well, I found following warning:
Quote:
Setting up openjdk-7-jre-headless:i386 (7u85-2.6.1-6+deb8u1) ...
Installing new version of config file /etc/java-7-openjdk/security/java.security ...
update-binfmts: warning: current package is openjdk-7, but binary format already installed by openjdk-6
Setting up openjdk-7-jre:i386 (7u85-2.6.1-6+deb8u1) ...
It seems I have multiple versions installed. I think default-jre-headless points to openjdk-7-jre-headless.
How can I optimize so that I can run java programs smoothly? Thanks for your help.
#! /bin/bash
# Arch Linux helper script to set/unset/check/fix the enabled Java environment
# This program may be freely redistributed under the terms of the GNU General Public License
#
# Author: Guillaume ALAUX <guillaume@archlinux.org>
JVM_DIR=/usr/lib/jvm
DEFAULT_NAME=default
DEFAULT_PATH=${JVM_DIR}/${DEFAULT_NAME}
DEFAULT_NAME_JRE=default-runtime
DEFAULT_PATH_JRE=${JVM_DIR}/${DEFAULT_NAME_JRE}
# Utility functions
check_root() {
if [ $(id -u) -ne 0 ]; then
echo 'This script must be run as root'
exit 1
fi
}
# $1: parameter count given to this script for this option
# $2: expected parameter count for this option
check_param_count() {
if [ $1 -ne $2 ]; then
echo 'Wrong parameter count'
exit 2
fi
}
# Second level functions
get_default_java() {
path=$(readlink -e ${DEFAULT_PATH})
if [ "x${path}" != "x/dev/null" ]; then
echo ${path/${JVM_DIR}\/}
else
echo ""
fi
}
get_installed_javas() {
if [ -d ${JVM_DIR} ]; then
for dir in $(find ${JVM_DIR} -mindepth 1 -maxdepth 1 -type d | sort); do
if [ -x ${dir}/bin/javac ]; then
javas+=(${dir/${JVM_DIR}\/})
else
if [ -x ${dir}/jre/bin/java ]; then
javas+=(${dir/${JVM_DIR}\/}/jre)
fi
fi
done
fi
echo ${javas[@]}
}
# $1: Java environment name to test
is_java_valid() {
test "x$1" != "x${DEFAULT_NAME}" && test -x ${JVM_DIR}/$1/bin/java
}
# $1: Java environment name to set as default
set_default_link_to() {
new_default=$1
unlink ${DEFAULT_PATH} 2>/dev/null
ln -sf ${new_default} ${DEFAULT_PATH}
unlink ${DEFAULT_PATH_JRE} 2>/dev/null
if [[ ${new_default} == */jre ]]; then
ln -sf ${new_default} ${DEFAULT_PATH_JRE}
else
ln -sf ${new_default}/jre ${DEFAULT_PATH_JRE}
fi
}
unset_default_link() {
unlink ${DEFAULT_PATH} 2>/dev/null
unlink ${DEFAULT_PATH_JRE} 2>/dev/null
}
# First level functions
do_status() {
installed_java=($(get_installed_javas))
if [ ${#installed_java[@]} -eq 0 ]; then
echo 'No compatible Java environment installed'
else
default_java=$(get_default_java)
echo 'Available Java environments:'
for java in ${installed_java[@]}; do
if [ "${java}/jre" = "${default_java}" ]; then
echo -e " ${java} (${java}/jre default)"
elif [ ${java} = "${default_java}" ]; then
echo -e " ${java} (default)"
else
echo " ${java}"
fi
done
if [ -z ${default_java} ]; then
echo "No Java environment set as default"
fi
fi
}
do_get() {
get_default_java
}
# $1: Java environment name to set as default
do_set() {
if ! is_java_valid $1; then
echo "'${JVM_DIR}/$1' is not a valid Java environment path"
exit 1
fi
default=$(get_default_java)
if [ "x$1" != "x${default}" ] || ! is_java_valid ${default}; then
unset_default_link
set_default_link_to $1
fi
#parent_dir=$(dirname $1)
#if is_java_valid ${parent_dir}; then
# echo "Warning: '${parent_dir}' looks like a valid JDK whereas '$1' is set as default"
# echo "Fix this with 'archlinux-java set ${parent_dir}'"
#fi
}
# $1: Java environment name to unset
do_unset() {
unset_default_link
}
do_fix() {
default=$(get_default_java)
if is_java_valid ${default}; then
if is_java_valid $(dirname ${default}); then
unset_default_link
set_default_link_to $(dirname ${default})
fi
else
prev=$(readlink ${DEFAULT_PATH})
unset_default_link
prev_fix=("${prev/\/jre}" "${prev}/jre")
openjdk7=('java-7-openjdk' 'java-7-openjdk/jre')
to_check=(${prev_fix[@]} ${openjdk7[@]} $(get_installed_javas))
for java in ${to_check[@]}; do
if ! is_java_valid $(get_default_java) && is_java_valid ${java}; then
set_default_link_to ${java}
fi
done
fi
if ! is_java_valid $(get_default_java); then
echo 'No valid Java environment found'
fi
}
usage() {
echo "$(basename $0) <COMMAND>"
echo -e "\nCOMMAND:"
echo -e '\tstatus\t\tList installed Java environments and enabled one'
echo -e '\tget\t\tReturn the short name of the Java environment set as default'
echo -e '\tset <JAVA_ENV>\tForce <JAVA_ENV> as default'
echo -e '\tunset\t\tUnset current default Java environment'
echo -e '\tfix\t\tFix an invalid/broken default Java environment configuration'
}
## Main
case $1 in
'status') do_status;;
'get') do_get;;
'set') check_root; check_param_count $# 2; do_set $2;;
'unset') check_root; do_unset;;
'fix') check_root; do_fix;;
'help' | '--help' | '-h' | '') usage;;
*) echo "$(basename $0): unknown option '$@'"; exit 1;;
esac
Using script program by @ondoho I found following:
Available Java environments:
java-1.5.0-gcj-4.6/jre
java-1.5.0-gcj-4.7/jre
java-1.5.0-gcj-4.9-i386
java-6-openjdk-i386/jre
java-7-openjdk-i386/jre
No Java environment set as default
'alternatives' is not installed in my Debian Stable. I checked repository- there is galternatives and kalternatives. I installed kalternatives which gave a GUI program but not 'alternatives' command. The GUI program also listed all above environments, in same order as above and they are in increasing order of priority. The java-7-openjdk has highest priority and is also checked on GUI program.
How can I just keep only gcj-4.9 and java-7-openjdk? Can I just uninstall others?
Will update-alternatives set the default only or remove others? I want to keep latest gcj and latest openjdk with openjdk as default. Can I use apt-get purge command for others?
update-alternatives will not remove software.
you can try to purge the other versions, but it's possible that some other software still depends on it and complains in the process. so unless you just blindly press Enter on everything, you can try that purge.
since this is java, it is also possible that some other software that is not installed through debian's packet management depends on some particular version.
in that case you wouldn't get a warning.
but you should know if you use software like that.
I purged all older versions and now following shows up on my system:
Code:
$ update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java 1071 auto mode
1 /usr/bin/gij-4.9 1049 manual mode
2 /usr/lib/jvm/java-7-openjdk-i386/jre/bin/java 1071 manual mode
Press enter to keep the current choice[*], or type selection number:
I think, the latest version of gcj seem to have changed to gij.
Currently purging older versions has not caused any problems but I will know in the future.
Very related to this is icedtea and I have following on my system:
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.