web-dev-qa-db-ja.com

Chefを介してadd-apt-repositoryを実行する正しい方法は何ですか?

私は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:something/userの形式のppaリンクしかありません

49
Artem

chef v12.9 以上を使用する場合、aptリポジトリの管理にapt_repositoryリソースを使用します。 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
66
Leo Gamas

ppaメソッドを提供するサードパーティのaptクックブックもあります。

ppa "user/repo"

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

理想的には、この機能をopscode aptクックブックに追加する必要があります。

16
Eric Drechsel

ここに戻ってきたので、別の答えを追加します。キー署名ではなくキーの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

ドキュメント から

7
jorfus

もう1つの注意点は、aptクックブックを追加したら、クックブックに依存関係ステートメントを追加する必要があるということです。 metadata.rbを更新します(クックブックディレクトリのベースにある必要があります)

depends 'apt', '>= 2.7.0'

これにより、ノードのランリストにaptクックブックがないため、ノードが更新できない障害モードが防止されます。

2
jorfus