blob: 5c5937bfe9169d2fc46aa60e82b9198d4f3e8048 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
#! /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/java ]; 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 [[ -d ${new_default}/jre ]]; then
ln -sf ${new_default}/jre ${DEFAULT_PATH_JRE}
else
ln -sf ${new_default} ${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
# We discoverd this Java env but its JRE is actually set as default
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 its parent is also a valid Java environment
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
potential_fixes=("${prev/\/jre}" "${prev}/jre")
openjdk8=('java-8-openjdk' 'java-8-openjdk/jre')
# List of environments to check by order of preference:
# - first potential fixes of user choices,
# - then OpenJDK8 as it is considered a default in Arch Linux
# - finally, any installed environment
to_check=(${potential_fixes[@]} ${openjdk8[@]} $(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
|