Puppet 不使用新的 deb 源来安装最新版本的 R

Puppet doesn't use new deb source to install latest version of R

我正在尝试使用 Puppet/Vagrant 为虚拟机配置:

Vagrantfile包含使用Puppet配置框:

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision "puppet" do |puppet|
    puppet.module_path = "modules"
  end
  config.vm.provider "virtualbox" do |vb|
    vb.gui = true
    vb.memory = "1024"
  end
end

我的 default.pp 目前是这样的:

include apt

apt::key { 'cran':
  id      => 'E084DAB9',
  server  => 'keyserver.ubuntu.com',
}

apt::source { 'R':
  comment  => 'This is the apt repository for R - the language for statistical computing',
  location => 'http://cran.rstudio.com/bin/linux/ubuntu/',
  release  => 'trusty/',
  repos    => '',
}

exec { "apt-update":
  command => "/usr/bin/apt-get update"
}

Exec["apt-update"] -> Package <| |>

package { "r-base":
  ensure  => latest,
}

这成功地将 apt 密钥和文件 /etc/apt/sources.list.d/R.list 添加到包含以下内容的 VM:

# This file is managed by Puppet. DO NOT EDIT.
# This is the apt repository for R - the language for statistical computing
deb http://cran.rstudio.com/bin/linux/ubuntu/ trusty/

不幸的是,它安装的R版本是旧的(v3.0.2)。这是当您 sudo apt-get install r-base 不添加存储库时从 Ubuntu 存储库安装的版本。

如果我 ssh 进入框并手动 运行 sudo apt-get install r-base 安装最新版本的 R,尽管它没有解决了我的问题(即从 cran.rstudio.com 全自动安装 R v3.2.0),它确实证明了存储库的工作。

你能看出我做错了什么吗?为了创建一个可重现的示例,我将项目的当前状态放在 github: https://github.com/alexwoolford/vagrantR .

您似乎需要在应用程序包之前设置源。我没有对 ubuntu 做太多事情,但是从模块源代码来看,它似乎并没有自动要求源代码。

Puppet 不会按照清单中指定的顺序应用资源,而是可以按任何顺序应用它们。例外情况是当您指定两个资源之间的关系以对它们进行排序时。

例如,一种方法:

exec { "apt-update":
  command => "/usr/bin/apt-get update",
  require => Apt::Source['R']
}