2012-03-06 5 views
47

Sto imparando Chef e ho intenzione di fare in questo momento per Ubuntu:Qual è il modo giusto per fare add-apt-repository tramite Chef?

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

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

ma può essere c'è un migliore ("chef-style"?) Modo per farlo. Inoltre, temevo che a volte add-apt-repository aspetti il ​​tasto "Invio" sulla sua esecuzione, quindi questo approccio potrebbe non funzionare così com'è. Qual è il modo giusto per farlo?

Edit: ho solo collegamento ppa in formato: ppa: qualcosa/utente

risposta

62

Se si utilizza chef v12.9 e, soprattutto, utilizzare la risorsa apt_repository per la gestione dei repository apt. Se utilizzi uno chef inferiore a v12.8, puoi utilizzare APT Cookbook provided by Chef Software, Inc. Questo libro di cucina fornisce stessa LWRP Di seguito viene descritto il loro esempio di risorsa:

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 
+2

Come scoprire che cosa è server delle chiavi e la chiave se io ha solo nome/nome utente PPA? – Artem

+0

Non so come si possa ottenere la chiave, ma il keyserver di cui sono quasi certo è lo stesso di sopra: "keyserver.ubuntu.com" –

+0

Il PPA avrà informazioni sul keyserver e sulla chiave da utilizzare. – jtimberman

16

C'è anche un libro di cucina apt di terze parti che fornisce un metodo ppa:

ppa "user/repo" 

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

Idealmente questa funzionalità dovrebbe essere aggiunta al ricettario apt di opscode.

+0

Quali funzionalità ha il metodo ppa rispetto al LWRP apt_repository menzionato nella risposta di Leo Gamas sopra? – DonBecker

+0

Anche noi costruimmo la nostra casa. E recentemente spostato tutto per utilizzare il libro di cucina della comunità. Ci sono troppi casi limite attorno all'attitudine e alla scoperta di repository in modo efficiente per la cura.:) In questo caso, devi solo fornire l'URL del launchpad completo al repository e non solo "user/repo' e funzionerà con' apt_repository'. – Till

2

Una nota aggiuntiva è che una volta aggiunto il ricettario di apt, è necessario aggiungere un'istruzione di dipendenza al ricettario. Aggiornamento metadata.rb (dovrebbe essere alla base del vostro dir libro di cucina)

depends 'apt', '>= 2.7.0' 

Questo consentirà di evitare la modalità di guasto in cui un nodo non può aggiornare, perché non ha il libro di cucina apt nel suo elenco di esecuzione.

5

Aggiungere un'altra risposta da quando mi sono appena ritrovato qui. Se v'è solo l'URL di una chiave e non la tonalità è sufficiente specificare l'URL nella attributo chiave:

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 

Da the documentation