我是山姆鍋

在 Ubuntu 系統上,使用 Deb 套件安裝 Oracle JDK” 這篇文章中,山姆鍋分享如何手動安裝 Oracle JDK。雖然比每次都要從 Oracle 官網下載方便許多,但如果能夠加以自動化,自然是更加符合敏捷與精實的精神。本文山姆鍋就提供 Puppet 的腳本,讓未來有需要的話可以加快在不同機器上安裝的動作。

準備工作

本文假設您的 Ubuntu 系統為 Ubuntu 12.04 LTS x86_64,且已經安裝 Puppet 以及必要套件。您也可以像山姆鍋一樣,使用 Vagrant+VirtualBox 來進行實驗。

建立 Puppet 模組

建立一個 Puppet 模組,名稱為’oracle_jdk’,最終此模組的結構會成為:

1
2
3
-- oracle_jdk/manifests/init.pp

-- oracle_jdk/files/java.sh

init.pp 檔案內容

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
class oracle_jdk::oracle_jdk($version='present') {
exec { 'apt_update':
command => 'apt-get update',
path => '/usr/bin'
}

package { "python-software-properties":
ensure => present,
require => Exec['apt_update'],
}

exec { "add-apt-repository-oracle":
command => "/usr/bin/add-apt-repository -y ppa:webupd8team/java",
notify => Exec['apt_update2'],
}

exec { 'apt_update2':
command => 'apt-get update',
path => '/usr/bin'
}
exec {
'set-licence-selected':
command => '/bin/echo debconf shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections';

'set-licence-seen':
command => '/bin/echo debconf shared/accepted-oracle-license-v1-1 seen true | /usr/bin/debconf-set-selections';
}

package { 'oracle-java7-installer':
ensure => "${version}",
require => [Exec['add-apt-repository-oracle']],
}

file { '/etc/profile.d/java.sh':
ensure => present,
source => "puppet:///modules/oracle_jdk/java.sh",
owner => "root",
group => "root",
mode => 644,
require => Package['oracle-java7-installer'],
}

}

在 Vargrant 提供的虛擬機中,第一次的’apt_update’如果沒有執行,'python-software-properties’套件就無法正確安裝。'apt_update2’是在安裝 PPA 套件來源後更新列表,讓後續的’oracle-java7-installer’可以安裝成功。其中最讓人不理解的是’set-licence-selected’跟’set-licence-seen’可以消除 Oracle JDK 安裝過程需要人確認的動作,我想這跟 APT/Deb 套件工具的運作有關,目前就當作是黑箱作業。

java.sh 檔案內容

1
export JAVA_HOME=/usr/lib/jvm/java-7-oracle

這個檔案的目的是要設定系統環境變數’JAVA_HOME’,由於有些工具會使用這個變數來找到 Java 安裝的路徑,保險起見加入這個檔案。

引用 oracle_jdk 模組

在您的 Puppet 組態檔案中,例如:’/etc/puppet/manifests/site.pp’,加入下列片段:

1
class { 'oracle_jdk::oracle_jdk': version => '7u40-0~webupd8~0', }

其中,'7u40-0webupd80’可以換成您指定的版本。如果要安裝最新版本,則使用:

1
class { 'oracle_jdk::oracle_jdk':  }

參考來源

  1. Puppet: Installing Oracle Java

小結

在開發、測試或部署的環境,套件都會使用特定的版本以確保整個環境組態盡可能相同。另位請注意:本文提供的腳本還有不少改進的空間,請自行斟酌使用。