Puppet: automatizziamo e gestiamo ogni task

Puppet Labs

Puppet Labs

Introduzione a Puppet

Puppet è un software open source, scritto in linguaggio Ruby, che permette la gestione automatizzata e centralizzata di un’infrastruttura di sistemi Linux e Unix, essendo disponibile per tutte le principali distribuzioni Linux, ma anche per le diverse varianti di BSD oltre che Solaris e AIX.

Con Puppet è possibile gestire praticamente ogni risorsa di un sistema: programmi da insallare, servizi da avviare, file di configurazione con contenuti diversi a seconda di diverse logiche, utenti, cron jobs, mount point, esecuzione di comandi specifici ecc.
Praticamente permette di automatizzare ogni attività sistemistica cambiando di fatto il modo con sui si opera su sun server.

La logica di Puppet è di definire lo stato di un sistema e fare in modo che questo sia tale ogni volta che il client Puppet viene eseguito.
La prima volta che lo si esegue, vengono installati pacchetti, avviati servizi, modificati file di configurazione secondo quanto definito sul PuppetMaster, le volte successive, se non sono intervenute modifiche manuali sul sistema, o cambiamenti delle configurazioni sul master, non dovrebbe cambiare nulla, altrimenti verranno upgradati eventuali file di configurazione o servizi, cosi come indicato sul PuppetMaster.
Questo è un concetto importante per il sistemista, e’ un vero e proprio cambio di paradigma sul suo modo di operare, poiche’ in un sistema gestito con Puppet non si devono modificare a mano i file che Puppet gestisce, perchè questi vengono aggiornati al successivo collegamento/verifica con il Master e, visto che nelle condizioni ideali, Puppet gestisce tutte le risorse di un sistema (non è obbligatorio che sia così, ma è comunque consigliabile), di fatto, salvo in casi di emergenza, un sistemista non dovrà mai intervenire a mano sui suoi server.

Se da un lato tutto questo può risultare laborioso e in qualche modo “innaturale” nella gestione dall’altro comporta una serie di vantaggi clamorosi:
– Si può configurare il profilo di un server ed applicarlo a decine o centinaia di host, tutti uguali, tutti allineati, tutti configurati con la stessa logica.
– La procedura di setup e configurazione di un sistema è riproducibile, evitando cosi’ di trovarsi a gestire dei sistemi che poi non si sanno più reinstallare.
– E’ facile e quasi intrinseco prevedere per ogni host il suo corrispettivo di sviluppo, collaudo e produzione, non avendo limiti nel numero di ambienti previsti e avendo la certezza di avere i sistemi fra di loro allineati.
– I manifest di puppet sono generalmente gestiti con un sistema di versioning (git, subversion, cvs vanno tutti bene), questo comporta automaticamente una gestione formale, reversibile, documentata e tracciata delle modifiche fatte sui sistemi.

Il risultato è che, già in infrastrutture di qualche decine di host, Puppet diventa uno strumento unico e insostituibile per una gestione rapida ed efficace del parco macchine, lo sforzo inizlae di definizione delle sue configurazioni viene ampiamente ripagato nel tempo con tempi di gestione e setup dei sistemi enormemente ridotti.
Insomma, con Puppet ci si può dedicare al miglioramento e l’affinamento della propria infrastruttura risparmiando il tempo speso in attività ordinarie ripetitive e noiose.

Per chi volesse provare le potenzialita’ di Puppet oggi e’ possibile scaricare una versione Free Trial direttamente dal sito del produttore [To try Puppet Enterprise for free on up to 10 nodes].
Vi verranno richieste soltanto alcune informazioni formali, prima di poter ottenere il file installabile per la versione della nostra distro (sia 32 che 64 bit).
Potrete cosi’ scaricare il pacchetto puppet-<vostra versione>.tar.gz sul vostro Puppet Server; una volta estratto il contenuto del file, ad esempio sotto /opt , per lanciare l’installazione del pacchetto vi bastera’ lanciare lo script :

