问题描述
我正在学习厨师,我现在要为Ubuntu做:
execute "add-apt-repository ppa:#{node[:some_repo]}" do
user "root"
end
execute "apt-get update" do
user "root"
end
但可能有更好的(“chef-style”?)方式来做到这一点。此外,我担心有时add-apt-repository会在执行时等待”Enter”键,因此这种方法可能无法正常工作。这样做的正确方法是什么?
编辑:我只有格式的ppa链接:ppa:something /user
最佳解决方案
如果使用chef v12.9及更高版本,请使用apt_repository资源来管理apt存储库。如果您使用厨师低于v12.8,您可以使用APT Cookbook provided by Chef Software, Inc。此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
次佳解决方案
还有一个third-party apt cookbook,提供ppa
方法:
ppa "user/repo"
https://github.com/sometimesfood/chef-apt-repo
理想情况下,此功能应添加到opscode apt cookbook中。
第三种解决方案
添加另一个答案,因为我刚回到这里。如果您只拥有密钥的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
第四种方案
另外一个注意事项是,一旦添加了apt cookbook,就应该在您的cookbook中添加一个依赖语句。更新metadata.rb(应该在你的cookbook目录的基础上)
depends 'apt', '>= 2.7.0'
这将防止节点无法更新的故障模式,因为它的运行列表中没有apt cookbook。