Puppet Ubuntu · 6 min read · Feb 07, 2026
Automazione della Configurazione e Gestione Centralizzata con Puppet su Ubuntu
Automazione della Configurazione e Gestione Centralizzata con Puppet su Ubuntu
Autore: Kent Brede
Basato su http://reductivelabs.com/trac/puppet/wiki/InstallationGuide
Introduzione
Questo è un tutorial passo passo su come installare il componente server di Puppet (puppetmaster) su una macchina e il client Puppet (puppetd) su un’altra. Eseguiamo quindi un semplice test per assicurarci che Puppet funzioni correttamente.
Se non sei familiare con Puppet, è uno strumento di automazione della configurazione che ti consente di centralizzare la gestione delle varie versioni *nix in esecuzione sulla tua rete. Puppet supporta la gestione centrale degli aspetti importanti dei tuoi sistemi, come: file, pacchetti, utenti, servizi, cron, mount, ecc. Per una descrizione più completa visita Reductive Labs.
Contesto
Questa installazione viene eseguita su Ubuntu 6.06 LTS Server, ma dovrebbe funzionare per la maggior parte delle versioni Debian/Ubuntu con lievi modifiche.
Al momento della scrittura, i pacchetti Puppet attuali per Ubuntu possono essere trovati in Feisty. Cerca i pacchetti Debian attuali in Unstable.
Durante questo tutorial utilizzeremo example.com come nome di dominio. Al server verrà assegnato il nome host “puppet” e l’IP 192.168.10.1. Il nome host del client è “pclient” con IP 192.168.10.2.
1. Requisiti di Rete
Se il DNS non è configurato sulla tua rete, verifica che i file hosts su entrambi i server e client includano voci per entrambe le macchine. Per questo scenario le seguenti voci verrebbero aggiunte a /etc/hosts. Usa il tuo editor di testo preferito per aggiungere righe che riflettano le tue impostazioni di rete simili alle righe sottostanti.
192.168.10.1 puppet.example.com puppet
192.168.10.2 pclient.example.com pclient
Il server gira sulla porta 8140. Assicurati che non ci sia un firewall che blocca la porta 8140 tra le due macchine.
2. Configurazione di Apt
Molti dei pacchetti di cui abbiamo bisogno si trovano nel repository universe. Se le seguenti righe non sono decommentate in “sources.list,” usando il tuo editor di testo preferito, trovane e decommentale sul server.
puppet:# vim /etc/apt/sources.list
# deb http://us.archive.ubuntu.com/ubuntu/ dapper universe
# deb http://security.ubuntu.com/ubuntu dapper-security universe
Poiché stiamo usando una versione precedente di Ubuntu, configuriamo apt per prelevare facilmente i pacchetti Puppet da Feisty. Regola le sorgenti come necessario per riflettere la tua versione del sistema operativo. Se non sei familiare con i passaggi in questa sezione, consulta la sezione 3.10 in Apt-Howto.
Apri “sources.list” e aggiungi le due righe che seguono.
puppet:# vim /etc/apt/sources.list
deb http://us.archive.ubuntu.com/ubuntu/ feisty universe
deb http://security.ubuntu.com/ubuntu feisty-security universe
Aggiorna la tua lista delle sorgenti.
puppet:# apt-get update
Esegui gli stessi passaggi sopra su “pclient.”
Successivamente, configuriamo apt per prelevare i pacchetti di cui abbiamo bisogno per la nostra configurazione di Puppet da Feisty, ma consentire a tutti gli altri pacchetti di provenire dal repository Dapper. Aggiungi le seguenti righe al file “preferences.”
Sul server:
puppet:# vim /etc/apt/preferences
Package: *
Pin: release a=dapper
Pin-Priority: 700
Package: facter
Pin: release a=feisty
Pin-Priority: 500
Package: puppet
Pin: release a=feisty
Pin-Priority: 500
Package: puppetmaster
Pin: release a=feisty
Pin-Priority: 500
Sul client:
pclient:# vim /etc/apt/preferences
Package: *
Pin: release a=dapper
Pin-Priority: 700
Package: facter
Pin: release a=feisty
Pin-Priority: 500
Package: puppet
Pin: release a=feisty
Pin-Priority: 500
3. Requisiti Software
In preparazione per la nostra installazione di Puppet abbiamo bisogno di alcune librerie e pacchetti installati sia sul server che sul client. Al momento della scrittura, se questo set non è installato per primo, si verificherà un ciclo di dipendenza.
puppet:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8
pclient:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8
4. Installazione del Client
Installa Puppet e Facter da Feisty.
pclient:# apt-get -t feisty install facter puppet
5. Installazione del Server
Installa Puppet, Facter e Puppetmaster. Lo script post installazione cercherà di avviare il server e darà errore come presentato. Non preoccuparti. Creeremo il manifesto durante il passo 6.
puppet:# apt-get -t feisty install facter puppet puppetmaster
…..
Avvio dello strumento di gestione della configurazione puppet master server
Manifest /etc/puppet/manifests/site.pp deve esistere [fail]
6. Preparazione del Server
Il server (puppetmasterd) richiede un manifesto per essere in grado di funzionare. Scriviamo un manifesto che dice a puppet di creare un file “/tmp/testfile” sul client.
puppet:# vim /etc/puppet/manifests/site.pp
# Crea "/tmp/testfile" se non esiste.
class test_class {
file { "/tmp/testfile":
ensure => present,
mode => 644,
owner => root,
group => root
}
}
# indica a puppet su quale client eseguire la classe
node pclient {
include test_class
}
Ora avvia il server puppet.
puppet:# /etc/init.d/puppetmaster start
6. Preparazione del Client
I client per impostazione predefinita si connetteranno a un server sulla tua rete con un nome host di “puppet.” Se il nome host del tuo server non è “puppet” è necessario inserire una direttiva nel file di configurazione puppetd “puppetd.conf.” Anche se non ne abbiamo bisogno in questo caso, lo faremo per scopi dimostrativi.
Apri “/etc/puppet/puppetd.conf” con il tuo editor di testo preferito e aggiungi “server = puppet.example.com” al file esistente come indica l’esempio qui sotto.
pclient:# vim /etc/puppet/puppetd.conf
[puppetd]
server = puppet.example.com
# Assicurati che tutti i messaggi di log siano inviati alla directory giusta
# Questa directory deve essere scrivibile dall'utente puppet
logdir=/var/log/puppet
vardir=/var/lib/puppet
rundir=/var/run
7. Firma delle Chiavi
Affinché i due sistemi comunichino in modo sicuro, dobbiamo creare certificati SSL firmati. Dovresti essere connesso a entrambe le macchine server e client per questo passaggio successivo.
Dal lato client esegui.
pclient:# puppetd –server puppet.example.com –waitforcert 60 –test
Dovresti vedere il seguente messaggio.
err: Nessun certificato; funzionando con funzionalità ridotte.
info: Creazione di una nuova richiesta di certificato per pclient.example.con
info: Richiesta di certificato
warnings: il certificato peer non verrà verificato in questa sessione SSL
notice: Non ho ricevuto certificato
Successivamente, dal lato server, esegui il seguente comando per verificare che il client stia aspettando che il certificato venga firmato.
puppet:# puppetca –list
pclient.example.con
Quindi firma il certificato.
puppet:# puppetca –sign pclient.example.com
Firmato pclient.example.com
Se tutto è andato bene dovresti vedere questo messaggio su pclient.
info: Richiesta di certificato
warnings: il certificato peer non verrà verificato in questa sessione SSL
notice: Ignorando –listen su esecuzione una tantum
info: Memorizzazione della configurazione in /etc/puppet/localconfig.yaml
notice: Avvio dell’esecuzione della configurazione
notice: //pclient/test_class/File[/tmp/testfile]/ensure: creato
info: Creazione del file di stato /var/lib/puppet/state/state.yaml
notice: Esecuzione della configurazione completata in 0.11 secondi
8. Test
Controlla e assicurati che il file sia stato creato.
pclient:# ls -l /tmp/testfile
-rw-r–r– 1 root root 0 2007-02-18 18:28 /tmp/testfile
Per un test, modifichiamo il manifesto e indirizziamo Puppet a modificare la modalità del file. Cambia la riga, “mode => 644,” in “mode => 600,”
puppet:# vim /etc/puppet/manifests/site.pp
# Crea "/tmp/testfile" se non esiste.
class test_class {
file { "/tmp/testfile":
ensure => present,
mode => 600,
owner => root,
group => root
}
}
# indica a puppet su quale client eseguire la classe
node pclient {
include test_class
}
Sul client esegui puppetd in modalità verbosa (-v) e solo una volta (-o).
pclient:# puppetd -v -o
Dovresti vedere il seguente messaggio, che afferma che /tmp/testfile è cambiato da modalità 644 a 600.
notice: Ignorando –listen su esecuzione una tantum
info: La configurazione è aggiornata
notice: Avvio dell’esecuzione della configurazione
notice: //pclient/test_class/File[/tmp/testfile]/mode: modalità cambiata ‘644’ a ‘600’
notice: Esecuzione della configurazione completata in 0.26 secondi
Per verificare che il lavoro sia stato completato correttamente.
pclient:# ls -l /tmp/testfile
-rw——- 1 root root 0 2007-02-18 18:28 /tmp/testfile
9. Conclusione
Congratulazioni, il test è completo e hai una configurazione Puppet funzionante. Il tuo prossimo passo è creare un manifesto funzionale, testare ulteriormente e poi avviare il demone puppetd sul lato client. Puppetd per impostazione predefinita interrogherà automaticamente il server ogni 30 minuti.
pclient:# /etc/init.d/puppet start
Per ulteriori informazioni visita Reductive Labs.
Per un aiuto amichevole e competente, unisciti a Puppet Users o passa da #puppet su irc.freenode.net.
Ricevi i nuovi post nella tua casella di posta.
Nessuno spam. Disiscriviti in qualsiasi momento.