Question

I'm learning Chef and I'm going to do right now for Ubuntu:

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

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

but may be there is a better ("chef-style"?) way to do it. Also, I concerned that sometimes add-apt-repository waits for "Enter" key on it's execution, so this approach might not work as is. What is the Right way of doing it?

Edit: I only have ppa link in format: ppa:something/user

Était-ce utile?

La solution

If you use chef v12.9 and above, Use the apt_repository resource for managing apt repositories. If you use chef lower than v12.8, you can use APT Cookbook provided by Chef Software, Inc. This cookbook provides same LWRP Following is the example usage of the resource:

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

Autres conseils

There is also a third-party apt cookbook that provides a ppa method:

ppa "user/repo"

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

Ideally this functionality should be added to the opscode apt cookbook.

Adding another answer since I just found myself back here. If you just have the URL for a key and not the key signature you can simply specify the URL in the key attribute:

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

From the documentation

One additional note is that once you have added the apt cookbook you should add a dependency statement to your cookbook. Update metadata.rb (should be in the base of your cookbook dir)

depends 'apt', '>= 2.7.0'

This will prevent the failure mode where a node can't update because it doesn't have the apt cookbook in it's runlist.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top