49

我正在学习 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

4 回答 4

67

如果您使用chef v12.9及更高版本,请使用 apt_repository 资源来管理 apt 存储库。如果您使用低于 v12.8 的 chef,您可以使用Chef Software, Inc 提供的 APT Cookbook。本说明书提供相同的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
于 2012-03-06T13:38:04.733 回答
16

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

ppa "user/repo"

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

理想情况下,应该将此功能添加到 opscode apt 食谱中。

于 2012-03-21T23:23:38.987 回答
7

添加另一个答案,因为我刚刚发现自己回到这里。如果您只有密钥的 URL 而没有密钥签名,您可以简单地在 key 属性中指定 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

文档

于 2016-07-14T22:32:38.613 回答
2

另一个注意事项是,一旦您添加了 apt 食谱,您应该在您的食谱中添加一个依赖声明。更新 metadata.rb (应该在你的食谱目录的基础上)

depends 'apt', '>= 2.7.0'

这将防止节点无法更新的故障模式,因为它的运行列表中没有 apt 食谱。

于 2015-06-26T00:30:49.073 回答