”在 Ubuntu 系統上,使用 Deb 套件安裝 Oracle JDK”這篇文章中,山姆鍋分享如何手動安裝 Oracle JDK。雖然比每次都要從 Oracle 官網下載方便許多,但如果能夠加以自動化,自然是更加符合敏捷與精實的精神。本文山姆鍋就提供 Puppet 的腳本,讓未來有需要的話可以加快在不同機器上安裝的動作。
準備工作
本文假設您的 Ubuntu 系統為 Ubuntu 12.04 LTS x86_64,且已經安裝 Puppet 以及必要套件。您也可以像山姆鍋一樣,使用 Vagrant+VirtualBox 來進行實驗。
建立 Puppet 模組
建立一個 Puppet 模組,名稱為’oracle_jdk’,最終此模組的結構會成為:
-- oracle_jdk/manifests/init.pp
-- oracle_jdk/files/java.sh
init.pp 檔案內容
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 檔案內容
export JAVA_HOME=/usr/lib/jvm/java-7-oracle
這個檔案的目的是要設定系統環境變數’JAVA_HOME’,由於有些工具會使用這個變數來找到 Java 安裝的路徑,保險起見加入這個檔案。
引用 oracle_jdk 模組
在您的 Puppet 組態檔案中,例如:‘/etc/puppet/manifests/site.pp’,加入下列片段:
class { 'oracle_jdk::oracle_jdk': version => '7u40-0~webupd8~0', }
其中,‘7u40-0webupd80’可以換成您指定的版本。如果要安裝最新版本,則使用:
class { 'oracle_jdk::oracle_jdk': }
參考來源
小結
在開發、測試或部署的環境,套件都會使用特定的版本以確保整個環境組態盡可能相同。另位請注意:本文提供的腳本還有不少改進的空間,請自行斟酌使用。