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

Art*_*tem 49 ubuntu apt-get chef-infra

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

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

execute "apt-get update" do
  user "root"
end
Run Code Online (Sandbox Code Playgroud)

但可能有更好的("厨师式"?)方式来做到这一点.此外,我担心有时add-apt-repository会在执行时等待"Enter"键,因此这种方法可能无法正常工作.这样做的正确方法是什么?

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

小智 66

如果您使用chef v12.9及更高版本,请使用apt_repository资源来管理apt存储库.如果您使用低于v12.8的厨师,您可以使用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
Run Code Online (Sandbox Code Playgroud)

  • 那个代码放在哪里?我可以把它放在我自己的食谱中吗,例如,它会做一些其他的东西吗? (4认同)
  • 如果我只有PPA名称/用户名,如何找出什么是关键服务器和密钥? (2认同)

Eri*_*sel 16

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

ppa "user/repo"
Run Code Online (Sandbox Code Playgroud)

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

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


jor*_*fus 7

添加另一个答案,因为我刚回到这里.如果您只拥有密钥的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
Run Code Online (Sandbox Code Playgroud)

文档中