cd /opt/puppet

# sudo ./puppet-enterprise-installer

L’installazione procedera’ sostanzialmente da sola, all’inizio ci verra’ soltanto chiesta la conferma (premendo Y ) per avviare il processo d’installazione e copia dei file necessari, dopodiche’ bastera’ avere un po’ di pazienza.

Altrimenti e’ possibile questa ulteriore strada (ad esempio per un sistema Ubuntu 14.x)

wget https://apt.puppetlabs.com/puppetlabs-release-trusty.deb
sudo gdebi puppetlabs-release-trusty.deb 
sudo apt-get update 
sudo aptitude install puppet-common=3.7.3-1puppetlabs1 puppet=3.7.3-1puppetlabs1
sudo apt-get install puppetmaster-passenger

Nel caso in cui invece dobbiate solo fare un upgrade all’ultima versione vi bastera’ eseguire :

$ sudo apt-get update
$ sudo puppet resource package puppetmaster ensure=latest

Se poi non avete il tempo da impiegare nell’installazione, ma non volete perdere l’occasione di testare un prodotto cosi interessante potete anche scaricare una VM gia pronta al seguente link puppetlabs_VM

Configurazione

– Il puppet master
Raggiungete la macchina prescelta come puppet master che chiameremo, senza troppa fantasia, master e installate i programmi necessari:

root@master:

~# apt-get install puppetmaster

Questa operazione installerà anche le dipendenze, compreso il pacchetto per l’agent puppet.
L’installazione terminerà con uno sconfortante errore: niente paura! semplicemente il master non è ancora stato configurato a dovere e gli script di init non sono in grado di avviarlo correttamente.
Preoccupiamoci innanzitutto di permettere l’accesso ai file che verranno serviti dal nostro master, editate il file /etc/puppet/fileserver.conf e aggiungete una riga per permettere l’accesso alla sottorete 192.168.0.0/24 (per esempio).

 

Prepariamo un piccolo laboratorio con 3 macchine

Name                 IP                     OS                    Descrizione
puppet01        192.168.1.10            CentOS 6.5               puppet master
puppet02        192.168.1.20            CentOS 6.5               puppet client
puppet03        192.168.1.30            CentOS 5.10              puppet client

** configuriamo il file /etc/hosts

# vim /etc/hosts

192.168.1.10    puppet01
192.168.1.20    puppet02
192.168.1.30    puppet03

– Inseriamo queste due righe nel [main] edl file /etc/puppet/puppet.conf

certname = puppet
dns_alt_names = puppet,puppet01.localdomain

– Configuriamo il certificato
Con questo comando si creerà il certificato CA e il certificato per il puppetmaster

puppet01 # puppet master –verbose –no-daemonize

notice: Starting Puppet master version 2.7.25
(una volta apparsa la riga qui sopra potete chiudere con un Ctrl-C)

* verifichiamo: # puppet cert list –all
+ “srv-c6.localdomain” (10:BD:EB:92:CE:98:A7:37:FE:4B:D8:20:5E:C2:44:D5) (alt names: “DNS:puppet”, “DNS:puppet.localdomain”, “DNS:puppet01.localdomain”)

* riavviamo il servizio :

#  /etc/init.d/puppetmaster restart

Installazione dei client

sulle macchine puppet02 e puppet03 installare soltanto il client “puppet” nei seguenti modi :

Ubuntu/Debian : # sudo apt-get install puppet

RHEL/Centos   : # sudo yum install puppet -y

** sulle macchine client andremo a modificare il file puppet.conf indicando il nome della macchina Server, il puppetmaster

# vim /etc/puppet/puppet.conf

[agent]
server = puppet01

su puppet02 e puppet03

# puppet agent –test # si dovrebbe vedere l’agente creare una richiesta di certificato al master

ora su puppet01 eseguite

# puppet cert list –all # dovreste vedere le richieste effettuate dai client 01 e 02

