Source code for fabtools.oracle_jdk

"""
Oracle JDK
===========

This module provides tools for installing `Oracle JDK`_

.. _Oracle JDK: http://www.oracle.com/technetwork/java/javase/

"""
from __future__ import with_statement

import re

from fabric.api import run, cd, settings, hide

from fabtools.files import is_link
from fabtools.system import get_arch


DEFAULT_VERSION = '7u25-b15'


[docs]def install_from_oracle_site(version=DEFAULT_VERSION): """ Download tarball from Oracle site and install JDK. :: import fabtools # Install Oracle JDK fabtools.oracle_jdk.install_from_oracle_site() """ from fabtools.require.files import directory as require_directory release, build = version.split('-') major, update = release.split('u') if len(update) == 1: update = '0' + update jdk_arch = _required_jdk_arch() if major == '6': jdk_filename = 'jdk-%(release)s-linux-%(jdk_arch)s.bin' % locals() else: jdk_filename = 'jdk-%(release)s-linux-%(jdk_arch)s.tar.gz' % locals() jdk_dir = 'jdk1.%(major)s.0_%(update)s' % locals() jdk_url = 'http://download.oracle.com/otn-pub/java/jdk/' +\ '%(version)s/%(jdk_filename)s' % locals() with cd('/tmp'): run('rm -rf %s' % jdk_filename) run('wget --header "Cookie: oraclelicense=accept-securebackup-cookie" ' + '--progress=dot:mega ' + '%(jdk_url)s -O /tmp/%(jdk_filename)s' % locals()) require_directory('/opt', mode='777', use_sudo=True) with cd('/opt'): if major == '6': run('chmod u+x /tmp/%s' % jdk_filename) with cd('/tmp'): run('./%s' % jdk_filename) run('mv %s /opt/' % jdk_dir) else: run('tar -xzvf /tmp/%s' % jdk_filename) if is_link('jdk'): run('rm -rf jdk') run('ln -s %s jdk' % jdk_dir) _create_profile_d_file()
def _create_profile_d_file(): """ Create profile.d file with Java environment variables set. """ from fabtools.require.files import file as require_file require_file('/etc/profile.d/java.sh', contents= 'export JAVA_HOME="/opt/jdk"\n' + 'export PATH="$JAVA_HOME/bin:$PATH"\n', mode='0755', use_sudo=True)
[docs]def version(): """ Get the version of currently installed JDK. Returns ``None`` if it is not installed. """ with settings(hide('running', 'stdout', 'warnings'), warn_only=True): res = run('java -version') if res.failed: return None else: return _extract_jdk_version(res)
def _required_jdk_arch(): """ Returns required JDK architecture for current system in format used in Oracle JDK packages: x64 or i586. Raises exception when current system architecture is unsupported. """ system_arch = get_arch() if system_arch == 'x86_64': return 'x64' elif re.match('i[0-9]86', system_arch): return 'i586' else: raise Exception("Unsupported system architecture '%s' for Oracle JDK" % system_arch) def _extract_jdk_version(java_version_out): """ Extracts JDK version in format like '7u13-b20' from 'java -version' command output. """ match = re.search(r'Runtime Environment \(build (.*?)\)', java_version_out) if match is None: return None version, build = match.group(1).split('-') release = version.split('_')[0].split('.')[1] update = str(int(version.split('_')[1])) return '%(release)su%(update)s-%(build)s' % locals()