In this post I’ll briefly show an use case of Alternatives command available in Fedora, Ubuntu, Debian, and other GNU/Linux flavours.
alternatives – maintain symbolic links determining default commands
An alternative takes the following form:
[Symbolic link] [Alt. ID] [Real Binary]
/usr/bin/java java /usr/java/jdk1.7.0_55/jre/bin/java
In this example we see that a symbolic link /usr/bin/java will be created. It will point to /var/lib/alternatives/java, and this last will point to the real binary.
So it goes this way:
[Symbolic link] –> /var/lib/alternatives/[Alt. ID] –> [Real Binary]
When you change an Alternative, you change the last pointer: /etc/alternatives/[Alt. ID]–>[Real Binary]
Let’s list the alternatives and their current values. In this example we are interested in java, javaws and libjavaplugin.so.x86_64, three Alternative Identifiers
that I’ve created manually.
[root@i5-moll ~]$ update-alternatives --list
xinputrc auto /etc/X11/xinit/xinput.d/ibus.conf
cifs-idmap-plugin auto /usr/lib64/cifs-utils/idmapwb.so
ld auto /usr/bin/ld.bfd
mkisofs auto /usr/bin/genisoimage
javaws manual /usr/java/jre1.8.0_05/bin/javaws
libjavaplugin.so.x86_64 manual /usr/java/jre1.8.0_05/lib/amd64/libnpjp2.so
unrar auto /usr/bin/unrar-nonfree
jre_openjdk manual /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.60-2.4.5.0.fc19.x86_64/jre
jre_1.7.0_openjdk auto /usr/lib/jvm/jre-1.7.0-openjdk-1.7.0.60-2.4.5.0.fc19.x86_64
google-chrome auto /usr/bin/google-chrome-stable
mta manual /usr/sbin/sendmail.sendmail
java manual /usr/lib/jvm/jre-1.7.0-openjdk/bin/java
Let’s remove the Java configuration. We can do it by command or by hand. We show here by-hand, read the “–remove” flag otherwise.
[root@i5-moll ~]# rm /var/lib/alternatives/java
Now list the configuration of java, it’ll be empty:
[lipi@i5-moll ~]$ update-alternatives --config java
[lipi@i5-moll ~]$
Now create a new Alternative. In my case I have 3 JRE installed on my system, JRE 1.8, JDK 1.7, and OpenJDK 1.7:
[root@i5-moll ~]# alternatives --install /usr/bin/java java /usr/java/jdk1.7.0_40/bin/java 200000
[root@i5-moll ~]# alternatives --install /usr/bin/java java /usr/java/jre1.8.0_05/bin/java 200000
[root@i5-moll ~]# alternatives --install /usr/bin/java java /usr/lib/jvm/jre-1.7.0-openjdk/bin/java 200000
Now select your preferred version and test that the switch takes effect:
[root@i5-moll ~]# update-alternatives --config java
Hi ha 3 programes que proveeixen 'java'.
Selecció Ordre
-----------------------------------------------
* 1 /usr/java/jdk1.7.0_40/bin/java
+ 2 /usr/java/jre1.8.0_05/bin/java
3 /usr/lib/jvm/jre-1.7.0-openjdk/bin/java
Premeu la tecla de retorn per mantenir la selecció actual[+], o teclegeu el número de la selecció: 2
[root@i5-moll ~]# java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
Do the same for the Java Browser Plugin. Create a new alternative or update the existing one. I created one called libjavaplugin.so.x86_64.
The path for my browser plugins directory is /usr/lib64/mozilla/plugins/ (Firefox 28.0).
[root@i5-moll ~]# alternatives --install /usr/lib64/mozilla/plugins/libjavaplugin.so libjavaplugin.so.x86_64 /usr/lib64/IcedTeaPlugin.so 200000
[root@i5-moll ~]# alternatives --install /usr/lib64/mozilla/plugins/libjavaplugin.so libjavaplugin.so.x86_64 /usr/java/jre1.8.0_05/lib/amd64/libnpjp2.so 200000
[root@i5-moll ~]# alternatives --install /usr/lib64/mozilla/plugins/libjavaplugin.so libjavaplugin.so.x86_64 /usr/java/jre1.8.0_05/lib/amd64/libnpjp2.so 200000
Use the following to choose the alternative:
[root@i5-moll ~]# update-alternatives --config libjavaplugin.so.x86_64
Check that it worked opening your browser and surfing to “about:plugins”.
And finally, do the same for Java Web Starter.
[root@i5-moll ~]# alternatives --install /usr/bin/javaws javaws /usr/java/jdk1.7.0_40/bin/javaws 200000
[root@i5-moll ~]# alternatives --install /usr/bin/javaws javaws /usr/java/jre1.8.0_05/bin/javaws 200000
[root@i5-moll ~]# alternatives --install /usr/bin/javaws javaws /usr/bin/javaws.itweb 200000
Use the following to choose the alternative:
[root@i5-moll ~]# update-alternatives --config javaws
Check that it worked executing javaws.