La prima fase e’ cosi terminata, nel prossimo articolo vedremo come installare e configurare la Dashboard di Puppet per avere una gestione centralizzata tramite Browser

Machine e Deep Learning

Machine & Deep Learning

Machine & Deep Learning

Machine Learning

Che cos’è il machine learning?
Letteralmente può essere tradotto come “apprendimento delle macchine” o per meglio dire come “apprendimento automatico”. Per apprendimento si intende quel processo attraverso cui si diventa più abili, precisi e veloci a compiere un certo compito, in modo tale che chi ha appreso a fare qualcosa la possa fare meglio e più velocemente di prima. Per machine si intendono i computer, più precisamente i software e ancora più nello specifico gli algoritmi che sono alla base del funzionamento.

Si tratta quindi di scrivere dei programmi software che siano capaci di analizzare dei dati e, sempre più spesso si tratta di analizzare grandissime quantità di dati, rintracciando al loro interno dei pattern ricorrenti in modo da estrarre automaticamente l’algoritmo necessario per completare il compito assegnato.

Più semplicemente un programma per machine learning apprende dall’esperienza a realizzare un compito e le sue prestazioni migliorano con il tempo per ogni volta in piu’ in cui ripete quel compito.

Un esempio di machine learning 

Nel 2012 gli ingegneri di Google hanno creato un software (in particolare si trattava di una rete neurale che funzionava grazie a 16.000 processori collegati tra loro). Successivamente a questo software sono sono stati mostrati dei video presi da Youtube per tre giorni, ma senza dar loro alcuna indicazione a proposito di cosa fosse contenuto nei video.

Bene, l’esperimento ha dimostrato che il software è stato capace di riconoscere il ripetersi di volti umani e gatti nei frame dei video di Youtube. Se volete saperne di più qui trovate tutti i dettagli di questo esperimento, google_machine_learning.

Deep Learning

Esiste anche una nuova tendenza che si sta sviluppando nel campo dei Big data , risponde al nome di deep learning (traducibile come apprendimento approfondito).

Dietro il nome di deep learning si nascondono una serie di tecniche e tecnologie informatiche, nella fattispecie degli algoritmi di calcolo statistico attinenti alla branca dell’intelligenza artificiale e dell’apprendimento automatico, per l’appunto il machine learning. Questi algoritmi, strutturati in diversi livelli di astrazione, hanno lo scopo di permettere al sistema informatico di comprendere, più o meno, come funziona il cervello umano e come quest’ultimo analizzi e interpreti, ad esempio, il linguaggio o le immagini che gli arrivano dal nervo ottico.
Per fare ciò, i sistemi informatici in grado di portare avanti analisi del tipo deep learning sono basati su vaste reti neurali artificiali in grado di funzionare come i neuroni presenti nel cervello dell’uomo.

Perché Facebook (e gli altri)
Oggi giorno pare che tutti i grandi dell’hi-tech, a partire da Facebook sino a Google, passando per Yahoo! e Microsoft, stiano guardando con parecchia attenzione agli sviluppi che si registrano in questo settore. Investendo parecchi soldi negli istituti di ricerca più avanzati, e il perché è presto detto.
Il deep learning potrebbe (o per meglio dire dovrebbe) migliorare il modo in cui i dispositivi informatici analizzano il linguaggio naturale. Di conseguenza, ne dovrebbe migliorare sensibilmente la comprensione.

Se la strada intrapresa porterà ai risultati sperati, il deep learning dovrebbe permettere alle reti neurali che formano i sistemi informatici di processare i linguaggi naturali così come avviene nel cervello umano. I computer, insomma, potranno capire cosa gli utenti umani scrivano sulla loro bacheca o cosa vogliano cercare realmente; se siano tristi o felici; se l’immagine che hanno appena visualizzato gli sia piaciuta oppure no.
Facebook, Google, Microsoft e Yahoo!, quindi, potrebbero realizzare dei servizi commerciali sempre più approfonditi e precisi, rivendendo questi dati alle agenzie di comunicazione e marketing di tutto il mondo per campagne pubblicitarie sempre più mirate e cucite su misura dei bisogni degli utenti.

