Skip to content

使用 Puppet 在 Ubuntu 系統上自動安裝 Oracle JDK

Published: 5 分鐘

在 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':  }

參考來源

  1. Puppet: Installing Oracle Java

小結

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

郭信義 (Sam Kuo)

奔騰網路科技技術長,專長分散式系統、Web 應用與雲端服務架構、設計、開發、部署與維運。工作之餘,喜歡關注自由軟體的發展與應用,偶爾寫一下部落格文章。

你可能會有興趣的文章