使用Puppet和Vagrant将Oracle的JDK供应到VirtualBox

我正在尝试安装Oracle的Vagrant / Puppet的jdk

这里是我的Vagrant file的相关部分:

  config.vm.provision :puppet, :module_path => "puppet/modules" do |puppet| puppet.options = "--verbose --debug" puppet.manifests_path = "puppet/manifests" puppet.manifest_file = "java.pp" end 

这里是我的java.pp puppet文件:

 class java { package { "python-software-properties": require => Exec['apt-update'], ensure => installed } exec { 'add-webupd8-key': command => 'sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886', path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ], } exec { 'apt-update': command => 'sudo apt-get update', path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ], } exec { "add-apt-repository-oracle": command => "sudo add-apt-repository -y ppa:webupd8team/java", path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ], require => [Exec["add-webupd8-key"],Package["python-software-properties"]], # notify => Exec["apt-update"] } 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 => "7u40-0~webupd8~0", ensure => installed, require => [Exec['add-apt-repository-oracle'], Exec['apt-update'], Exec['set-licence-selected'], Exec['set-licence-seen']], } } include java 

当我第一次跑的vagrant up ,我总是得到以下错误:

 debug: Puppet::Type::Package::ProviderApt: Executing '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install oracle-java7-installer' err: /Stage[main]/Java/Package[oracle-java7-installer]/ensure: change from purged to present failed: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install oracle-java7-installer' returned 100: Reading package lists... Building dependency tree... Reading state information... E: Unable to locate package oracle-java7-installer 

当我下一次运行一个vagrant provisionjdk确实安装正确

任何人都可以帮助我理解为什么在stream浪汉阶段运行不顺畅? 另外我怎样才能简化我的java.pp文件?

您注释掉Exec["add-apt-repository-oracle"] notify => Exec["apt-update"] Exec["add-apt-repository-oracle"]是非常重要的。

没有它, apt-get update可以存储库实际添加之前自由运行; Package['oracle-java7-installer']确保回购已经到位,并且更新已经运行,但是没有确定这些是以正确的顺序发生的。

我可以推荐使用Puppet Labs的apt模块 ,相反,它会为你处理这个问题吗?

 apt::ppa { 'ppa:webupd8team/java': } package { 'oracle-java7-installer': ensure => installed, require => Apt::Ppa['ppa:webupd8team/java'], }