diff options
-rwxr-xr-x | scripts/update-java-alternatives | 145 | ||||
-rw-r--r-- | scripts/update-java-alternatives.8 | 55 |
2 files changed, 200 insertions, 0 deletions
diff --git a/scripts/update-java-alternatives b/scripts/update-java-alternatives new file mode 100755 index 0000000..3e232b7 --- /dev/null +++ b/scripts/update-java-alternatives @@ -0,0 +1,145 @@ +#! /bin/bash + +shopt -s dotglob + +prog=$(basename $0) + +usage() +{ + rv=$1 + cat >&2 <<-EOF + usage: $prog [--jre] [--plugin] [ -t|--test|-v|--verbose] + -l|--list [<jname>] + -s|--set <jname> + -a|--auto + -h|-?|--help + EOF + exit $rv +} + +action= +uaopts='--quiet' + +while [ "$#" -gt 0 ]; do + case "$1" in + -a|--auto) + [ -z "$action" ] || usage 1 + action=auto;; + -j|--jre) + jreonly=yes;; + --plugin) + pluginonly=yes;; + -l|--list) + [ -z "$action" ] || usage 1 + action=list + if [ "$#" -gt 0 ]; then + shift + jname=$1 + fi + ;; + -s|--set) + [ -z "$action" ] || usage 1 + action=set + shift + [ "$#" -gt 0 ] || usage 1 + jname=$1 + ;; + -t|--test) + dryrun=yes + uaopts="$uaopts --test";; + -v|--verbose) + verbose=yes + uaopts="${uaopts/--quiet/}";; + -h|-?|--help) + usage 0;; + -*) + usage 1;; + *) + break;; + esac + shift +done + +[ "$#" -eq 0 ] || usage 1 +[ -n "$action" ] || usage 1 + +which='^(jre|jdk|plugin|DUMMY) ' +[ -n "$jreonly$pluginonly" ] && which=${which/jdk|/} +[ -n "$pluginonly" ] && [ -z "$jreonly" ] && which=${which/jre|/} +[ -z "$pluginonly" ] && [ -n "$jreonly" ] && which=${which/plugin|/} + +top=/usr/lib/jvm + +if [ -n "$jname" ]; then + case "$jname" in + /*) jdir=$jname; jname=$(basename $jdir);; + *) jdir=$top/$jname + esac + if [ ! -d $jdir ]; then + echo >&2 "$prog: directory does not exist: $jdir" + exit 1 + fi + if [ -f $top/.$jname.jinfo ]; then + jinfo=$top/.$jname.jinfo + elif [ -f $top/$jname.jinfo ]; then + jinfo=$top/$jname.jinfo + else + echo >&2 "$prog: file does not exist: $top/.$jname.jinfo" + exit 1 + fi +fi + +vecho() +{ + [ -z "$verbose" ] || echo >&2 "$@" +} + +jinfo_files= + +do_auto() +{ + vecho "resetting java alternatives" + awk "/$which/ {print \$2}" $top/*.jinfo | sort -u \ + | \ + while read name; do + update-alternatives $uaopts --auto $name + done +} + +do_list() +{ + vecho "listing java alternatives:" + for i in $top/${jname:-*}.jinfo; do + alias=$(basename ${i%*.jinfo}) + alias=${alias#.*} + prio=$(awk -F= '/priority=/ {print $2}' $i) + echo $alias $prio $top/$alias + [ -n "$verbose" ] && egrep "$which" $i + done +} + +do_set() +{ + do_auto + + awk "/$which/ {print}" $jinfo | sort -u \ + | \ + while read type name location; do + if [ $type = jdk -a -z "$jreonly$pluginonly" -a ! -f $location ]; then + echo >&2 "$prog: jdk alternative does not exist: $location" + continue + fi + if [ $type = plugin -a -z "$jreonly" -a ! -f $location ]; then + echo >&2 "$prog: plugin alternative does not exist: $location" + continue + fi + update-alternatives $uaopts --set $name $location + done +} + +if [ "$action" != list ] && [ "$(id -u)" -ne 0 ]; then + echo >&2 "$prog: no root privileges" + exit 1 +fi + +do_$action diff --git a/scripts/update-java-alternatives.8 b/scripts/update-java-alternatives.8 new file mode 100644 index 0000000..d6c0a99 --- /dev/null +++ b/scripts/update-java-alternatives.8 @@ -0,0 +1,55 @@ +.TH UPDATE-JAVA-ALTERNATIVES "8" "May 2006" +.SH NAME +update-java-alternatives \- update alternatives for jre/sdk installations +.SH SYNOPSIS +.B update-java-alternatives [--jre] [--plugin] [-t|--test|-v|--verbose] + -l|--list [<jname>] + -s|--set <jname> + -a|--auto + -h|-?|--help +.SH DESCRIPTION +update-java-alternatives updates all alternatives belonging to one runtime +or development kit for the Java language. A package does provide these +information of it's alternatives in /usr/lib/jvm/.<jname>.jinfo. +.SH OPTIONS +.TP +\fB\-l|\-\-list [<jname>]\fR +List all installed packages (or just <jname>) providing information to set +a bunch of java alternatives. Verbose output shows each alternative +provided by the packages. +.TP +\fB\-a|\-\-auto\fR +Switch all alternatives of registered jre/sdk installations to automatic mode. +.TP +\fB\-s|\-\-set <jname>\fR +Set all alternatives of the registered jre/sdk installation to the program +path provided by the <jname> installation. +.TP +\fB\-\-jre\fR +Limit the actions to alternatives belong to a runtime environment, +not a development kit. +.TP +\fB\-\-plugins\fR +Limit the actions to alternatives providing browser plugins. +.TP +\fB\-h|\-\-help\fR +Display a help message. +.TP +\fB\-t|\-\-test\fR +Don't actually do anything, just say what would be done. The implementation +status of this option is the same as for update-alternatives (not implemented). +.TP +\fB\-v|\-\-verbose\fR +Verbose output. + +.SH FILES +.TP +.I /usr/lib/jvm/.*.jinfo +A text file describing a jre/sdk installation. Consists of some +variables of the form <var>=<value> and a list of alternatives of the form +jre|jdk <name> <path>. + +.PP +.SH AUTHOR +update-java-alternatives and this manual page was written by Matthias +Klose <doko@ubuntu.com>. |