Chi vivra’ vedra’ !!!

IPCop il tuo prossimo Firewall

IPCop Firewall

IPCop Firewall

IPCop è una mini-distribuzione GNU/Linux open source adatta a realizzare un firewall hardware/software. Garantisce un’efficiente sicurezza della rete impedendo intrusioni esterne non autorizzate.

È un’ottima soluzione per piccole reti, reti aziendali e SOHO (Small Office-Home Office), ma può essere adattata ad ogni esigenza e può essere usata anche su hardware piuttosto datato, o dedicato, permettendo cosi anche un buon risparmio riguardo alla dotazione hardware necessaria. Può essere usata da amministratori di rete che non conoscono Linux per creare un firewall Linux-based, oppure può essere utilizzata da chi ne capisce di più (di Linux ovviamente!) ma non ha il tempo per configurare manualmente un un intero set di regole su iptables ecc…

IpCop offre un’ampia gamma di caratteristiche tecniche: si va dal Linux netfilter standard con capacità di NAT al supporto per DMZ via DNAT, dal supporto DHCP (sia server che client) al supporto NTP per sincronizzare e servire la data e l’ora, dalla possibilità di attivare un proxy a quella di attivare un IDS. Inoltre supporta quattro schede di rete e un numero illimitato di connessioni VPN, oltre ad offrire la possibilità di backup e restore della configurazione. È inoltre facilmente estendibile grazie a numerosi moduli presenti in Internet.

IpCop non richiede molta potenza di calcolo per poter funzionare: basta un 386 con poca RAM e MB di HD; ma per ottenere maggiori risultati è richiesto come minima configurazione un Pentium MMX con 64 Mb di ram e qualche GB di hard disk (prevalentemente per i log e le configurazioni). Se si intende utilizzare le funzioni di proxy sono consigliati 256 MB di ram e qualche GB in più libero. Le possibilità d’ installazione variano a seconda delle esigenze: via CD, chiavetta USB, o direttamente su Scheda Compct Flash (Occorre un hardware appropriato).

IPCop e’ rilasciato sotto la licenza GPL ed e’ sviluppata con il tradizionale stile dell’Open Source. Il progetto viene sviluppato grazie alla collaborazione di diversi sviluppatori sparsi per l’intero globo. L’interfaccia grafica e’ disponibile in 17 lingue diverse e la distribuzione include anche un raffinato e semplice sistema di aggiornamento.

La configurazione minima, prevede due interfacce di rete: Red (Internet) e Green(Lan); tuttavia si puo’ estendere la configurazione fino a 4 interfacce di rete, per aggiungere una DMZ e una scheda di rete dedicata al Wi-Fi.

La personalizzazione manuale delle regole e’ possibile attaverso la configurazione del file nel PATH: /etc/rc.d/rc,firewall.local e precisamente su /etc/rc.d/rc.firewall ed il comando e’:

$ /etc/rc.d/rc.firewall.local {start | stop | reload}

Particolarita’ davvero interessante di IPCop e’ quella di offrire la possibilita’ di espansioni aggiuntive di funzioni tramite un gran numero di addons .

HTML 5 & JS per le Mobile Apps

Html5 & Mobile AppOrmai l’HTML 5 è una realtà di fatto. Si aprono dunque nuove possibilità di sviluppo, l’HTML5 supporta una serie di nuove funzionalità che l’ormai collaudato e conosciutissimo HTML 4.x non può avere.
HTML 5 è dunque, di fatto, un linguaggio nuovo; sorge spontanea a questo punto una domanda: è possibile sviluppare applicazioni e siti web compatibili per smartphone e tablet usando l’HTML5?

 

In effetti se si prova a fare un breve quadro generale, vediamo che nel mondo degli Smartphone e dei Tablet il predominio si divide in soli due sistemi operativi iOS (per iPhone & iPad) ed Android. Come forse alcuni di voi gia’ sanno, sviluppare una App per iPhone/iPad richiede la conoscenza dell’Objective C++, mentre per Android serve avere una qual certa conoscenza di Java. Seppure Java e l’Objective C++ siano parenti, i metodi di programmazione sono sostanzialmente diversi. Quindi se la nostra esigenza è quella di sviluppare un’ applicazione per entrambi i sistemi operativi, perchè c’interessa coprire il 90% del mercato, saremmo costretti a programmare due differenti apps: questo vorra’ dire impiegare il doppio del tempo nello sviluppo, doppia manutenzione ed altre problematiche che non affronteremo adesso.

E’ a questo punto che l’HTML5 ci puo’ venire prontamente in aiuto: ossia perchè sviluppare due interfacce grafiche quando invece possiamo realizzarne una in HTML5 e javascript e ridurre cosi’ il core (o la Business Logic) dell’ applicazione a poche “righe di codice”? Se infatti un’ app per smartphone, non fa nient’altro che interrogare una base di dati (magari su XML) e visualizzare i vari risultati delle interrogazioni, l’HTML5 e Javascript saranno più che sufficienti per tutti i nostri scopi.

Lo sviluppo per HTML5+Javscript per dispositivi mobile è già una realtà e, a tale proposito, vi vorrei indicare due interessanti framework adatti anche allo sviluppo per mobile:

Jquery Mobile

Ext Js Touch

Se decidete di provare le demo di questi due framework javascript, ricordatevi di utilizzare un dispositivo Touch, altrimenti non funzionerà quasi nulla! Come potrete vedere dalle demo dei due framework le interfacce realizzate non hanno nulla da invidiare a quelle delle app programmate con Objective C++ e Java.

Nel caso in cui dobbiate installare un webserver sul vostro Android, vi consiglio di provare il seguente prodotto:

i-jetty

In questo modo potrete fare girare la vostra app in HTML 5 + Javascript senza dover essere collegati ad Internet.

Buon divertimento !

CouchDB conosciamolo meglio

couchDBQuesto articolo e’ la continuazione della precedente “Introduzione a CouchDB” per cui riprenderemo alcune informazioni di base gia viste per poi allargare alcuni importanti concetti ed aspetti che riguardano questo interessantissimo documentale via HTTP.


Apache CouchDB
e’ un moderno documentale, document-oriented, richiamabile semplicemente con l’HTTP e che al tempo stesso offre le piu’ avanzate funzionalita’ di replicazione dati e di ricerca in parallelo (Map/Reduce).

Caratteristiche

Scritto in: Erlang
Punto principale: Consistenza DB consistency, facilità d’uso
Licenza: Apache
Protocolli: HTTP/REST
Replicazione bidirezionale continua o ad-hoc con individuazione dei conflitti, replicazione master-master
MVCC – le operazioni di scrittura non bloccano le letture
Sono disponibili le versioni precedenti dei documenti
Progettazione crash-only (reliable)
Necessità di compattazioni nel tempo
Viste: embedded map/reduce
Viste formattate: lists & shows
Possibilità di validazione server-side dei documenti
Possibile autenticazione
Aggiornamenti real-time attraverso _changes (!)
Gestione degli allegati e, CouchApps (standalone js apps)
libreria jQuery inclusa
Utilizzo ideale: Per accumulazione dei dati con cambi occasionali sui quali vengono eseguite query predefinite. Situazioni in cui la gestione delle versioni è importante.
Per esempio: CRM, sistemi CMS. Situazioni in cui la replicazione master-master è una caratteristica interessante (ad esempio multisito).

In CouchDB non esistono tabelle. Il contenuto informativo è suddiviso in diversi database che fungono da contenitori di documenti con strutture potenzialmente disomogenee tra di loro. Il documento è il fulcro di questo software (e di quelli che come lui condividono l’approccio document-oriented).
Un documento è formato da un insieme di coppie chiave-valore.
A differenza dei database relazionali CouchDB non possiede il concetto di schema e quindi ogni documento in ogni database può essere strutturato in modo diverso dagli altri.

Le uniche due chiavi obbligatorie sono:
_id serve per identificare univocamente il documento (è comparabile, semanticamente, alla chiave primaria dei database relazionali)
_rev viene utilizzata per la gestione delle revisioni, ad ogni operazione di modifica infatti la chiave “_rev” viene aggiornata (questo meccanismo è alla base della prevenzione dei conflitti
in fase di salvataggio su CouchDB).

Questo accorgimento permette inoltre di poter interrogare il DBMS su versioni del documento non più attuali in quanto, con un approccio simile a quello di Subversion, CouchDB mantiene memoria di ogni revisione, da quella iniziale alla più recente.

L’altra grande differenza rispetto ai tradizionali RDBMS è il meccanismo di gestione delle query. Nei database relazionali una volta specificate e popolate le tabelle è possibile eseguire query utilizzando un linguaggio conosciuto come SQL (ne esistono vari dialetti ma il concetto non cambia nell’essenza);
a fronte di una query il RDBMS utilizza indici interni e le proprie relazioni per costruire in tempo reale una tabella di risultato (che può, nelle query più semplici, essere un sottoinsieme della tabella di partenza).

Questa soluzione riesce ad essere performante in quanto i dati sono strutturati con questo preciso scopo; inoltre il database non deve conoscere a priori le query che verranno eseguite ma può rispondere a qualsiasi interrogazione, purché sia stilata usando SQL valido.

Consistenza dei dati e replicazione

CouchDB non utilizza alcun meccanismo di locking ma sfrutta l’MVCC (Multiversion Concurrency Control): ogni modifica di un oggetto ne crea una nuova versione. Le versioni precedenti non vengono cancellate. Se due modifiche vanno in conflitto poiche’ accedono allo stesso documenti, la seconda riceve un errore in save. L’applicazione deve riprendere l’ultima versione del documento e rieseguire l’UPDATE.
L’isolamento e’ mantenuto solo a livello di un singolo documento, questa e’ una notevole semplificazione, rispetto alla complessa logica transazionale di altri database, ma consente l’ottimizzazione, la parallelizzazione e la distribuzione dei dati in modo semplice. A livello di accesso al file di dati ogni singola modifica ad un documento rispetta le proprieta ACID (Atomic Consistent Isolated Durable) con la serializzazione delle modifiche sui documenti e la scrittura sincrona sul disco.

Piu’ database CouchDB possono essere collegati tra loro in modo molto semplice. I database vengono aggiornati tra loro con una replicazione peer-to-peer incrementale implementata nativamente nell’engine. CouchDB permette una replicazione bidirezionale asincrona, utilizza un meccanismo automatico di risoluzione dei conflitti e fornisce una eventual consistency tra i database. Se i database sono ospitati su nodi differenti si ottiene con questo la distribuzione dei dati.
La replicazione di CouchDB puo’ essere utilizzata sia per sincronizzare database locali che per complesse configurazioni con sharding dei dati.

Per lavorare su CouchDB esiste anche la possibilita’ di installare CouchApp, in pratica una serie di script che permettono di costruire completi applicazioni stand-alone per il database usando solo HTML e JavaScript. Poiche’ il database stesso risponde in HTTP e’ possibile concentrare su un solo nodo (eventualmente replicabile) la classica pila applicativa web a tre livelli.

CouchDB si e’ cosi’ rapidamente imposto sul mercato, diventando uno tra i piu’ usati database non relazionali. In pratica i due piu’ diffusi NoSQL documentali sono CouchDB e MongoDB: entrambi sono velocissimi (memorizzano i dati in BSON/JSON), sono scalabili in modo nativo su piu’ nodi e non forniscono un’interfaccia SQL.

Per una documentazione piu’ dettagliata si rimanda al sito ufficiale di Apache CouchDB.

 

Per ora e’ tutto, alla prossima e, buon divertimento!