Il libro di
Gift e
Jones mostra come sia possibile scrivere script Python utili al lavoro di amministratore di macchine
UNIX-like; è un testo creativo e divertente, a metà strada fra un manuale di programmazione e un
cookbook. Gli autori hanno volutamente usato un linguaggio amichevole, senza troppi formalismi o discorsi gonfiati di pesanti teorie. Buona la struttura dei capitoli, ognuno dei quali enuclea in modo più o meno completo un dato argomento.
Python for Unix and Linux System Administration mette a segno due obiettivi importanti: far innamorare il lettore di Python e infiammare il dibattito che vuole Python come sostituto di Perl nell'ambito del lavoro di
sysadmin.
Il lavoro di un amministratore di sistema è supportato, oltre che dalle mille utility a disposizione nelle macchina
UNIX-like, anche da uno dei linguaggi più potenti, ossia Perl: è tuttora uno dei migliori linguaggi di programmazione, molto flessibile e adatto a una moltitudine di compiti grazie alle eccellenti librerie di cui è dotato, perfetto ausilio per i
superuser. I due autori propongono di mettere in secondo piano Perl a beneficio di Python e il loro libro vuole essere una sorta di conferma di tale tesi.
Python può fare tutto quello che fa Perl, e può farlo in modo più elegante e più semplice, con prestazioni eccellenti, anche se qui per prestazioni non intendiamo espressamente i tempi di esecuzione, quanto una maniera di organizzare gli script più efficace e un modo di scrivere il codice senza dubbio più pulito, chiaro e semplice. Python non invidia dunque nulla a Perl, tanto meno le librerie che la comunità mette a disposizione. La
Python Standard Library è una delle migliori in circolazione e costantemente in crescita per qualità e potenzialità.
E allora la domanda che un lettore potrebbe porsi è a questo punto: perché decidere di scegliere Python come linguaggio di riferimento per l'amministrazione di sistema? Il libro intero, come detto, fornisce precise risposte a questa domanda; cerchiamo qui di elencare brevemente le caratteristiche che hanno spinto milioni di programmatori all'uso di Python:
- facilità di scrittura del codice e semplicità di apprendimento del linguaggio;
- eccellente leggibilità e mantenimento del codice;
- librerie numerose e potenti;
- alto numero di forum e siti dedicati;
- eccellente documentazione;
- pieno supporto alla tecnologia OOP.
Perfino
Eric Raymond si era sbilanciato molti anni fa nel suo
How to became an hacker inneggiando a Python e proponendolo come primo linguaggio da imparare; fu buon profeta e ottimo osservatore.
Gift e
Jones hanno pensato bene di scrivere
Python for Unix and Linux System Administration presentando i più comuni problemi che gli amministratori sono chiamati a risolvere e proponendo di conseguenza possibili eleganti soluzioni tramite script Python. Ogni capitolo del libro prende in consegna un problema e gli autori propongono tutte le funzioni e le librerie di Python adatte a quel particolare ambiente. La struttura dei capitoli è tale che il lettore può benissimo ignorare l'ordine seguito nel testo e procedere per convenienza. E così faremo in questa recensione.
Partiamo infatti dal capitolo 8 denominato
OS Soup: il lettore potrà rendersi conto del fatto che
Python gode di un grado di portabilità altissimo e può ben integrarsi con qualsiasi piattaforma, senza per questo perdere efficacia. Se vogliamo, tale capitolo rappresenta un po' un'eccezione rispetto al titolo del libro, ma è ugualmente una lettura illuminante e dà forza al concetto secondo cui Python può essere ritenuto un linguaggio completo, tale da sostituire script Bash e le funzionalità di Perl. L'intento degli autori è quello di incoraggiare gli utenti e gli amministratori a programmare in Python, perché, diversamente dagli altri linguaggi, le utility e gli script già programmati e testati in un particolare ambiente possono benissimo essere trasferite e subito adattate ad altri sistemi, in modo del tutto indolore e con somma soddisfazione dell'amministratore, liberato dal tedioso compito del debugging di procedure già testate in un ambiente, ma non funzionanti in altre piattaforme. Lungo il capitolo si leggerà delle caratteristiche e del funzionamento degli script nei vari sistemi Mac OS X, Ubuntu, Red Hat, Solaris; delle problematiche e delle relative soluzioni in ambienti virtualizzati e, nel finale, di alcune questioni legate al
cloud computing.
Analizziamo adesso qualche interessante capitolo. Per esempio, la prima cosa che gli autori descrivono è una potente utility di Python e cioé la shell, pezzo unico nel panorama dei linguaggi di programmazione.
Nessun altro linguaggio infatti può vantare una shell come quella di Python . Nel libro si fa riferimento a
IPython, elemento imprescindibile per i programmatori, utile per un'infinità di scopi. In particolare, la shell viene usata in fase di test del codice e migliora l'efficacia e i tempi della fase medesima.
IPython permette di programmare in modo più comodo, offrendo alcuni utili funzioni quali l'autocompletamento dei comandi, l'uso e consumo delle utility della shell di base del sistema, il logging delle sessioni. A supporto, un ottimo
forum e un ricco
wiki relativo al progetto.
Un amministratore di sistema si trova a dover gestire e manipolare soprattutto file di testo, generalmente
plain text, tipo i file di configurazione o i file di log. Per manipolare allora correttamente tali risorse servono librerie funzionali, di cui Python dispone. In più, specialmente oggi, si sta diffondendo la cultura di XML e molti file e dati sono strutturati secondo una delle tante sintassi
XML-based. In tal caso
le librerie di Python circa XML è quanto di meglio si possa desiderare da un linguaggio di programmazione potente ed elegante, al pari di Java. Il capitolo 3 presenta tutte le funzioni e le librerie per la gestione delle stringhe e del testo in generale.
Gli autori mostrano come sia possibile e semplice in Python interagire con i potenti strumenti quali gawk e grep e scrivere script efficaci. Per poter meglio comprendere l'eleganza di Python, talvolta gli autori presentano accanto al codice Python gli equivalenti script in Perl o script Bash: proprio qui si notano le caratteristiche menzionate prima, e cioè eleganza, leggibilità, semplicità di scrittura e comprensione del codice Python. Molte sono pure le librerie di terze parti che un programmatore può usare per produrre report e formati utili per il Web o per la stampa.
Accanto alle problematiche relative al testo e alla gestione dei file di testo, gli amministratori lavorano spesso su problemi legati al file system e alla gestione dei file e delle directory in generale. A tal proposito conviene sempre usare i comandi e le utility che il sistema mette a disposizione, quindi interagire con la shell e i suoi comandi. Abbiamo prima parlato di
IPython che quindi ci torna immediatamente utile. Ma un capitolo altrettanto interessante e ricco di tanto codice è il sesto, nel quale
gli autori mostrano come sia possibile mettere in pratica procedure e politiche di gestione del file system anche complesse sfruttando, al solito, le pratiche librerie di Python. Il capitolo diventa così una sorta di
cookbook in miniatura, con tanti esempi
circa la comparazione dei file, le delicate operazioni di merging e le problematiche relative alla compressione e archiviazione dei file; gli script mostrano come è possibile interagire con i comandi tipo
tar,
bz2 e via così.
Un altro capitolo stimolante è quinto dedicato al networking. In questo caso al lettore si richiedono conoscenze un po' più approfondite. Il capitolo spiega come
programmare script relativi ai vari servizi internet, quindi gli autori presentano le
best practices per
usare in modo sicuro ed efficiente i socket, mettere a punto RPC, utilizzare e interagire con SSH. Alla fine del capitolo viene presentata una completa trattazione della creatura di
Philippe Biondi ossia
Scapy. Quest'ultimo offre una libreria dedicata al networking molto potente: le funzioni offerte rappresentano un mix dei più utili comandi quali
traceroute,
ping e
tcpdump. Descrivendo
Scapy,
Gift e
Jones hanno voluto dimostrare come con Python un amministratore può staccarsi abbastanza nettamente dalle classiche utility di sistema e realizzare propri applicativi, personalizzati e specificatamente dedicati al problema che devono risolvere, con piena soddisfazione per l'utente.
L'ultimo capitolo presenta
casi di studio, ottimi esempi
per vedere Python all'opera su progetti concreti e complessi. Il primo esempio riguarda la gestione del
DNS, un secondo esempio mostra l'uso di Python nell'analisi e nel reporting dei log di
Apache, un terzo esempio mostra come è possibile costruire un FTP mirror in modo semplice, veloce e sicuro.
In definitiva occorre menzionare quanto segue. Il titolo del testo di
Gift e
Jones può far pensare a un'opera mastodontica ed omnicomprensiva sull'arte dell'amministrazione di un sistema e sulle relative soluzioni Python, ma in realtà la prima parte è praticamente assente nel testo. Rimane quindi un buon manuale sulle funzioni e librerie di Python, che difficilmente trovano ampia trattazione nei libri relativi soltanto alla programmazione. E' evidente la necessaria conoscenza del linguaggio per apprezzare fino in fondo
Python for Unix and Linux System Administration.