In questo articolo vedremo come centralizzare e automatizzare delle configurazioni tra macchine Linux tramite Puppet.
Andremo a creare delle configurazioni specifiche su di un server che si riverseranno automaticamente sui client connessi alla rete facendo si che tutti i client abbiano le stesse configurazioni.
Per configurazioni intendiamo la creazione di file o directory con specifici permessi piuttosto che la creazione di utenti piuttosto che l’installazione di software con annesso la gestione dei servizi.
Praticamente ci permette di automatizzare alcune attività sistemistiche cambiando di fatto il modo con sui si opera.
Il suo funzionamento è il seguente:
Sul client viene lanciato il servizio che si connette al server da cui recupera il profilo di configurazione
Sul server sono configurati dei file con estensione .pp dove risiede la configurazione da implemetare.
Vediamo come implementare una struttura di questo tipo:
L’installazione del Puppet Master sul Server viene fatta tramite EPEL tramite i seguenti comandi:
rpm -ivh http://yum.puppetlabs.com/el/5/products/i386/puppetlabs-release-5-6.noarch.rpm
Verrà creato in /etc/yum.repos.d il file .repo necessario per l’installazione
A questo punto procediamo alla sua installazione:
yum install puppet-server
Avviamo il servizio e impostiamo l’autoavvio:
service puppetmaster start
chkconfig puppetmaster on
Vediamo adesso tramite alcuni esempi di diversa tipologia come strutturare il file che utilizzeranno i vari client per la loro configurazione.
Il file deve essere creato nella directory manifest in /etc/puppet/manifest e deve avere estensione .pp che si chiamerà site.pp
Vediamo alcuni esempi di come poter strutturare il file in base a diverse esigenze:
# CREARE UNA DIRECTORY:
file { “/percorso”: ensure => “directory” }
# CREARE PIU DIRECTORY IN UN PERCORSO:
file { [ “/tmp”, “/tmp/dir1”, “/tmp/dir1/dir2”, “/tmp/dir3” ]:
ensure => “directory”,
}
# CREARE DIRECTORY SPECIFICANDO PROPRIETARIO GRUPPO e PERMESSI:
file { “/tmp/dir1”:
ensure => “directory”,
owner => “pippo”,
group => “root”,
mode => 757,
}
# CREARE UN FILE CON PERMESSI:
file { “/tmp/file1”:
ensure => “present”,
owner => “root”,
group => “root”,
mode => 666,
}
# CREARE UN FILE SE NON PRESENTE CON PERMESSI:
file { “/tmp/miofile”:
replace => “no”,
ensure => “present”,
content => “hello world”,
mode => 646,
}
# CREARE UN UTENTE:
user { “pippo”:
ensure => “present”,
managehome => “true”,
}
# INSTALLARE UN PACCHETTO:
package { “httpd”: ensure => “installed”, }
# INSTALLARE PIU PACCHETTI:
package { “httpd”: ensure => “installed”, }
package { “samba”: ensure => “installed”, }
# RIMUOVERE UN PACCHETTO:
package { “httpd”: ensure => “absent” }
# AVVIO DI SERVIZI E AVVIO AL BOOT:
service { “sshd”:
enable => “true”,
ensure => “running”,
}
Ipotizziamo di avere diverse macchine client linux dove su ciascuna devono essere fatte delle configurazioni comuni a tutte come ad esempio:
- Installare Apache e samba
- Assicurarsi che i servizi siano in eseguzione e attivi al boot
- Creare un utente di nome mario
- Creare una Directory in /var di nome documenti con permessi 757
- Creare un gruppo studenti con GID 563
Il file sarà creato in /etc/puppet/manifest e si chiamerà site.pp e sarà cosi strutturato:
package {“httpd”: ensure => “installed”}
package {“samba”: ensure => “installed”}
service {“httpd”:
ensure => “running”,
enable => “true”,
}
service {“smb”:
ensure => “running”,
enable => “true”,
}
user { “mario”:
ensure => “present”,
managehome => “true”,
}
file {“/var/documenti”:
ensure => “directory”,
mode => 757,
}
group {“studenti”:
gid => 563,
}
Non resta che riavviare il servizio PuppetMaster:
service puppetmaster restart
Detto questo procediamo alla preparazione di uno dei Client iniziando con l’installazione di Puppet sempre tramite EPEL:
rpm -ivh http://yum.puppetlabs.com/el/5/products/i386/puppetlabs-release-5-6.noarch.rpm
E successivamente installiamo Puppet:
yum install puppet
Sul file /etc/hosts diamo la mappatura IP – Hostname inserendo l’indirizzo ip della macchina dove è installato il Puppet Master con accanto il suo hostname che nel nostro caso è 192.168.0.100 e il suo hostname è pc2.talla.it.
Andiamo a ultimare la procedura configurando l’intervallo di tempo ( espresso in secondi ) entro il quale il client interrogerà il server per attuare/verificare la configurazione preimpostata dichiarando tramite hostname il nome del server a cui il client deve far riferimento.
Inseriamo il nome del server ossia pc2.talla.it nel file /etc/sysconfig/puppet
nano /etc/sysconfig/puppet
Infine il tempo espresso in secondi nel file /etc/puppet/puppet.conf
nano /etc/puppet/puppet.conf
Non resta che riavviare il servizio Puppet:
service puppet restart
Dopo poco vediamo infatti che la configurazione inizia ad attuarsi:
Al termine vediamo che la configurazione sul file site.pp viene completata sul client: