2013-02-26 12 views
17

Se package "nginx" in Chef si traduce in apt-get install nginx su un nodo di Ubuntu, ciò che può essere scritto in una ricetta Chef che si tradurrebbe in:apt-get update e apt-get upgrade in Chef

apt-get -y update 
apt-get -y upgrade 

Could not capire dal apt cookbook.

+0

Questo https://github.com/patdeegan/chef-unattended-upgrades può aiutare? – favoretti

+0

Penso di sì, ma mi interessa se c'è qualche soluzione più leggera. –

risposta

43

The Opscode "apt" cookbook la ricetta predefinita verrà eseguita apt-get update per garantire che la cache del pacchetto venga aggiornata. Ti consigliamo di inserirlo in anticipo nell'elenco di esecuzione del tuo nodo, in modo che in seguito i pacchetti possano essere installati con le versioni corrette.

Generalmente non consigliamo agli utenti di utilizzare "apt-get upgrade" in una ricetta, per un paio di motivi.

  1. apt-get può aggiornare un pacchetto che ha la configurazione in conflitto o altri problemi che non possono essere risolti senza eseguire nuovamente il comando, o l'esecuzione di altri comandi apt/dpkg manualmente.
  2. Gli aggiornamenti automatici di tutti i pacchetti sul sistema possono avere effetti collaterali indesiderati sul sistema in esecuzione (i casi limite sono molti e probabilmente spinosi, quindi non posso coprirli tutti).

Invece, utilizzare l'azione di "aggiornamento" per i pacchetti che devono sempre essere aggiornati alla versione più recente.

package "nginx" do 
    action :upgrade 
end 

Se stai riutilizzando un libro di cucina che definisce il libro di cucina, è possibile scrivere una ricetta che modifica l'azione della risorsa esistente, in questo modo:

resources("package[nginx]").action(:upgrade) 

Il metodo #resources in una ricetta cercare nella Raccolta risorse la risorsa specificata (pacchetto nginx). Quindi l'invio del metodo #action con l'argomento :upgrade indicherà a Chef che l'azione deve essere eseguita per l'aggiornamento.

ModificaAggiornamento: Fare attenzione quando si sceglie pacchetti che sarebbe stato aggiornato automaticamente in questo modo. Una modifica a monte in un pacchetto può causare effetti dannosi sul sistema. Questo è particolarmente vero se un tale pacchetto fa un riavvio dei servizi che gestisce durante gli script di post-installazione. Conoscere la propria infrastruttura e, in caso di dubbio, eseguire il proprio repository di pacchetti con i pacchetti critici necessari per lo stack di applicazioni.

+6

lo dicono tutti, ma non riesco ad aggiornare l'elenco degli archivi quando includo il ricettario di apt e chiamo la sua ricetta predefinita. Peggio ancora, se un'altra ricetta incorporata in una delle mie dipende da apt, allora non sembra esserci alcun modo per evitare l'aggiornamento manuale accedendo al nodo. Vorrei che ci fosse una spiegazione definitiva da qualche parte su come ottenere il repository apt-get da aggiornare nelle situazioni in cui si è costretti a usare il ricettario apt. – wkhatch

+0

Sembra che apt verrà aggiornato solo ogni 24 ore. Questo file temporaneo controlla il processo./Var/lib/apt/periodici/update-success-stamp – jorfus

0

La ricetta dello chef Apt non si aggiorna con tutti gli chef. L'attributo che controlla questo è chiamato periodic_update_min_delay ed è impostato su 86400 (l'attributo deve essere chiamato sec_delay). Se il seguente file esiste ed è più vecchio di 24 ore, apt aggiornerà la cache.

/var/lib/apt/periodic/update-success-stamp 

Sembra anche che la ricetta apt (default.rb) comprende una direttiva per forzare un aggiornamento che la vostra ricetta potrebbe chiamare.

# For other recipes to call to force an update 
execute 'apt-get update' do 

se si sta facendo che, però, si vorrà un not_if per evitare di correre troppo spesso a questo punto si potrebbe anche chiamare manualmente da soli. Mi sono stancato di fare scherzi con questo e ho finito per chiamare apt-get update in una stanza prima della mia installazione.

Sospetto che la soluzione a lungo termine per gli aggiornamenti di sicurezza sia quella di impostare il ritardo di aggiornamento su alcune ore.