-
-
Save renoirb/6722890 to your computer and use it in GitHub Desktop.
# | |
# How to install automatically Oracle Java 7 under Salt Stack | |
# | |
# Thanks Oracle for complicating things :( | |
# | |
# 1. Create a java/ folder in your salt master | |
# 2. Paste this file in init.sls | |
# 3. salt '*' state.sls java | |
# | |
# Source: | |
# * https://github.com/log0ymxm/salt-jvm/blob/master/init.sls | |
# * http://architects.dzone.com/articles/puppet-installing-oracle-java | |
# | |
oracle-ppa: | |
pkgrepo.managed: | |
- humanname: WebUpd8 Oracle Java PPA repository | |
- ppa: webupd8team/java | |
oracle-license-select: | |
cmd.run: | |
- unless: which java | |
- name: '/bin/echo /usr/bin/debconf shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections' | |
- require_in: | |
- pkg: oracle-java7-installer | |
- cmd: oracle-license-seen-lie | |
oracle-license-seen-lie: | |
cmd.run: | |
- name: '/bin/echo /usr/bin/debconf shared/accepted-oracle-license-v1-1 seen true | /usr/bin/debconf-set-selections' | |
- require_in: | |
- pkg: oracle-java7-installer | |
oracle-java7-installer: | |
pkg: | |
- installed | |
- require: | |
- pkgrepo: oracle-ppa |
I'll second geekpete's addition, with the addition of a require_in. By using the salt debconf.set the current state is checked, and so it doesnt trigger an update on each highstate run.
oracle-java-license-autoaccept:
debconf.set:
- name: oracle-java7-installer
- data:
'shared/accepted-oracle-license-v1-1': {'type': 'boolean', 'value': True}
- require_in:
- pkg: oracle-java7-installer
Here's a concise option incorporating the suggestions (for Ubuntu):
oracle-java7-installer:
pkgrepo.managed:
- ppa: webupd8team/java
pkg.installed:
- require:
- pkgrepo: oracle-java7-installer
debconf.set:
- data:
'shared/accepted-oracle-license-v1-1': {'type': 'boolean', 'value': True}
- require_in:
- pkg: oracle-java7-installer
Here my adopted working version for Debian Wheezy (and Ubuntu):
{% set java_version = salt['pillar.get']('java_version', '8') %}
oracle-java{{ java_version }}-installer:
{% if grains['os'] == 'Ubuntu' %}
pkgrepo.managed:
- ppa: webupd8team/java
{% elif grains['os'] == 'Debian' %}
pkgrepo.managed:
- humanname: WebUp8Team Java Repository
- name: "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main"
- dist: precise
- file: /etc/apt/sources.list.d/webup8team.list
- keyid: EEA14886
- keyserver: keyserver.ubuntu.com
{% endif %}
pkg.installed:
- require:
- pkgrepo: oracle-java{{ java_version }}-installer
debconf.set:
- data:
'shared/accepted-oracle-license-v1-1': {'type': 'boolean', 'value': True}
- require_in:
- pkg: oracle-java{{ java_version }}-installer
If you run into issues with the PPA not being picked up after upgrading to 2014.7.0, see here.
java-ppa:
{% if grains['os'] == 'Ubuntu' %}
pkgrepo.managed:
- ppa: webupd8team/java
{% elif grains['os'] == 'Debian' %}
pkgrepo.managed:
- humanname: webup8team
- name: deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main
- dist: precise
- file: /etc/apt/sources.list.d/webup8team.list
- keyid: EEA14886
- keyserver: keyserver.ubuntu.com
{% endif %}
@geekpete Is there any reason why you aren't simply skipping the Ubuntu case above? The Debian case should cover them both, right?
FYI, the Debian case seem to work also on Ubuntu.
You might also need to install debconf-utils to get the debconf state. Also I prefer to require that all data comes from pillar, no defaults:
debconf-utils:
pkg.installed
oracle-java{{ pillar['java_version'] }}-installer:
pkgrepo.managed:
- humanname: WebUp8Team Java Repository
- name: "deb http://ppa.launchpad.net/webupd8team/java/ubuntu precise main"
- dist: precise
- file: /etc/apt/sources.list.d/webup8team.list
- keyid: EEA14886
- keyserver: keyserver.ubuntu.com
pkg.installed:
- require:
- pkgrepo: oracle-java{{ pillar['java_version'] }}-installer
debconf.set:
- data:
'shared/accepted-oracle-license-v1-1': {'type': 'boolean', 'value': True}
- require_in:
- pkg: oracle-java{{ pillar['java_version'] }}-installer
Tested on Debian Wheezy
I seem to be getting an error here:
ID: oracle-ppa
Function: pkgrepo.managed
Result: False
Comment: Failed to examine repo 'oracle-ppa': Error: 'python-apt' package not installed
Do I need to install python-apt before?
On http://www.webupd8.org/2014/03/how-to-install-oracle-java-8-in-debian.html ist says:
Update October 20, 2016:
...
So, if you want to set Oracle Java 8 as default, no matter what other Java versions are installed, make sure that you install the oracle-java8-set-default package
@JJ You should have python-software-properties
installed (it includes python-apt
). From Salt docs:
On Ubuntu systems, the python-software-properties package should be installed for better support of PPA repositories.
INFO ] Completed state [git] at time 23:40:59.970228 duration_in_ms=322.06
local:
----------
ID: git-deps
Function: pkg.installed
Name: git
Result: False
Comment: Failed to get virtual package information (E:Type 'oracle-ppa' is not known on line 16 in source list /etc/apt/sources.list)
Started: 23:40:59.648168
Duration: 322.06 ms
Changes:
Summary for local
------------
Succeeded: 0
Failed: 1
------------
Total states run: 1
Total run time: 322.060 ms
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!
salt-call state.highstate --retcode-passthrough --log-level=info --force-color
Stdout from the command:
local:
----------
ID: git-deps
Function: pkg.installed
Name: git
Result: False
Comment: Failed to get virtual package information (E:Type 'oracle-ppa' is not known on line 16 in source list /etc/apt/sources.list)
Started: 23:40:59.648168
Duration: 322.06 ms
Changes:
Summary for local
In my case keyserver has been unavailable so I've used - keyserver: hkp://keyserver.ubuntu.com:80 which seems to got a problem fixed.
You might want to consider using prereq
, so the debconf selects only run when pkg.installed
is triggered, e.g.
https://github.com/felixhummel/saltstates/blob/master/java/oracle.sls
Thanks for sharing!
A possible solution to the ubuntu/debian ppa might be: