通过Chef做add-apt-repository的正确方法是什么?

时间:2012-03-06 00:15:05

标签: ubuntu apt-get chef

我正在学习厨师,我现在要为Ubuntu做点什么:

execute "add-apt-repository ppa:#{node[:some_repo]}" do
  user "root"
end

execute "apt-get update" do
  user "root"
end

但可能有更好的("厨师风格"?)方式。此外,我担心有时add-apt-repository会等待" Enter"关键是它的执行,所以这种方法可能无法正常工作。这样做的正确方法是什么?

编辑:我的格式只有ppa链接:ppa:something / user

4 个答案:

答案 0 :(得分:65)

如果您使用chef v12.9及更高版本,请使用apt_repository资源管理apt存储库。如果您使用低于v12.8的厨师,则可以使用APT Cookbook provided by Chef Software, Inc。这本食谱提供了同样的LWRP 以下是资源的示例用法:

apt_repository "nginx-php" do
  uri "http://ppa.launchpad.net/nginx/php5/ubuntu"
  distribution node['lsb']['codename']
  components ["main"]
  keyserver "keyserver.ubuntu.com"
  key "C300EE8C"
end

答案 1 :(得分:16)

还有第三方apt cookbook提供ppa方法:

ppa "user/repo"

https://github.com/sometimesfood/chef-apt-repo

理想情况下,此功能应添加到opscode apt cookbook。

答案 2 :(得分:6)

添加另一个答案,因为我刚回到这里。 如果您只拥有密钥的URL而不是密钥签名,则只需在密钥属性中指定URL:

apt_repository 'some_repo' do
  uri          'http://some_url/ubuntu/precise/amd64/'
  arch         'amd64'
  distribution 'precise'
  components   ['contrib']
  key          'https://some_key_url.com/debian/release.key'
end

来自the documentation

答案 3 :(得分:2)

另外需要注意的是,一旦添加了apt cookbook,就应该在你的食谱中添加一个依赖语句。 更新metadata.rb(应该在您的cookbook目录的基础上)

depends 'apt', '>= 2.7.0'

这将阻止节点无法更新的故障模式,因为它没有在其运行列表中使用apt cookbook。